上次介绍了JPA,这次来用JPA写一个增删改查的实例
JPA增加删除修改的实现步骤
(1)在pom.xml添加mysql和spring-data-jpa依赖;
(2)在application.properties文件中配置mysql连接配置文件
(3)在application.properties文件中配置JPA配置信息;
(4)编写一个测试例子;
一: 创建实体类;
以上步骤省略,具体看上一篇;
二: 创建jpa repository类操作持久化(CrudRepository);
查询添加删除基本按照jpa中定义的方法;
更新:
一:可以使用原始的save方式;如下:直接调用save()完成更新操作;
@Transactional
public void updateUser1(User user) {
User user1 = userRepository.findOne(user.getId());
if (user1 != null) {
if (user.getAge() != null) {
user1.setAge(user.getAge());
}
if (user.getGender() != null) {
user1.setGender(user.getGender());
}
if (user.getName() != null) {
user1.setName(user.getName());
}
userRepository.save(user1);
}
}
二:使用注解的方式更新;如下调用下面这个自定义的更新方法完成更新操作;
@Modifying(clearAutomatically = true)
@Query(value = "UPDATE user as u SET u.NAME= ?1,u.gender= ?2,u.age= ?3 WHERE u.id = ?4",nativeQuery = true)
public int updateUser(String name,String gender,Integer age,Integer id);
三: 创建service类;
四: 创建controller;
五: 测试完成;
GitHub地址: https://github.com/gumeimen/springbootjpab/tree/master
一 查询的方法:
1,查找所有:findAll
2,查找单个:findOne
3,分页查询:findAll(Pageable pageable)
4,排序:findAll(Sort sort)
5根据实体类属性查询: findByProperty (type Property);
6,条件查询:and/or/findByAgeLessThan/LessThanEqual 等,
例如:findByUsernameAndPassword(String username , String password)
7,总数查询 count() 或者 根据某个属性的值查询总数countById(int id);
二 添加,删除,修改的方法:
添加:
1,save(T) 保存单个或者批量保存
2,saveAndFlush 保存并刷新到数据库
删除:
1,delete(T) 删除或者批量删除;
修改:
使用jpa进行update操作主要有两种方式:
1、调用保存实体的方法
1)保存一个实体:repository.save(T entity)
2)保存多个实体:repository.save(Iterable<T> entities)
3)保存并立即刷新一个实体:repository.saveAndFlush(T entity)
2、@Query注解,自己写JPQL语句
使用JPA中@Query 注解实现update 操作,代码如下:
@Modifying(clearAutomatically = true) @Query(value = "UPDATE user as u SET u.NAME= ?1,u.gender= ?2,u.age= ?3 WHERE u.id = ?4",nativeQuery = true) public int updateUser(String name,String gender,Integer age,Integer id);
备注:
1.这个nativeQuery = true不要漏了。
2.JPA的中定义修改方法时不要传递一个对象应该是需要修改多少就传递多少参数进去,然后sql占位符是?1,?2依次类推,
我跟新的是整个用户所有传递了所有字段进去了,注意sql的占位符和传递的参数要保持一致,不然修改不会成功!,
3.@Modifying(clearAutomatically = true) 自动清除实体里保存的数据。
官网上很详细大家要是用可以查询官网,下面是常用的一些:
And => 等价于 SQL 中的 and 关键字 例如:findByUsernameAndPassword(String user, Striang pwd);
Or => 等价于 SQL 中的 or 关键字,例如:findByUsernameOrAddress(String user, String addr);
Between => 等价于 SQL 中的 between 关键字,例如:SalaryBetween(int max, int min);
LessThan => 等价于 SQL 中的 "<",例如: findBySalaryLessThan(int max);
GreaterThan => 等价于 SQL 中的">",例如: findBySalaryGreaterThan(int min);
IsNull => 等价于 SQL 中的 "is null",例如: findByUsernameIsNull();
IsNotNull => 等价于 SQL 中的 "is not null",例如: findByUsernameIsNotNull();
NotNull=> 与 IsNotNull 等价;
Like => 等价于 SQL 中的 "like",例如: findByUsernameLike(String user);
NotLike => 等价于 SQL 中的 "not like",例如: findByUsernameNotLike(String user);
OrderBy => 等价于 SQL 中的 "order by",例如: findByUsernameOrderBySalaryAsc(String user);
Not => 等价于 SQL 中的 "! =",例如: findByUsernameNot(String user);
In => 等价于 SQL 中的 "in",例如: findByUsernameIn(Collection<String> userList) ,方法的参数可以是 Collection 类型,也可以是数组或者不定长参数;
NotIn => 等价于 SQL 中的 "not in",例如: findByUsernameNotIn(Collection<String> userList) ,方法的参数可以是 Collection 类型,也可以是数组或者不定长参数;
Spring Data JPA 官网: http://projects.spring.io/spring-data-jpa/