jpa 总结

转:http://blog.csdn.net/linzhiqiang0316/article/details/52639265

先来介绍一下JPA中一些常用的查询操作:

 

[java] view plain copy
  1.  //And --- 等价于 SQL 中的 and 关键字,比如 findByHeightAndSex(int height,char sex);  
  2.  public List<User> findByHeightAndSex(int height,char sex);  
  3.   
  4. // Or --- 等价于 SQL 中的 or 关键字,比如 findByHeightOrSex(int height,char sex);  
  5.  public List<User> findByHeightOrSex(int height,char sex);  
  6.   
  7.  //Between --- 等价于 SQL 中的 between 关键字,比如 findByHeightBetween(int min, int max);  
  8.  public List<User> findByHeightBetween(int min,int max);  
  9.   
  10.  //LessThan --- 等价于 SQL 中的 "<",比如 findByHeightLessThan(int max);  
  11.  public List<User> findByHeightLessThan(int max);  
  12.   
  13.  //GreaterThan --- 等价于 SQL 中的">",比如 findByHeightGreaterThan(int min);  
  14.  public List<User> findByHeightGreaterThan(int min);  
  15.   
  16.  //IsNull --- 等价于 SQL 中的 "is null",比如 findByNameIsNull();  
  17.  public List<User> findByNameIsNull();  
  18.   
  19.  //IsNotNull --- 等价于 SQL 中的 "is not null",比如 findByNameIsNotNull();  
  20.  public List<User> findByNameIsNotNull();  
  21.   
  22.  //NotNull --- 与 IsNotNull 等价;  
  23.  public List<User> findByNameNotNull();  
  24.   
  25.  //Like --- 等价于 SQL 中的 "like",比如 findByNameLike(String name);  
  26.  public List<User> findByNameLike(String name);  
  27.   
  28.  //NotLike --- 等价于 SQL 中的 "not like",比如 findByNameNotLike(String name);  
  29.  public List<User> findByNameNotLike(String name);  
  30.   
  31.  //OrderBy --- 等价于 SQL 中的 "order by",比如 findByNameNotNullOrderByHeightAsc();  
  32.  public List<User>findByNameNotNullOrderByHeightAsc();  
  33.   
  34.  //Not --- 等价于 SQL 中的 "! =",比如 findByNameNot(String name);  
  35.  public List<User> findByNameNot(String name);  
  36.   
  37.  //In --- 等价于 SQL 中的 "in",比如 findByNameIN(String name);  
  38.  public List<User> findByNameIn(String name);  
  39.   
  40.  //NotIn --- 等价于 SQL 中的 "not in",比如 findByNameNotIN(String name);  
  41.  public List<User> findByNameNotIn(String name);  

JPA中的风格就是这样,每个方法其实都是一条SQl命令,通过一些关键字就可以实现SQL中类似于like in等等之类的命令了。

 

最重要的是我们再开发的过程中,只需要编写dao中一个个方法,不需要我们编写dao的实现类,这样就可以大大的挺高代码的复用率、提高我们的开发效率。

说道这里不免会有人会问,那一些比较复杂的关联查询要怎么实现呢,JPA的处理方法是:利用原生的SQl命令来实现那些复杂的关联查询,下面就来看下案例。

 

[java] view plain copy
  1. //利用原生的SQL进行查询操作  
  2.    @Query(value = "select o.* from orders o ,user u where o.uid=u.id and u.name=?1", nativeQuery = true)  
  3.    @Modifying  
  4.    public List<Order> findOrderByName(String name);  
  5.   
  6.    //利用原生的SQL进行删除操作  
  7.    @Query(value = "delete from orders where id=?1 ", nativeQuery = true)  
  8.    @Modifying  
  9.    public void deleteOrderById(int id);  
  10.   
  11.    //利用原生的SQL进行删除操作  
  12.    @Query(value = "delete from orders where uid=?1 ", nativeQuery = true)  
  13.    @Modifying  
  14.    public void deleteOrderByUId(int uid);  
  15.   
  16.    //利用原生的SQL进行修改操作  
  17.    @Query(value = "update orders set name=?1 where id=?2 ", nativeQuery = true)  
  18.    @Modifying  
  19.    public void updateOrderName(String name,int id);  
  20.   
  21.    //利用原生的SQL进行插入操作  
  22.    @Query(value = "insert into orders(name,uid) value(?1,?2)", nativeQuery = true)  
  23.    @Modifying  
  24.    public void insertOrder(String name,int uid);  

上面的案例中给出了,利用JPA实现原生的SQL操作,可以很方便的进行数据库表的操作。
所以如果是那种查询语句不是非常复杂,对查询时间要求不是特别苛刻的项目,完全可以采用JPA来进行项目的开发。

 

下面接着来介绍JPA是怎么实现分页的效果,其实JPA脱胎于hibernate,所以本身就对分页功能有很好的支持。下面给出具体例子:

 

[java] view plain copy
  1. //实现分页功能  
  2. Page<User> findByNameNot(String name,Pageable pageable);  
[java] view plain copy
  1. @RequestMapping(value = "/params", method= RequestMethod.GET)  
  2.    @ResponseBody  
  3.    public String getEntryByParams(@RequestParam(value = "name", defaultValue = "林志强") String name, @RequestParam(value = "page", defaultValue = "0") Integer page, @RequestParam(value = "size", defaultValue = "15") Integer size) {  
  4.        Sort sort = new Sort(Sort.Direction.DESC, "id");  
  5.        Pageable pageable = new PageRequest(page, size, sort);  
  6.        Page<User> pages=userDao.findByNameNot(name,pageable);  
  7.        Iterator<User> it=pages.iterator();  
  8.        while(it.hasNext()){  
  9.            System.out.println("value:"+((User)it.next()).getId());  
  10.        }  
  11.        return "success...login....";  
  12.    }  

上面的代码一个是在dao层中的,一个是在controller中的。

 

dao层中添加一个返回值为Page,参数值为Pageable。controller层中通过实例化Pageable这个类,然后调用dao层这个分页方法。

通过这些步骤就可以轻轻松松的实现分页的效果啦,看起来是不是特别方便。

最后在给大家介绍一下JPA是如何实现事务操作的。其实因为SpringBoot中已经对事务做了很好的封装了,使用起来特别方便。下面看一下案例:

 

[java] view plain copy
  1. @RequestMapping("/saveOrder")  
  2. @ResponseBody  
  3. @Transactional()  
  4. public String saveOrder(){  
  5.     Order o1=new Order("11",2);  
  6.     Order o2=new Order("22",2);  
  7.     Order o3=new Order("33",2);  
  8.     Order o4=new Order("44",2);  
  9.     orderDao.save(o1);  
  10.     orderDao.save(o2);  
  11.     orderDao.save(o3);  
  12.     orderDao.save(o4);  
  13.     return "successfull....saveOrder......";  
  14. }  

只要在方法的上面加上@Transaction 这个注解就可以轻轻松松的实现事务的操作了,是不是特别方便啊。

 

不过这里有几点需要注意的是:

1.这个注解实现的事务管理器是默认的,如果不想要默认是事务管理器,可以自己进行添加,我这里就不多介绍了。

2.事务的隔离级别也是可以自己设置的,具体请看这篇博客 点击打开链接

3.事务的传播行为也是可以自己设置的,具体请看这篇博客点击打开链接

转载于:https://www.cnblogs.com/yanghongfei/p/8288438.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466891.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度好文|面试官:进程和线程,我只问这19个问题

# 干了这碗鸡汤&#xff01;我急切地盼望着可以经历一场放纵的快乐&#xff0c;纵使巨大的悲哀将接踵而至&#xff0c;我也在所不惜。-- 太宰治 《人间失格》大家好&#xff0c;这里是周日凌晨4点&#xff0c;仍在笔耕不辍的程序喵大人。下面隆重推出我呕心沥血&#xff0c;耗时…

IIS7报“假”正式版随Server 2008发布

用过Vista的用户都知道&#xff0c;在该系统已经集成了IIS7.0版本&#xff0c;应该有很多用户已经用该版本建立了站点。可是你是否感觉到它的功能并没有传说中的哪么强大呢?这个问题终于在TechEd 2007的“Windows Server 2008中的IIS 7&#xff0c;挑战示来互联网”课程中&…

zbb20180117 汉字转拼音 pinyin4

包地址https://pan.baidu.com/disk/home?#list/vmodelist&path%2F%E5%AD%A6%E4%B9%A0Pinyin4j的基本用法1. 简单介绍有时候&#xff0c;需要将汉字编程对应的拼音&#xff0c;以方便数据的处理。比如在Android手机应用的开发上&#xff0c;要查询联系人的姓名&#xff0c;…

终于有人将进程间通信讲明白了

使用多进程协作来实现应用和系统是一种被广泛使用的开发方法。多进程协作主要有以下三点优势。将功能模块化&#xff0c;避免重复造轮子。增强模块间的隔离&#xff0c;提供更强的安全保障。提高应用的容错能力。进程间通信&#xff08;Inter-Process Communication&#xff0c…

个人喜欢的歌曲——女生篇

个人喜欢的歌曲 —— 女生篇 1、吴汶芳&#xff1a;孤独的总和2、蔡依林&#xff1a;妥协、柠檬草的味道3、陈姿彤&#xff1a;战争世界、我的世界4、雁卿&#xff1a;怕寂寞5、张碧晨&#xff1a;年轮6、庄心妍&#xff1a;爱囚&#xff0c;以后的以后7、魏新雨&#xff1a;…

神舟本本放心率

总得票8520 可以放心购买 22.0% 1942票 不太放心 64.0% 5510票 看情况 12.0% 1068票投票起止时间&#xff1a;2007-11-15 至2008-11-22转载于:https://www.cnblogs.com/badapple126/archive/2007/11/16/962020.html

梯度下降算法

在学习逻辑回归时&#xff0c;对梯度上升算法进行了应用&#xff0c;看到其他的博客讲解&#xff0c;梯度上升算法适合求最大值&#xff0c;梯度下降算法适合求最小值&#xff0c;这里有一个分析&#xff1a;梯度上升算法公式是学习率&#xff0c;是一个常数。这个是根据逻辑回…

花了一个深夜,才用C语言写了一个2048游戏雏形

12年我毕业的第二个月工资&#xff0c;我就买了一个IPAD&#xff0c;然后在IPAD上下了一个2048游戏&#xff0c;玩起来非常爽。然后这几天看到好几个公众号都发了自己写这个游戏的代码&#xff0c;然后我自己也想试试&#xff0c;所以就有了这篇文章&#xff0c;写代码还是很有…

向银行贷款20万, 分期三年买50万的车,个人借款40万, 贷款10年买200万的房子,再贷款120万分创业...

向银行贷款20万按1年期贷款利率为&#xff1a;6%&#xff0c;若按年还贷款&#xff0c;银行贷款利息为&#xff1a;200&#xff0c;000*6%12&#xff0c;000。连本带息&#xff1a;20*106%21.2万分期三年买50万的车 贷款总额30万 年利率按10%算&#xff0c;分三年还清&#xff…

如何避免测试盲区

测试盲区&#xff0c;也就是软件中测试人员未测试到的地方&#xff0c;造成这方面的原因主要有测试人员对测试需求理解不足、经验不足和思维僵化等原因造成的。接下来&#xff0c;就如何避免测试盲区给出几点建议。 一、 充分理解软件需求需求方面的如果理解有误或者分析遗漏&a…

集成算法——Adaboost代码

集成算法是我们将不同的分类器组合起来&#xff0c;而这种组合结果就被称为集成方法或者是元算法。使用集成方法时会有多种形式&#xff1a;可以是不同算法的集成&#xff0c;也可以是同意算法在不同设置下的集成&#xff0c;还可以是数据集不同部分分配给不同分类器之后的集成…

年终抽奖来了

时间很快&#xff0c;2020年已经到了12月份&#xff0c;我从2018年开始写公众号&#xff0c;经过了快两年是时间&#xff0c;我收获了4万的读者&#xff0c;非常开心。我自己是一个挺逗逼的人&#xff0c;而且我写公众号并不觉得我比别人厉害&#xff0c;技术上我真的就是一个很…

DOS状态下可以安装Win XP

在DOS状态下可以安装Win XP&#xff0c;插入Win XP光盘后&#xff0c;首先从开始中进入MS-DOS&#xff0c;然后在MS-DOS下输入“G:\Setup.exe”(G为光驱盘符)即可。 如果想从纯DOS下进行安装&#xff0c;可用启动盘启动到DOS状态&#xff0c;安装时首先加载Smartdrv.exe(将Win …

嵌入式 Linux下永久生效环境变量bashrc

作者&#xff1a;skdkjxy原文&#xff1a;http://blog.sina.com.cn/s/blog_8795b0970101f1f9.html.bashrc文件 在linux系统普通用户目录&#xff08;cd /home/xxx&#xff09;或root用户目录&#xff08;cd /root&#xff09;下&#xff0c;用指令ls -al可以看到4个隐藏文件&am…

回归分析——线性回归

机器学习中&#xff0c;对于离散的数据可以做分类问题&#xff0c;那对于连续的数据就是做回归问题&#xff0c;这里对一元线性回归和多元线性回归做一个简介&#xff0c;帮组理解。回归分析&#xff1a;从一组样本数据出发&#xff0c;确定变量之间的数学关系式&#xff0c;对…

编译原理(五)自底向上分析之算符优先分析法

自底向上分析之算符优先分析法 说明&#xff1a;以老师PPT为标准&#xff0c;借鉴部分教材内容&#xff0c;AlvinZH学习笔记。 基本过程 1. 一般方法&#xff1a;采用自左向右地扫描和分析输入串&#xff0c;从输入符号串开始&#xff0c;通过反复查找当前句型的句柄&#xff0…

做Android开发,要清楚init.rc里面的东西

init.rc 复习看这个之前&#xff0c;先看看大神总结的文章这篇文章总结的非常到位&#xff0c;但是因为代码不是最新的Android版本&#xff0c;对我们最新的Android版本不适用。http://gityuan.com/2016/02/05/android-init/#init rc文件拷贝拷贝其实也就是把文件放到机器的某个…

abap常用系统变量

常用的系统变量如下: 1.sy-pagno当前页号 2.SY-DATUM当前时间 3.SY-LINSZ当前报表宽度 4.SY-LINCT当前报表长度 5.SPACE空字符 6.SY-SUBRC执行状态为0,表示成功. 7.SY-UNAME 用户名 8.SY-UZEIT当前时间 9.SY-TCODE当前的事务代码 10.SY-LSIND列表索引页 11.SY-LISTI上一个列表的…

随机森林

随机森林的思想&#xff1a;随机取样&#xff0c;创建M棵决策树&#xff0c;并对决策树的结果进行投票&#xff0c;选出最多的类别作为最后的分类结果。这里在创建决策树的时候引入了基尼指数的概念&#xff0c;基尼指数和信息增益的作用一样&#xff0c;都是选出数据集的最佳分…

Linux静态库和动态库的设计

静态库和动态库的设计 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 Linux应用程序设计中需要的外部函数主要由函数库和系统调用来提供 Linux应用程序使用的主要函数库均存放于/lib, /usr/lib目录下&#xff0c;其中采用*.so.*方式命名的是动态函数库…