SpringDateJpa实现多条件分页动态sql语句查询(小型项目)
2020-03-01 07:16
645 查看
SpringDateJpa实现多条件分页动态sql语句
1创建SpringBoot项目
2导入依赖
在pom.xml复制如下代码
<!-- Spring Boot JPA 依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
3创建各包
controller 转发请求与响应
dao 接口方法存放
entity 实体类存放
service 业务方法
service.Imp方法实现
4.创建实体类
我这里创建的是Student(学生实体类)
//小辣椒创建get/set,toString()方法,没有的请加上get/set,toString()方法 @Data //jpa自动创建数据库 @Entity public class Student { //主键标识 @Id //自动递增 @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer sId;//学生id private String sName;//学生Name private Integer sAge;//学生年龄 private Date sSex;//学生性别 }
5.在dao包创建接口
接口名StudentDao
/** * 里面内置了许多实用的方法 * JpaRepository<Student, Integer> * Student是实体类,Integer是实体类中主键的数据类型 * * 生成动态sql的接口 * JpaSpecificationExecutor<Student> * */ public interface StudentDao extends JpaRepository<Student, Integer>,JpaSpecificationExecutor<Student>{
6.创建业务接口
接口名StudentService
我们要完成的业务是多条件分页查询所以要创建一个自定义方法
public interface StudentService { /** * 分页多条件查询 */ Map<String, Object> findAll(PageRequest pageable,Student student); }
7.实现业务接口
我们创建一个业务接口实现类
类名StudentServiceImp
@Service public class StudentServiceImp implements StudentService{ @Autowired private StudentDao studentdao; @Override public Map<String, Object> findAll(PageRequest pageable, Student student) { Page<Student> findAll = studentdao.findAll(selectquanpage(student),pageable); Map<String, Object> map = new HashMap<String, Object>(); map.put("rows", findAll.getContent()); map.put("total", findAll.getTotalElements()); return map; } private Specification<Student> selectquanpage(Student student){ return new Specification<Student>() { private static final long serialVersionUID = 1L; @Override public Predicate toPredicate(Root<Student> root, CriteriaQuery<?> query, CriteriaBuilder cb) { // TODO Auto-generated method stub Predicate conjunction = cb.conjunction(); List<Expression<Boolean>> expressions = conjunction.getExpressions(); //模糊查询学生姓名 /** * 首先if判断传进的学生姓名不能为空 * <String>表示查询的字段的数据类型 * get("sName")需要查询的字段,引号里需要与实体类中的一模一样区分大小写 */ if (student.getsName()!=null&&student.getsName()!="") { expressions.add(cb.like(root.<String>get("sName"), "%"+student.getsName()+"%")); } //查询学生性别 /** * 首先if判断传进的学生姓名不能为空可以为0 * 0为女,1为男 * */ if (student.getsSex()!=null) { expressions.add(cb.equal(root.<Integer>get("sSex"), student.getsSex())); } return conjunction; } }; } }
8.配置配置文件
配置src/main/resources下的application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=utf8 spring.datasource.username=数据库用户名 spring.datasource.password=密码 spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect ##显示sql语句 spring.jpa.show-sql=true ##修改 spring.jpa.hibernate.ddl-auto=update
9.编辑前台页面
我这里用的是Html前后台分离
框架用的EasyUi
注意!每个框架不同分页参数也可能不同
js部分
<script type="text/javascript"> $(function(){ init(); } ) //初始化 function init() { var nameset=$('#nameset').val(); var sexset=$('#sexset').combobox('getValue'); if(sexset=="--请选择--"){ sexset=null; } //加载表格 $("#dg").datagrid({ url: 'http://127.0.0.1:8080/select', method:"post", pagination:true, toolbar:"#ss", queryParams:{ sName:nameset, sSex:sexset } }); $("#ss").form("reset"); } //显示类型 function xingbie(value, row, index) { return value==1?"男":"女"; } </script>
html部分代码,如果用Easyui别忘了导入
<!--查找条件栏 --> <form id="ss"> <label>学生姓名:</label> <input class="easyui-textbox" type="text" id="nameset" ></input> <label>学生性别:</label> <select id="sexset" class="easyui-combobox" style="width: 200px;"> <option value="--请选择--">--请选择--</option> <option value="1">男</option> <option value="0">女</option> </select> <a href="javascript:void(0)" class="easyui-linkbutton" onclick="init()">查找</a> </form> <!--显示数据表格 --> <table id="dg" class="easyui-datagrid" title="商品信息" data-options="singleSelect:true,collapsible:true,pagination:true"> <thead> <tr> <th data-options="field:'sId'">编号</th> <th data-options="field:'sName'">商品名称</th> <th data-options="field:'sAge'">上次价格</th> <th data-options="field:'sSex',formatter:xingbie">类别</th> </tr> </thead> </table>
10运行访问
前台这里我用的是HB,国产软件挺好用的
运行
成功页面
以上功能就全部能用啦
最后附带数据库
-- Table structure for student -- ---------------------------- DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `s_id` int(11) NOT NULL AUTO_INCREMENT, `s_age` int(11) DEFAULT NULL, `s_name` varchar(255) DEFAULT NULL, `s_sex` int(11) DEFAULT NULL, PRIMARY KEY (`s_id`) ) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of student -- ---------------------------- INSERT INTO `student` VALUES ('1', '16', '赵一', '1'); INSERT INTO `student` VALUES ('2', '16', '钱二', '1'); INSERT INTO `student` VALUES ('3', '16', '孙一', '1'); INSERT INTO `student` VALUES ('4', '16', '李吴', '1'); INSERT INTO `student` VALUES ('5', '16', '周三', '0'); INSERT INTO `student` VALUES ('6', '16', '吴五', '0'); INSERT INTO `student` VALUES ('7', '15', '郑二', '0'); INSERT INTO `student` VALUES ('8', '15', '王五', '0'); INSERT INTO `student` VALUES ('9', '15', '马三', '0'); INSERT INTO `student` VALUES ('10', '15', '刘四', '0'); INSERT INTO `student` VALUES ('11', '16', '关赵', '0'); INSERT INTO `student` VALUES ('12', '16', '张三', '0'); INSERT INTO `student` VALUES ('13', '16', '曹二', '0'); INSERT INTO `student` VALUES ('14', '14', '尼八', '1'); INSERT INTO `student` VALUES ('15', '14', '徐李', '1'); INSERT INTO `student` VALUES ('16', '14', '郭一', '1');
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- Spring boot data JPA 自定义JPQL语句,以及PagingAndSortingRepository接口实现分页查询
- MySQL中根据if标签实现多条件模糊查询(动态SQL语句)
- 使用反射让linq实现动态查询, 类似拼接sql语句的where 条件
- sql不用拼接语句实现动态查询条件
- Springboot整合JPA以及动态条件查询的实现
- spring data jpa 原生态sql语句多表不添加外键,实现分页
- hibernate(jpa)根据实体动态生成查询条件,并实现分页问题的解决方案
- 【spring data jpa】带有条件的查询后分页和不带条件查询后分页实现
- 【spring data jpa】带有条件的查询后分页和不带条件查询后分页实现
- Hibernate使用原生的动态sql实现带条件的查询分页功能
- Spring Boot Jpa之构建动态SQL查询语句
- Spring Data JPA实现动态条件与范围查询实例代码
- spring jpa动态条件查询并分页
- jfinal动态sql管理简洁实现分页多条件模糊查询
- Spring Boot Jpa之构建动态SQL查询语句
- 使用反射让linq实现动态查询, 类似拼接sql语句的where 条件
- Spring MVC结合Spring Data JPA实现按条件查询和分页
- SpringData JPA 实现动态条件查询
- 【spring data jpa】带有条件的查询后分页和不带条件查询后分页实现
- spring date jpa 实现动态查询