Spring Data JPA学习笔记
下面先来介绍一下JPA中一些常用的查询操作:
//And --- 等价于 SQL 中的 and 关键字,比如 findByHeightAndSex(int height,char sex);
public List<User> findByHeightAndSex(int height,char sex); // Or --- 等价于 SQL 中的 or 关键字,比如 findByHeightOrSex(int height,char sex);
public List<User> findByHeightOrSex(int height,char sex); //Between --- 等价于 SQL 中的 between 关键字,比如 findByHeightBetween(int min, int max);
public List<User> findByHeightBetween(int min,int max); //LessThan --- 等价于 SQL 中的 "<",比如 findByHeightLessThan(int max);
public List<User> findByHeightLessThan(int max); //GreaterThan --- 等价于 SQL 中的">",比如 findByHeightGreaterThan(int min);
public List<User> findByHeightGreaterThan(int min); //IsNull --- 等价于 SQL 中的 "is null",比如 findByNameIsNull();
public List<User> findByNameIsNull(); //IsNotNull --- 等价于 SQL 中的 "is not null",比如 findByNameIsNotNull();
public List<User> findByNameIsNotNull(); //NotNull --- 与 IsNotNull 等价;
public List<User> findByNameNotNull(); //Like --- 等价于 SQL 中的 "like",比如 findByNameLike(String name);
public List<User> findByNameLike(String name); //NotLike --- 等价于 SQL 中的 "not like",比如 findByNameNotLike(String name);
public List<User> findByNameNotLike(String name); //OrderBy --- 等价于 SQL 中的 "order by",比如 findByNameNotNullOrderByHeightAsc();
public List<User>findByNameNotNullOrderByHeightAsc(); //Not --- 等价于 SQL 中的 "! =",比如 findByNameNot(String name);
public List<User> findByNameNot(String name); //In --- 等价于 SQL 中的 "in",比如 findByNameIN(String name);
public List<User> findByNameIn(String name); //NotIn --- 等价于 SQL 中的 "not in",比如 findByNameNotIN(String name);
public List<User> findByNameNotIn(String name);
JPA中的风格就是这样,每个方法其实都是一条SQl命令,通过一些关键字就可以实现SQL中类似于like in等等之类的命令了。
最重要的是我们再开发的过程中,只需要编写dao中一个个方法,不需要我们编写dao的实现类,这样就可以大大的挺高代码的复用率、提高我们的开发效率。
说道这里不免会有人会问,那一些比较复杂的关联查询要怎么实现呢,JPA的处理方法是:利用原生的SQl命令来实现那些复杂的关联查询,下面就来看下案例
//利用原生的SQL进行查询操作
@Query(value = "select o.* from orders o ,user u where o.uid=u.id and u.name=?1", nativeQuery = true)
@Modifying
public List<Order> findOrderByName(String name); //利用原生的SQL进行删除操作
@Query(value = "delete from orders where id=?1 ", nativeQuery = true)
@Modifying
public void deleteOrderById(int id); //利用原生的SQL进行删除操作
@Query(value = "delete from orders where uid=?1 ", nativeQuery = true)
@Modifying
public void deleteOrderByUId(int uid); //利用原生的SQL进行修改操作
@Query(value = "update orders set name=?1 where id=?2 ", nativeQuery = true)
@Modifying
public void updateOrderName(String name,int id); //利用原生的SQL进行插入操作
@Query(value = "insert into orders(name,uid) value(?1,?2)", nativeQuery = true)
@Modifying
public void insertOrder(String name,int uid);
上面的案例中给出了,利用JPA实现原生的SQL操作,可以很方便的进行数据库表的操作。
所以如果是那种查询语句不是非常复杂,对查询时间要求不是特别苛刻的项目,完全可以采用JPA来进行项目的开发。
下面接着来介绍JPA是怎么实现分页的效果,其实JPA脱胎于hibernate,所以本身就对分页功能有很好的支持。下面给出具体例子:
//实现分页功能
Page<User> findByNameNot(String name,Pageable pageable);
@RequestMapping(value = "/params", method= RequestMethod.GET)
@ResponseBody
public String getEntryByParams(@RequestParam(value = "name", defaultValue = "林志强") String name, @RequestParam(value = "page", defaultValue = "0") Integer page, @RequestParam(value = "size", defaultValue = "15") Integer size) {
Sort sort = new Sort(Sort.Direction.DESC, "id");
Pageable pageable = new PageRequest(page, size, sort);
Page<User> pages=userDao.findByNameNot(name,pageable);
Iterator<User> it=pages.iterator();
while(it.hasNext()){
System.out.println("value:"+((User)it.next()).getId());
}
return "success...login....";
}
上面的代码一个是在dao层中的,一个是在controller中的。
dao层中添加一个返回值为Page,参数值为Pageable。controller层中通过实例化Pageable这个类,然后调用dao层这个分页方法。
通过这些步骤就可以轻轻松松的实现分页的效果啦,看起来是不是特别方便。
最后在给大家介绍一下JPA是如何实现事务操作的。其实因为SpringBoot中已经对事务做了很好的封装了,使用起来特别方便。下面看一下案例:
@RequestMapping("/saveOrder")
@ResponseBody
@Transactional()
public String saveOrder(){
Order o1=new Order("11",2);
Order o2=new Order("22",2);
Order o3=new Order("33",2);
Order o4=new Order("44",2);
orderDao.save(o1);
orderDao.save(o2);
orderDao.save(o3);
orderDao.save(o4);
return "successfull....saveOrder......";
}
只要在方法的上面加上@Transaction 这个注解就可以轻轻松松的实现事务的操作了,是不是特别方便啊。
Spring Data JPA学习笔记的更多相关文章
- spring data jpa 学习笔记
springboot 集成 springData Jpa 1.在pom.xml添加依赖 <!-- SpringData-Jpa依赖--> <dependency <groupI ...
- Spring Data JPA 学习记录1 -- 单向1:N关联的一些问题
开新坑 开新坑了(笑)....公司项目使用的是Spring Data JPA做持久化框架....学习了一段时间以后发现了一点值得注意的小问题.....与大家分享 主要是针对1:N单向关联产生的一系列问 ...
- Spring学习笔记(八)Spring Data JPA学习
jpa简单的命名规则如下,这个不多做介绍,放在这里也是给自己以后查找起来方便,这篇文章主要介绍之前一直忽略了的几个点,像@NoRepositoryBean这个注解,以及怎么自定义Repositor ...
- [Spring Data Repositories]学习笔记--使用现有的repository
以下内容是在学习Spring-Data-mongoDB中的Spring Data Repositories时做的一些笔记.备忘! 感觉学习还是看官方的资料比较透彻一些. Spring Data Rep ...
- 031 Spring Data Elasticsearch学习笔记---重点掌握第5节高级查询和第6节聚合部分
Elasticsearch提供的Java客户端有一些不太方便的地方: 很多地方需要拼接Json字符串,在java中拼接字符串有多恐怖你应该懂的 需要自己把对象序列化为json存储 查询到结果也需要自己 ...
- [Spring Data MongoDB]学习笔记--MongoTemplate查询操作
查询操作主要用到两个类:Query, Criteria 所有的find方法都需要一个query的object. 1. 直接通过json来查找,不过这种方式在代码中是不推荐的. BasicQuery q ...
- [Spring Data MongoDB]学习笔记--MongoTemplate插入修改操作
插入操作: 直接给个例子 import static org.springframework.data.mongodb.core.query.Criteria.where; import static ...
- [Spring Data MongoDB]学习笔记--_id和类型映射
_id字段的映射: MongoDB要求所有的document都要有一个_id的字段. 如果我们在使用中没有传入_id字段,它会自己创建一个ObjectId. { , "accounts&qu ...
- [Spring Data MongoDB]学习笔记--牛逼的MongoTemplate
MongoTemplate是数据库和代码之间的接口,对数据库的操作都在它里面. 注:MongoTemplate是线程安全的. MongoTemplate实现了interface MongoOperat ...
随机推荐
- CVS文件导出
/** * @param $filename 文件名 */ public function exportCxv($filename) { $filename = @iconv('UTF-8', 'GB ...
- 7.利用canvas和js画一个渐变的
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 现身说法:面对DDoS攻击时该如何防御?
上周,我们的网站遭到了一次DDoS攻击.虽然我对DDoS的防御还是比较了解,但是真正遇到时依然打了我个措手不及.DDoS防御是一件比较繁琐的事,面对各种不同类型的攻击,防御方式也不尽相同.对于攻击来的 ...
- WPF中的Stretch属性
有时候我们在WPF程序中设置了图片的Width和Height,但图片显示出来的宽和高并不是我们预期的效果,这实际上是由于Image的默认Stretch属性导致的 Image的Stretch属性默认为U ...
- 2019-2020-1 20199319《Linux内核原理与分析》第三周作业
操作系统是如何工作的 基础知识 1.计算机的三个法宝:存储程序计算机.函数调用堆栈机制.中断. 2.堆栈的具体作用:记录函数调用框架.传输函数参数.保存返回值的地址.提供函数内部局部变量的存储空间. ...
- Linux课程学习 第四课
学习必须如蜜蜂一样,采过许多花,这才能酿出蜜来 这月事比较多,每课的笔记都会慢慢补回来的,做事得有始有终 在网络上,人们越来越倾向于传输压缩格式的文件,原因是压缩文件体积小,在网速相同的情况下,传输时 ...
- laravel中间件失效,配置文件重新加载
composer dump-autoload php artisan cache:clear 清理视图缓存 php atisan view:clear 清除运行缓存 php artisan cache ...
- DNS域名工作原理及解析
0x00 定义 DNS( Domain Name System)是“域名系统”的英文缩写,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网.DNS使用TCP和UDP端口53 ...
- 跳跃表-原理及Java实现
跳跃表-原理及Java实现 引言: 上周现场面试阿里巴巴研发工程师终面,被问到如何让链表的元素查询接近线性时间.笔者苦思良久,缴械投降.面试官告知回去可以看一下跳跃表,遂出此文. 跳跃表的引入 我们知 ...
- Mybatis的体系结构(转载)
原文:http://blog.csdn.net/hupanfeng/article/details/9068003/ MyBatis的前身叫iBatis,本是apache的一个开源项目, 2010年这 ...