springboot之jpa详解03

springboot之jpa详解

1.jpa介绍

(1)jpa(java persistence Api) 是sun官方提出的java持久化规范,作为开发人员提供的一种对象/关联映射工具来管理java应用中的关系数据
(2)简化现有持久化开发工作和整合ORM技术

2.使用

2.1 spring data默认基础实现,即预先生成方法

继承JpaRepository

public interface UserRepository extends JpaRepository<User, Long> {
}

使用预先生成默认方法

@Test
public void testBaseQuery() throws Exception {
	User user=new User();
	userRepository.findAll();
	userRepository.findOne(1l);
	userRepository.save(user);
	userRepository.delete(user);
	userRepository.count();
	userRepository.exists(1l);
	// ...
}

2.2 根据查询方法自动解析成sql

(1)自定义的简单查询是根据方法名来自动生成SQL,主要的语法是findPersonByxxx,readAllBy,queryXXBy,countXXBy, getXXBy后面跟属性名称
语法还是比较丰富的…

User findUserByUserName(String userName);

(2) 也可以加一些关键字 and or

User findByUserNameOrEmail(String username, String email);

(3) 修改、删除、统计也是类似语法

Long deleteById(Long id);
Long countByUserName(String userName)

(4) 基本上 SQL 体系中的关键词都可以使用,例如: LIKE 、 IgnoreCase、 OrderBy

List<User> findByEmailLike(String email);
User findByUserNameIgnoreCase(String userName);
List<User> findByUserNameOrderByEmailDesc(String email);

3. 复杂查询

在实际的应用中,经常需要用到分页、筛选、多表连接查询等

3.1 分页查询

在spring boot的jpa中已经实现了分页的功能,在查询的方法中,需要传入参数pageable,当查询中有多个参数时,建议pageable作为最后一个参数

//分页查询,page参数指定查询哪一页
    @RequestMapping("/find3/{page}")
    public List<Person> find3(@PathVariable("page") int page){
        Pageable pageable = PageRequest.of(page,2, Sort.Direction.DESC, "id");
        return personRepository.findAll(pageable).getContent();
    }

3.2 自定义sql:@Query

在 SQL 的查询方法上面使用@Query注解,如涉及到删除和修改在需要加上@Modifying,也可以根据需要添加 @Transactional对事物的支持,查询超时的设置等

@Modifying
@Query("update User u set u.userName = ?1 where u.id = ?2")
int modifyByIdAndUserId(String  userName, Long id);
	
@Transactional
@Modifying
@Query("delete from User where id = ?1")
void deleteByUserId(Long id);
  
@Transactional(timeout = 10)
@Query("select u from User u where u.emailAddress = ?1")
User findByEmailAddress(String emailAddress);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值