相关文章推荐
爱旅游的木瓜  ·  PHP JSON的解析和创建·  1 年前    · 
贪玩的皮带  ·  Transmission ...·  1 年前    · 
求醉的小刀  ·  sql demand 按需刷新 ...·  1 年前    · 
活泼的签字笔  ·  javascript - Warning: ...·  1 年前    · 
@NotNull (message = "参数不允许为空" ) private Integer page = 1 ; // 默认为1 @NotNull (message = "参数不允许为空" ) private Integer size = 20 ;
  1. 进行封装 PageBean .
import java.util.List;
public class PageBean<T> {
    private Long totalCount; // 总记录数
    private List<T> pageData; // 每页记录数
    public Long getTotalCount() {
        return totalCount;
    public void setTotalCount(Long totalCount) {
        this.totalCount = totalCount;
    public List<T> getPageData() {
        return pageData;
    public void setPageData(List<T> pageData) {
        this.pageData = pageData;
  1. 进行封装自己的查询参数:这个就不再多说了 。

  2. SpingMVC controller

    //所有的终端与车辆关联的信息
    @RequestMapping("/vehicleAndTerminal.json")
    @ResponseBody
    public HashMap<String, Object> vehicleAndTerminal(PageQuery pageQuery, Terminal terminal){
        return  terminalService.vehicleAndTerminal(pageQuery, terminal);
  1. 进行业务层代码 :
    5.1 注入entityManagerFactory
@Autowired
    private LocalContainerEntityManagerFactoryBean entityManagerFactory;

5.2 进行原生的Sql 拼接

// 此处用了原生的sql拼接
    // 有Sql注入的风险
    @Override
    public HashMap<String, Object> vehicleAndTerminal(PageQuery pageQuery, Terminal terminal) {
        HashMap<String, Object> map = new HashMap<String, Object>();
        String sql = "SELECT * FROM terminal t WHERE t.vSn IS NOT NULL AND t.vSn!=''";
        Integer page = pageQuery.getPage();
        Integer size = pageQuery.getSize();
        String vSn = terminal.getvSn();
        if (vSn != null) {
            sql += "AND t.vSn=" + vSn + " ";
        String vin = terminal.getVin();
        if (vin != null) {
            sql += "AND t.vin=" + vin + " ";
        String num = terminal.getNum();
        if (num != null) {
            sql += "AND t.num=" + num + " ";
        String barcode = terminal.getBarcode();
        if (barcode != null) {
            sql += "AND t.barcode=" + barcode + " ";
        sql += "LIMIT" + " " + page + "," + size;
        EntityManager em = entityManagerFactory.getNativeEntityManagerFactory().createEntityManager();
        Query nativeQuery = em.createNativeQuery(sql, Terminal.class);
        @SuppressWarnings({ "unused", "unchecked" })
        List<Terminal> termins = nativeQuery.getResultList();
        if (em != null) {
            em.close();
        map.put("total", termins.size());
        map.put("rows", termins);
        return map;

这样就实现了动态查询 ,以及分页。 上面的代码 我自己封装的PageBean 没有用上 ,下面的代码是改过的

public PageBean<Terminal> vehicleAndTerminal(PageQuery pageQuery, Terminal terminal) {
        HashMap<String, Object> map = new HashMap<String, Object>();
        String sql = "SELECT * FROM terminal t WHERE t.vSn IS NOT NULL AND t.vSn!=''";
        Integer page = pageQuery.getPage();
        Integer size = pageQuery.getSize();
        String vSn = terminal.getvSn();
        if (vSn != null) {
            sql += "AND t.vSn=" + vSn + " ";
        String vin = terminal.getVin();
        if (vin != null) {
            sql += "AND t.vin=" + vin + " ";
        String num = terminal.getNum();
        if (num != null) {
            sql += "AND t.num=" + num + " ";
        String barcode = terminal.getBarcode();
        if (barcode != null) {
            sql += "AND t.barcode=" + barcode + " ";
        sql += "LIMIT" + " " + page + "," + size;
        EntityManager em = entityManagerFactory.getNativeEntityManagerFactory().createEntityManager();
        Query nativeQuery = em.createNativeQuery(sql, Terminal.class);
        @SuppressWarnings({ "unused", "unchecked" })
        List<Terminal> termins = nativeQuery.getResultList();
        if (em != null) {
            em.close();
        // map.put("total", termins.size());
        // map.put("rows", termins);
        // return map;
        PageBean<Terminal> pageBean = new PageBean<>();
        pageBean.setTotalCount((long) termins.size());
        pageBean.setPageData(termins);
        return pageBean;
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocatio...
                                    1:首先需要判定传入的值是否存在,且不为空2:时间类型为between and,需保证两个时间都不为空3:JPA支持in equal like between and4:reposotory层需继承JpaRepository,JpaSpecificationExecutor。
                                    概述ORM映射为我们带来便利的同时,也失去了较大灵活性,如果SQL较复杂,要进行动态查询,那必定是一件头疼的事情(也可能是lz还没发现好的方法),记录下自己用的三种复杂查询方式。环境springBootIDEA2017.3.4JDK8pom.xml4.0.0org.springframework.bootspring-boot-starter-parent2.1.6.RELEASEcom.xmlx...
                                    public List<OrgCustomize> findByNameLike(String name, String customerId,Integer type) {
        StringBuilder sb = new StringBuilder();
        StringBuilder condition = new StringBuilder();
        sb.append("select e.* from org_customize e ...
public List<ITAssets> listByWhere(Map<String,Object> map,Integer pageIndex, Integer pageSize) {//通过map传递查询条件
    StringBuilder sql = new StringBuilder();
    sql.append("select * from t_a_i..
1.什么是JPQL
​		JPQL全称Java Persistence Query Language
​		ava持久化查询语言(JPQL)是一种可移植的查询语言,旨在以面向对象表达式语言的表达式
​		jpql和sql是类似的,和sql有区别不能出现*
2.jpql原则属性的规则
​	(1).在jpql不能出现*,不能出现表名,只能出现对象别名,或...
                                    在使用JPA的@Query注解写原生sql语句的时候,如果查询条件中有in且需要传参的话,记得向里传一个List,不能传字符串。
如果传字符串,那么实际执行的语句是select * from Student s where s.id in(‘1,2,3’),而不是select * from Student s where s.id in(1,2,3)。
注意注意。
                                    最近在对JPA的使用过程中发现对于单表的操作很是方便,但是当设计到多表联查的时候就需要有一些特殊的操作了。
项目中有一个场景是后台需要做一个分页的列表查询,所需要的数据分散在两张表中,如果是用mybatis的话直接定义resultMap,然后手写SQL就可以了。而在JPA中就需要用到JPQL了。
首先定义一下各个对象之间的关系
实体 GxOrderDO :订单。
实体 GxOrderDet...
                                    private @Autowired EntityManager em;
//private @PersistenceContext EntityManager defaultEm;
@SuppressWarnings("unchecked")
public List&lt;Book&gt; findByName1(String bookName, String expressName) {
                                    SpringDataJpa
Spring Data JPA是较大的Spring Data系列的一部分,可轻松实现基于JPA的存储库。该模块处理对基于JPA的数据访问层的增强支持。它使构建使用数据访问技术的Spring支持的应用程序变得更加容易。
实现应用程序的数据访问层已经很长一段时间了。为了执行简单查询以及执行分页和审核,必须编写太多样板代码。Spring Data JPA旨在通过将工作量减少...
String sql = "select count(1),\n" +
        "sum(case finish_time when 0 then 1 else 0 end),\n" +
        "sum(case finish_time when 0 then 0 else 1 end),\n" +
        "merchant_id,\n" +
        "store...