精华内容
下载资源
问答
  • Springboot Jpa自定义查询的结果集

    千次阅读 热门讨论 2019-01-24 17:46:36
    如果要自定义查询的结果集有3种方法: 使用List<Object[]>来接收结果,只支持原生sql查询。 使用自定义对象来接收结果,支持JPA,JPQL查询。 使用自定义的接口来映射结果,支持JPA,JPQL,...

    如果要自定义查询的结果集有3种方法:

    1. 使用List<Object[]>来接收结果,只支持原生sql查询。
    2. 使用自定义对象来接收结果,支持JPA,JPQL查询。
    3. 使用自定义的接口来映射结果,支持JPA,JPQL,原生sql查询。

    官网文档链接 https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#projections

    数据准备

    entity

    package com.example.demo;
    
    import lombok.Data;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    
    /**
     * @author peter
     * 2019/1/24 14:54
     */
    @Entity
    @Data
    public class Person {
        @Id
        @GeneratedValue
        private Long id;
        private String name;
        private Integer age;
        private int gender;
    }
    

    数据库

    CREATE TABLE person
    (
      id     BIGINT AUTO_INCREMENT
        PRIMARY KEY,
      age    INT          NULL,
      gender INT          NOT NULL,
      name   VARCHAR(255) NULL
    )
    
    INSERT INTO person(age, gender, name) VALUES (12,1,'小明');
    INSERT INTO person(age, gender, name) VALUES (15,1,'小明');
    INSERT INTO person(age, gender, name) VALUES (13,1,'小明');
    INSERT INTO person(age, gender, name) VALUES (18,0,'小明');
    INSERT INTO person(age, gender, name) VALUES (12,1,'小小');
    INSERT INTO person(age, gender, name) VALUES (12,0,'小红');
    
    

    使用自定义对象来接收结果

    自定义的对象

    package com.example.demo;
    import lombok.AllArgsConstructor;
    import lombok.Data;
    
    /**
     * @author peter
     * 2019/1/24 16:01
     */
    @Data
    @AllArgsConstructor
    public class NameResult {
        private String name;
        private int age;
    }
    

    (1)JPA 查询

    	List<NameResult> findByName(String name);
    

    (2) JPQL 查询

    	@Query("select " +
                "new com.example.demo.NameResult(name,age) " +
                "from Person where name = :name")
        List<NameResult> queryName(@Param("name") String name);
    
    注意:new 关键字 对象必须是类的全路径。该类必须有一个全部参数的构造器。
    

    自定义接口来映射结果

    package com.example.demo;
    
    /**
     * @author peter
     * 2019/1/24 16:09
     */
    public interface NameResultInterface {
        String getName();
        int getAge();
        default String getPersonInfo(){
            return getName().concat(";")
            .concat(String.valueOf(getAge()));
        }
    }
    

    (1) JPA查询

    List<NameResultInterface> findByAge(int age);
    

    (2)JPQL查询

    	@Query("select " +
                "p.name as name," +
                "p.age as age " +
                "from Person p where name = :name")
        List<NameResultInterface> queryNameInterface(@Param("name") String name);
    

    (3) 原生sql查询

    package com.example.demo;
    /**
     * @author peter
     * 2019/1/24 16:32
     */
    public interface PersonStatistic {
        int getGender();
        int getNum();
        default String toStringInfo() {
            return "gender=" + getGender() + "; num=" + getNum();
        }
    }
    
    	@Query(value = "select " +
                "p.gender as gender," +
                "count(p.id) AS num " +
                "from person p GROUP BY p.gender",nativeQuery = true)
        List<PersonStatistic> personStatistic();
    

    测试类及dao层

    package com.example.demo;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.data.jpa.repository.Query;
    import org.springframework.data.repository.query.Param;
    
    import java.util.List;
    
    /**
     * @author peter
     * 2019/1/24 16:01
     */
    @SuppressWarnings("ALL")
    public interface PersonDao extends JpaRepository<Person,Long> {
        List<NameResult> findByName(String name);
    
        List<NameResultInterface> findByAge(int age);
    
        @Query("select " +
                "new com.example.demo.NameResult(name,age) " +
                "from Person where name = :name")
        List<NameResult> queryName(@Param("name") String name);
    
        @Query("select " +
                "p.name as name," +
                "p.age as age " +
                "from Person p where name = :name")
        List<NameResultInterface> queryNameInterface(@Param("name") String name);
    
        @Query(value = "select " +
                "p.gender as gender," +
                "count(p.id) AS num " +
                "from person p GROUP BY p.gender",nativeQuery = true)
        List<PersonStatistic> personStatistic();
    
    }
    
    package com.example.demo;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    
    import java.util.List;
    
    /**
     * @author peter
     * 2019/1/24 16:04
     */
    @SpringBootTest
    @RunWith(SpringRunner.class)
    public class PersonDaoTest {
        private static final String NAME = "小明";
        @Autowired
        private PersonDao personDao;
        @Test
        public void queryName() {
            List<NameResult> nameResults = personDao.queryName(NAME);
            System.out.println(nameResults);
        }
        @Test
        public void queryNameInterfaceTest() {
            List<NameResultInterface> resultInterfaces = personDao.queryNameInterface("小明");
            resultInterfaces.forEach(o -> {
                System.out.println(o.getPersonInfo());
            });
        }
        @Test
        public void findByNameTest() {
            List<NameResult> byName = personDao.findByName(NAME);
            byName.forEach(System.out::println);
        }
        @Test
        public void findByAgeTest() {
            List<NameResultInterface> byAge = personDao.findByAge(18);
            byAge.forEach(o -> {
                System.out.println(o.getPersonInfo());
            });
        }
        @Test
        public void personStatisticTest(){
            List<PersonStatistic> statistics = personDao.personStatistic();
            statistics.forEach(o->{
                System.out.println(o.toStringInfo());
            });
        }
    
    }
    

    demo 源码

    展开全文
  • MySQL:如何对查询的结果集添加自增序号       在MySQL中,当我们所要查询的结果集没有ID字段时,为方便前台展示等业务需求,需要添加一个自增的序号字段(ID)。语法如下: SELECT (@...

    MySQL:如何对查询的结果集添加自增序号


          在MySQL中,当我们所要查询的结果集没有ID字段时,为方便前台展示等业务需求,需要添加一个自增的序号字段(ID)。语法如下:

    SELECT (@i:=@i+1) 别名1,表字段信息  FROM 表名, (SELECT @i:=0) AS 别名2
    

          示例如下:

    Select (@i:=@i+1) as RowNum, A.* from Table1 A,(Select @i:=0) B
    

          上述语句的效果等同于下述语句:

    Set @i:=0;
    Select (@i:=@i+1) as RowNum, A.* from Table1 A
    

          上述的方法同样适用于分页查询:

    Select (@i:=@i+1) as RowNum, A.* from Table1 A,(Select @i:=0) B order by A.id desc limit 0, 10;
    
    Set @i:=0;
    Select (@i:=@i+1) as RowNum, A.* from Table1 A order by A.id desc limit 0, 10;
    

          补充: 如果是在MyBatis中使用上述查询时,变量i的的初始值0,可以使用传参的方式(¥{})进行设置。


    参考:

    1. https://blog.csdn.net/pashine/article/details/78919055
    展开全文
  • 多表连接查询的结果集处理 多个表连接查询时,需要将查询中的字段分别封装成n个对象(n&gt;=2), 再建立n个对象的关联 例如查询emp表和depy两张表的内容: while(rs.next()){ //遍历当前行的每一列 Emp ...

    多表连接查询的结果集处理

    多个表连接查询时,需要将查询中的字段分别封装成n个对象(n>=2),
    再建立n个对象的关联

    例如查询emp表和depy两张表的内容:

                  while(rs.next()){
    				 //遍历当前行的每一列
    				Emp emp=new Emp();
    				emp.setEmpno(rs.getInt("empno"));
    				emp.setEname(rs.getString("ename"));
    				emp.setSal(rs.getDouble("sal"));
    				//将外键值封装到部门对象的部门编号属性上
    				Dept  dept=new Dept();
    				dept.setDeptno(rs.getInt("deptno"));
    				dept.setDname(rs.getString("dname"));
    				//建立员工和部门对象的关联
    				emp.setDept(dept);
    				//把员工添加到集合中
    				list.add(emp);		
    			}
    
    展开全文
  • oracle的存储过程返回一个查询的结果集create or replace procedure p_test(p_cur out sys_refcursor) as begin open p_cur for select * from emp; end p_test;
    create or replace procedure p_test(p_cur out sys_refcursor)
    as
    begin
         open p_cur for select * from emp;
    end p_test;



    展开全文
  • mybatis如何直接 执行传入的任意sql语句 并按照顺序取出查询的结果集 需求: 1.直接执行前端传来的任何sql语句,parameterType="String", 2.对于任何sql语句,其返回值类型无法用resultMap在xml文件里配置或者返回...
  • 在MySQL中,当我们所要查询的结果集没有ID字段时,为方便前台展示等业务需求,需要添加一个自增的序号字段(ID)。语法如下: SELECT (@i:=@i+1) 别名1,表字段信息 FROM 表名, (SELECT @i:=0) AS 别名2 代码示例,...
  • 在想要是把mysql的list查询的结果集合并成一个以逗号隔开的字符串会多方便呀 后来一查 还真有 叫GROUP_CONCAT函数 纪念一下
  • MySQL数据库根据条件查询出一个结果集,如何获取这条数据在这个结果集中“下标”。 举例说明: 1.person_table表中所有数据如下 SELECT * FROM person_table; 2.获取年龄大于20岁人,并且年龄从小到大顺序...
  • 查询table_b表的create_date,将table_a的表的create_date的值更新为查询b表获取的结果 注意:这里不是我们所想set a.create_date=(SELECT `create_date` FROM `table_b` WHERE `id`= 1 ORDER BY id LIMIT 1);这是...
  • mysql查询结果集增加序列号
  • 显示查询结果的时候,虽然已经在规定tabel宽度,和table里面 每个显示字段td宽度 但因为某两个字段里面值某些记录只有几个字,某些记录有几十个字,导致显示时候参差不齐 怎么样才能让结果显示很整齐?
  • 思想 定义一个变量,通过变量递加以及虚拟表联查达到生成序列号目的 公式 SELECT (@i:=@i+1) 别名 FROM 表名名, (SELECT @i:=0) AS 别名 例如 SELECT (@i:=@i+1) 别名, s.* ...别名是查询后排序自增生成 ...
  • 功能:将用户输入的SQL语句序列转换为一个可执行的操作序列,并返回查询的结果集。 SQL的解析引擎包括查询编译与查询优化和查询的运行,主要包括3个步骤: 查询分析:制定逻辑查询计划(优化相关)制定物理查询...
  • oracle 定义方法 返回查询的结果集

    千次阅读 2018-11-29 13:13:20
    1: 以管道方式 --定义行对象 create type row_type as object(a varchar2(10), v varchar2(10)); --定义表对象 create type table_type as table of row_type;    --定义方法 create or replace function ...
  • 创建一个返回select结果集的存储过程: --创建procedure create or replace procedure pro_emp(resule out sys_refcursor) is begin open resule for select * from emp; end; 调用: --调用 declare cur1 ...
  • 表中有不同学校、学校班级、班级组、每个组学生信息; 现在需要获取是取所有学校里每个组第一个学生信息 (这里并不完全实际情况,学生位子布置跟名字排序相关。此处做例子,阐释一个排序方式。) ...
  • 如题。请教方法。另外自学java。方向Web 后台,没有系统学习框架,求大神推荐合适书籍
  • 现有两表 student表: id name 11 张三 22 李四 subject成绩表: ...想要得到这样一个查询结果 id name count(subject.*) 11 张三 2 22 李四 1 需要在一个sql里实现,请问该怎么写?

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,950
精华内容 8,380
关键字:

查询的结果集