**
一、源码分析:
**
1.通过JdkDynamicAopProxy创建动态代理对象;
2.动态代理对象:SimpleJpaRepositoty
3.实现了JpaRepository, JpaSpecificationExecutor接口
4.Spring 和Spring Data Jpa 的整合对符合Dao层spring data Jpa规范的接口进行扫描
5.通过EntityManager对象调用方法
二、一些简单方法使用:
1.findOne():通过Id进行查询;
立即加载,调用的EntityManager的find()方法
2.getOne();
需要手动添加事务:@Transcational 注解
延迟加载,调用的EntityManager的getReference()方法;
什么时候用,什么时候加载
3.Delete() :进行删除;
4.Save ():可以进行保存和更新功能:
4.1当主键Id为空时,进行添加操作
4.2当主键id不为空时,进行更新操作(一般需要配置查询操作)
5.Exists():判断id为这个的用户是否存在
6.Count() : 查询全部的数量
三、使用jpql语言进行复杂查询
需要添加上@Query注解
四、 对多个占位符进行赋值
jpql语句: from Customer where custName=? and custId=?
注:查询的是对象的属性名
多占位符赋值:
- 通过默认方式,根据顺序的方式对他赋值自动赋值;
- 通过索引的方式进行赋值;语法:?+数字
比如:from Customer where custName=?2 and custId=?1
意思:
1.custName使用的是第二个参数
2.custId使用的是第一个参数
五、进行增删改操作时
1.需要额外添加@modify注解;
意思:代表的是要对表进行更新操作
2.需要手动添加事务@Transaction
3.执行成功,数据库并没有进行改变的原因;
默认自动回滚;
解决:添加@Rollback(false); 不自动回滚
六、使用sql语言进行查询
对**@Query**注解的属性:
nativeQuery:
false 使用jpql语言 ;true 使用sql语言
七、Spring Data Jpa 提供的命名规则查询:
规则:findBy+(首字母大写)属性名称
翻译为 :from xxx(实体类) where 属性名=?
模糊查询:findBy+(首字母大写)属性名称+查询方式
多条件查询:
findBy+(首字母大写)属性名称+查询方式+连接符号(And|Or)+属性名称
例如: