SpringBoot JPA实现增删改查、分页、排序、事务操作等功能示例

作者:漫步于成神之路男人 时间:2023-06-27 23:54:05 

今天给大家介绍一下SpringBoot中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 这个注解就可以轻轻松松的实现事务的操作了,是不是特别方便啊。

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

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

2.事务的隔离级别也是可以自己设置的。

3.事务的传播行为也是可以自己设置的。

到此到此关于JPA的一些常规方法就介绍完了,谢谢大家的阅读。

来源:http://blog.csdn.net/linzhiqiang0316/article/details/52639265

标签:spring,boot,分页
0
投稿

猜你喜欢

  • Jetpack Compose常用组件详细介绍

    2022-10-16 19:42:58
  • Android 高仿微信支付数字键盘功能

    2021-08-10 09:36:19
  • kotlin实现五子棋单机游戏

    2022-10-16 03:20:09
  • SpringBoot集成redis实现分布式锁的示例代码

    2022-08-24 19:21:56
  • java开发分布式服务框架Dubbo原理机制详解

    2023-01-04 19:53:01
  • 分别在Groovy和Java中创建并初始化映射的不同分析

    2023-11-26 08:15:42
  • Android性能之冷启动优化详析

    2022-03-06 13:42:51
  • Java 开发的几个注意点总结

    2021-11-30 20:07:11
  • JWT在OpenFeign调用中进行令牌中继详解

    2023-02-07 04:19:15
  • SpringBoot配置GlobalExceptionHandler全局异常处理器案例

    2023-06-11 12:14:36
  • Android仿美团下拉菜单(商品选购)实例代码

    2023-05-07 06:03:34
  • Java抽象类和接口使用梳理

    2022-10-02 08:38:46
  • Jackson中json格式的字符串与对象的互相转换方式

    2022-01-29 03:31:07
  • Java中Lambda表达式和函数式接口的使用和特性

    2023-06-20 20:05:42
  • Flutter开发Widgets 之 PageView使用示例

    2023-06-24 13:23:34
  • Java服务限流算法的6种实现

    2022-04-03 04:52:51
  • Java时间转换成unix时间戳的方法

    2022-06-09 14:39:36
  • C# NAudio 库的各种常见使用方式之播放 录制 转码 音频可视化

    2023-06-20 04:14:16
  • 解决Map集合使用get方法返回null抛出空指针异常问题

    2023-11-25 00:14:00
  • C#实现XML文件读取

    2023-03-06 13:38:44
  • asp之家 软件编程 m.aspxhome.com