只需两步!Eclipse+Maven快速构建第一个Spring Boot项目 构建了第一个Spring Boot项目。
Spring Boot连接MySQL数据库 连接了MySQL数据库。
本文在之前的基础上,使用Spring Data Jpa对MySQL数据库进行CRUD——增加(Create)、查询(Retrieve)、更新(Update)和删除(Delete) 操作。
Spring Data Jpa
- ORM映射元数据
- API
- 查询语言
增加(Create)
在UserController.java中添加方法:
@RequestMapping("/addUser")
@ResponseBody
public User addUser(String userName, String PassWord) {
User user = new User();
user.setUserName(userName);
user.setPassWord(PassWord);
userRepository.save(user);
return user;
}
使用Postman访问http://localhost:8080//user/addUser?userName=Laplace&PassWord=math :
数据库里面增加了一条id为5,username为Laplace,password为math的记录:
为了方便查询,再利用相同的操作插入一些数据。
查询(Retrieve)
上一篇已经完成了简单的findAll和findByUserName。这里进行一些自定义查询操作。
Spring data 大部分的SQL都可以根据方法名定义的方式来实现,也支持自己写SQL语句来查询。
在SQL的查询方法上面使用@Query注解,如涉及到删除和修改在需要加上@Modifying.也可以根据需要添加 @Transactional 对事物的支持。
例如查询id大于等于6的记录,SQL语句:SELECT * FROM USER t WHERE t.id >= 6,这条语句在Navicat中新建查询中运行是没有问题的,添加到Dao中却是有问题的,会抛出异常:
java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List
在Dao中添加:
@Query("SELECT * FROM USER t WHERE t.id >= 6")
List<User> getUser();
这是由于Jpa无法自动完成查询结果到自定义实体的映射。需要改成下面这个样子的,写实体类的路径,From后面加的不是表的名字,而是对应的实体类的名字。
@Query("SELECT new com.example.demo.domain.User(t.id,t.userName,t.passWord) FROM User t WHERE t.id >= 6")
List<User> getUser();
还需要在实体类User.java中间添加对应的构造方法(与上面SQL语句中的保持一致),才能够返回实体类的对象的:
public User(Long id, String userName, String passWord) {
super();
this.id = id;
this.userName = userName;
this.passWord = passWord;
}
@RequestMapping("/getUser")
public List<User> getUser() {
List<User> res = userRepository.getUser();
return res;
}
这是数据库中的内容:
更新(Update)
更新可以使用save方法;这里使用自定义SQL语句进行更新,试用一下@Modifying注解。
Dao:
@Modifying
@Query("UPDATE User u SET u.userName = ?1 WHERE u.id = ?2")
void updateUserNameById(String userName, Long id);
Controller:
@RequestMapping("/updateUserNameById")
@Transactional
public String updateUserNameById(@RequestParam("name") String name, @RequestParam("id") Long id) {
userRepository.updateUserNameById(name, id);
return "更新成功";
}
使用Postman访问http://localhost:8080//user/updateUserNameById?name=AAAAAA&id=6 :
可以看到数据库发生了改变:
删除(Delete)
根据id删除记录,直接在Controller中添加:
@RequestMapping("/deleteUserById")
public String deleteUserById(@RequestParam("id") Long id) {
userRepository.deleteById(id);
return "删除成功";
}
使用Postman访问http://localhost:8080//user/deleteUserById?id=11:
可以完成删除操作:
总结
本文使用Spring Boot JPA进行数据操作,不难发现,使用JPA可以大量减少Dao层代码,提升开发效率。