Spring data 介绍

Spring data 出现目的 为了简化、统一 持久层 各种实现技术 API ,所以 spring data 提供一套标准 API 和 不同持久层整合技术实现 .

自己开发 Repository 只需要继承 JpaRepository 接口CrudRepository

save、 delete、 deteleAll、 findAll、 findOne、 count

PagingAndSortingRepository

findAll(Sort) 基于排序的查询、 findAll(Pageable) 基于分页的查询

Spring data Query 使用 实现条件查询

第一种 根据方法命名规则自动生成

基于一列查询等值查询 findBy 列名 例如: findByName(String name);

基于一列模糊查询 findBy 列名 Like 例如: findByNameLike(String name)

基于两列等值查询 findBy 列名 And 列名 例如: findByUsernameAndPassword(String

username, String password )

第二种 不按命名规则写的查询方法,可以配置@Query 绑定 JPAL 语句或者 SQL 语句

第三种 不按命名规则写的查询方法 配置@Query 没写语句 , 实体类 @NamedQuery 定义

带有条件 修改和删除操作

使用@Query 注解完成 , 搭配使用@Modifying 标记修改、删除操作

将记录 1 的 最小长度改为 15

注意:使用单体测试,测试 DAO ,要添加事务,设置事务不回滚

//代码实现

前端页面端

1 //首先需要使用到表单序列化为json对象的方法

//将表单序列化为json对象2 $.fn.serializeJson=function(){3 var serializeObj={};4 var array=this.serializeArray();5 var str=this.serialize();6 $(array).each(function(){7 if(serializeObj[this.name]){8 if($.isArray(serializeObj[this.name])){9 serializeObj[this.name].push(this.value);10 }else{11 serializeObj[this.name]=[serializeObj[this.name],this.value];12 }13 }else{14 serializeObj[this.name]=this.value;15 }16 });17 return serializeObj;18 };

2.获取到giid表单信息

$(function(){

// 先将body隐藏,再显示,不会出现页面刷新效果

$("body").css({visibility:"visible"});

// 信息表格

$('#grid').datagrid( {

iconCls : 'icon-forward',

fit : true,

border : false,

rownumbers : true,

striped : true,

pageList: [30,50,100],

pagination : true,

toolbar : toolbar,

url : "../../courier_pageQuery.action",

idField : 'id',

columns : columns,

onDblClickRow : doDblClickRow

//按条件查询

$("#searchBtn").click(function(){

//将searchFrom表单中的数据转成json数据

var params = $("#searchForm").serializeJson();

//将json对象,绑定到datagrid上,完成带有条件查询的请求

$("#grid").datagrid('load',params);

//关闭查询窗口

$("#searchWindow").window('close');

});

});

});

3.后台代码

action操作

@SuppressWarnings("all")

@ParentPackage("json-default")

@Namespace("/")

@Controller

@Scope("prototype")

public class CourierAction extends ActionSupport implements ModelDriven{

//模型驱动

private Courier courier = new Courier();

@Override

public Courier getModel() {

return courier;

}

//注入CourierService

@Autowired

private CourierService courierSerive;

/**

* 保存

*/

@Action(value="curier_save",results={@Result(name="success",

location="./pages/base/courier.html",type="redirect")})

public String save(){

//调用业务层

courierSerive.save(courier);

return SUCCESS;

}

//--分页查询所有取派员数据---

//接收参数 属性驱动

private int page;

private int rows;

public void setPage(int page) {

this.page = page;

}

public void setRows(int rows) {

this.rows = rows;

}

/**

* 分页查询所有的信息

*/

@Action(value="courier_pageQuery",results={@Result(name="success",type="json")})

public String pageQuery(){

//调用Spring的方法

Pageable pageable = new PageRequest(page-1, rows);

//根据查询条件,构造Specification条件查询对象

Specification specification = new Specification() {

/**

* 构造条件查询方法,如果方法返回null 代表无条件查询

* Root 参数 获取条件表达式

* CriteriaQuery 参数 构造简单查询条件返回,提供where方法

* CriteriaBuilder 参数 构造Predicate对象,条件对象,构造复杂查询效果

*/

@Override

public Predicate toPredicate(Root root, CriteriaQuery> query, CriteriaBuilder cb) {

//将查询到的结果放到集合中

List list = new ArrayList();

//单表查询(查询当前对象对应的数据表),查询工号,等值查询

if(StringUtils.isNotBlank(courier.getCourierNum())){

Predicate p1 =cb.equal(root.get("courierNum").as(String.class), courier.getCourierNum());

list.add(p1);

}

if(StringUtils.isNotBlank(courier.getCompany())){

//查询所属单位,模糊查询

Predicate p2 = cb.like(root.get("company").as(String.class), "%"+courier.getCompany()+"%");

list.add(p2);

}

if(StringUtils.isNotBlank(courier.getType())){

//查询类型,等值查询

Predicate p3 = cb.equal(root.get("type").as(String.class),courier.getType());

list.add(p3);

}

//多表查询,查询标准

Join standardRoot = root.join("standard",JoinType.INNER);

if(courier.getStandard() != null && StringUtils.isNotBlank(courier.getStandard().getName())){

//进行模糊查询

Predicate p4 = cb.like(standardRoot.get("name").as(String.class),

"%"+courier.getStandard().getName()+"%");

list.add(p4);

}

//new Predicate[0] 代表一个泛型,返回类型是Predicate

return cb.and(list.toArray(new Predicate[0]));

}

};

//调用业务层

Page pageData=courierSerive.findAll(specification,pageable);

//压入值栈对象

//根据查询结果封装datagrid需要的数据格式

Map result = new HashMap();

result.put("total", pageData.getTotalElements());

result.put("rows", pageData.getContent());

//压入值栈返回

ActionContext.getContext().getValueStack().push(result);

return SUCCESS;

}

}

Service层操作

/**

* 条件查询所有的快递员信息

*/

@Override

public Page findAll(Specification specification, Pageable pageable) {

return courierRepository.findAll(specification,pageable);

}

Dao操作,Dao接口需要继承两个接口

Spring Data 还是非常强大的,封装了hibernate的很多方法,我们可以直接拿来用

public interface CourierRepository extends JpaRepository,

JpaSpecificationExecutor{

}

java easyui条件组合查询_EasyUi+Spring Data 实现按条件分页查询相关推荐

  1. Spring Data JPA 多表关联查询的实现

    Spring Data JPA 多表关联查询的实现 多表查询在spring data jpa中有两种实现方式,第一种是利用hibernate的级联查询来实现,第二种是创建一个结果集的接口来接收连表查询 ...

  2. Spring Data Solr教程:分页

    在我的Spring Data Solr教程的较早部分中,我们实现了一个简单的搜索功能,该功能用于搜索待办事项的信息. 我们搜索功能的当前实现将所有搜索结果显示在一个页面中. 对于大多数现实生活中的应用 ...

  3. java 瑞吉外卖 day5 套餐管理业务 套餐新增,套餐分页查询 套餐修改 套餐停售起售设置 短信服务

    新增套餐 准备工作: 套餐信息分页查询 前面已经写了好几个分页查询了,这里查询的关键点,是套餐分类名称,不在套餐表中,我们要到别的表里拿,然后封装进setmealDto @GetMapping(&qu ...

  4. Spring Data JPA 多条件判空查询

    Spring Data JPA虽然大大的简化了持久层的开发,但是在实际开发中,很多地方都需要高级动态查询. 使用@Query注解,这种方式可以直接在Repository里面写sql,但是这种方式的问题 ...

  5. ORM框架之Spring Data JPA(三)高级查询---复杂查询

    一.spring data jpa高级查询 1.1Specifications动态查询 有时我们在查询某个实体的时候,给定的条件是不固定的,这时就需要动态构建相应的查询语句,在Spring Data ...

  6. Spring Data Solr教程:动态查询

    Solr通常被称为搜索服务器,我们可以在实现全文搜索功能时使用它. 但是,当我们实现从搜索表单获取其输入的搜索功能时,利用Solr的性能通常是明智的. 在这种情况下,执行的搜索查询取决于收到的输入. ...

  7. Spring Data JPA_多表关联查询中应该注意的问题

    今天在写Spring Data JPA的时候发现这样一个问题 问题如下: Caused by: org.hibernate.DuplicateMappingException: Table [sys_ ...

  8. 使用Spring的Pageable来实现分页查询

    1.导入包: import org.springframework.data.domain.Pageable; 2.测试类: @Testpublic void whenQuerySeccess() t ...

  9. oracle分页查询加总数,oracle count 百万级 分页查询记要总数、总条数优化

    oracle count 百万级 分页查询记录总数.总条数优化 oracle count 百万级 查询记录总数.总条数优化 最近做一个项目时,做分页时,发现分页查询速度很慢,分页我做的是两次查询,一次 ...

最新文章

  1. Rust基础笔记:Getting input from the console
  2. 2020 年腾讯新增 20 亿行代码,鹅厂第一编程语言还是它
  3. Delphi中比较两个对象是否一致及地址是否相同
  4. 在SQLite中使用索引优化查询速度
  5. IEDA中JavaDoc的自动生成、手动生成,以及生成html文档
  6. Master HA源码解析
  7. java的reentrantlock_JAVA中ReentrantLock详解(转)
  8. SQLServer 优化SQL语句:in 和not in的替代方案
  9. Mysql 排序null值 排序问题分析
  10. telnet和ping区别
  11. Linux 系统中随机数在 KVM 中的应用
  12. 使用weui滚动加载结合php实现分类页数据列表
  13. 云盘万能钥匙破解去后门版Cracked By 8848
  14. sensor 驱动调试小结
  15. loadrunner录制手机app脚本
  16. python11——随机点名
  17. JVM中类加载的时机
  18. 专精特新小巨人企业是什么
  19. [侯捷]C++ STL 体系结构与内核分析--从平地到万丈高楼(数据结构)
  20. 魅族计算机按键声,魅族16T按键音怎么关

热门文章

  1. 拉拢苹果用户,谷歌推出“从 iOS 转移到 Android” App
  2. 基于Flink CDC打通数据实时入湖
  3. 王兴评华为造车:技术实力、忽悠能力都和特斯拉旗鼓相当;“微信键盘”开启内测;PDF 开发者去世|极客头条...
  4. 微软推出 Microsoft Build of OpenJDK 预览版!
  5. 只需一行代码,就能导入所有的Python库?
  6. Zookeeper 夺命连环 9 问
  7. ​苏宁回应股权质押给淘宝:正常合作;苹果App Store被越狱商店指控垄断;Docker 20.10.0发布|极客日报...
  8. Python 分析二手房源信息,揭晓土地交易现状
  9. 曾遭周鸿祎全网封杀的 360 猛将 :草根打工到 36 岁身家上亿的逆袭!
  10. 编程工作枯燥、代码质量不高?华为云 MVP 来支招!