首页 > 其他分享 >MyBatis笔记04-----分页查询、resultMap的简单使用

MyBatis笔记04-----分页查询、resultMap的简单使用

时间:2022-11-07 16:44:08浏览次数:34  
标签:映射 04 resultMap 查询 stu ----- select 属性

分页查询

1、分页查询的好处

MyBatis作为持久层框架,主要任务就是操作数据库,即是对数据的增、删、查、改,其中大多数业务是查询功能,这也是这四个操作中最常用操作。所以为了减少数据库的负担,我们使用对数据进行分页查询,这样的话在面对查询大量数据时,每次只需要查询小部分数据,随之查询的次数随增加了。

2、使用分页的方式

第一种(常用):使用LIMIT

通用语法:

select * from [表名] limit stratIndex,pageSize;

stratIndex:开始下标

pageSize:一页的大小

如:select * from stu limit 5,10;

表示:查询表中的第6个数据,保存10条记录

特殊语法

  • select * from [表名] limit startIndex,-1;

stratIndex:开始下标

-1:表示查询到最后一条数据结束

如:select * from stu limit 15,-1;

表示:查询表中数据从第16个数据开始到表中最后一条数据为止

  • select * from [表名] limit 0,pageSize;

0:从表中第一条数据开始查询

pageSize:一页的大小

如:select * from stu limit 5;

表示:查询表中前5条记录

3、使用分页的例子

  • StuMapper1接口

 

 /**
     * 分页查询
     * @param map 传入分页中的stratIndex,pageSize参数(使用map传入比较方便)
     * @return 返回查询的结果
     */
    List<Stu1> selectLimit1(Map<String,Object> map);

 

  • StuMapper1.xml文件
<mapper namespace="com.dao.StuMapper1">
    <select id="selectLimit1" parameterType="map" resultType="stu1">
       select * from stu limit #{stratIndex},#{pageSize};
    </select>
</mapper>
  • 在核心配置文件中注册mapper
 <mappers>
      <mapper resource="com/dao/StuMapper1.xml"/>
    </mappers>
  • 测试
    @Test
    public void test01(){
        SqlSession sqlSession = MybatisUntils.getSqlSession();
        StuMapper1 mapper = sqlSession.getMapper(StuMapper1.class);
        Map<String,Object> map = new HashMap<>();
        map.put("stratIndex",0);
        map.put("pageSize",1);
        List<Stu1> stus = mapper.selectLimit1(map);
        for (Stu1 stu:stus) {
            System.out.println(stu);
        }
        sqlSession.close();
    }

对于上面传参是Map集合---------万能Map集合

上面的StuMapper接口也可以写为

List<Stu1> selectLimit(int stratIndex,int pageSize)

当有多个参数的时候,可以尝试着使用Map集合作为参数,如果参数比较少的话,直接传参即可

 

resultMap标签的简单使用

1、为什么使用<resultMap>

答:当实体类中的属性名和表中的字段名不一致时需要使用resultMap,使用它的目的是为了映射(描述)实体类中的属性名和表中字段名的关系

2、例子:当实体类中的属性名和表中字段不一致时会出现的问题:

  • 表中字段:

  • 实体类中属性:关注属性password
@Alias("stu1")
@Data
public class Stu1 {
    private int sno;
    private String sname;
    private int sage;
    private String saddress;
    private String password;//在表中的字段是spwd,与表中的字段不一致
}
  • 查询所有学生信息

StuMapper1接口

List<Stu1> selectAll();

StuMapper.xml文件

 <select id="selectAll" resultType="stu1">
        select * from stu
    </select>
  • 测试结果
  @Test
    public void test02(){
        SqlSession sqlSession = MybatisUntils.getSqlSession();
        StuMapper1 mapper = sqlSession.getMapper(StuMapper1.class);
        List<Stu1> stus = mapper.selectAll();
        for (Stu1 stu:stus) {
            System.out.println(stu);
        }
        sqlSession.close();
    }

 

 

 这种结果明显和我们想要的结果是不一样的,出现这种结果的原因:

  在执行select * from stu语句时,会查询得到数据库中的学生信息结果集,然后将得到的学生信息结果集 找到对应的实体类,通过对应的set方法把结果集来赋值给类中的属性,然而这里只有setPassword(),找不到对应的setSpwd()所以password为null。

3、解决方案有二种

第一种:自动映射(在SQL映射语句使用as)

 <select id="selectAll" resultType="stu1">
        select sno,sname,sage,saddress,spwd as password from stu
 </select>

as:给表中字段起别名,即将表中的字段名起别名为java实体类中的属性名,

第二种:手动映射(使用resultMap)(推荐使用)

<select id="selectAll" resultMap="stuResult">
        select * from stu
    </select>
    <resultMap id="stuResult" type="stu1">
        <id property="sno" column="sno"/>
        <result property="sname" column="sname"/>
        <result property="sage" column="sage"/>
        <result property="saddress" column="saddress"/>
        <result property="password" column="spwd"/>
    </resultMap>

主要就是用<resultMap>来描述类中的属性名和数据库表中字段名之间的关系即可。若是自动映射和手动映射一起使用,则先是自动映射再是手动映射。

resultMap的简单介绍

1、概述

  • resultMap是mybatis最重要最强大的元素,它可以让你从90%的JDBC ResultSets结果集数据提取数据代码中解放出来,而且它可以完成一些操作是JDBC不支持的操作。当编写一些比较复杂SQL映射语句代码时(如:多表联系查询),一份resultMap可以实现同功能的数长达千行代码。
  • resultMap设计思想:简单的SQL映射语句不需要用到resultMap,复杂的SQL映射语句只需要通过resultMap来描述他们之间的关系即可

2、resultMap中的属性

id属性:唯一标识,它的值==如<select>、<insert>、<update>、<delete>.......中resultMap属性值

type属性:是id值代表的类型(通常都是javaBean类型)

3、resultMap的子标签

每个子标签中都有property、column属性,其中property是用来描述实体类中的属性,column是用来描述数据库表中的字段(列)名,这两个属性完成了实体类与表之间的关系映射。

<id>:用来描述数据库表中主键。

<result>:用来描述数据库中非主键。

这只是resultMap中简单介绍,在后面中会出现一对多,多对一的情况,那时候那就是更复杂的SQL映射语句了,需要用到resultMap,当然那时候并不是这么简单的使用resultMap。(在MyBatis笔记6中介绍)

 

标签:映射,04,resultMap,查询,stu,-----,select,属性
From: https://www.cnblogs.com/hytstruggle/p/16859296.html

相关文章

  • Solution Set -「Public NOIP Round #3 (Div. 1)」
    \(\mathscr{A}\sim\)移除石子  Tags:「A.构造」「C.细节」  "显然"直接按\((x,y)\)二元组排序后两两组成正方形!喜提\(90\text{pt}\).  实际上.还有一些......
  • PowerApps Canvas App Vs Model-driven App Vs Portal App
    TheCanvasAppinPowerAppsCanvas isoneofthemaintypesofapplicationsthatyoucancreateinPowerApps.Itgivesyouablankcanvasandallowsyoutod......
  • R语言分析蛋白质组学数据:飞行时间质谱(MALDI-TOF)法、峰值检测、多光谱比较
    全文链接:http://tecdat.cn/?p=30051原文出处:拓端数据部落公众号蛋白质组学•研究生物体产生的全部蛋白质。•Foci:鉴定、结构测定、生物标志物、通路、表达。基质辅助......
  • java -cp与java -jar的区别
    java-cp和-classpath一样,是指定类运行所依赖其他类的路径,通常是类库,jar包之类,需要全路径到jar包,window上分号“;”格式:java-cp.;myClass.jarpackname.mainclass......
  • 4.深度学习(1) --神经网络编程入门
    前言目前深度学习、AI研究很火爆,它们依赖的最底层就是简单的神经网络,本文将介绍神经网络基础,了解基本的神经网络原理,同时给出样例参考,该样例可以推广到其他的分类、回归问题......
  • 软件工程基础Y-实验一王瑜
    (1)回顾你过去将近3年的学习经历当初你报考的时候,是真正喜欢软件工程这个专业吗?有一些喜欢至少比其它专业喜欢你现在后悔选择了这个专业吗?不后悔你认为你现在最喜欢......
  • 使用 github.com/wcharczuk/go-chart 绘图
    公共绘图函数packagechartsimport( "bytes" "log" "os" chart"github.com/wcharczuk/go-chart/v2" drawing"github.com/wcharczuk/go-chart/v2/drawing" "......
  • vue表格滚动vue-seamless-scroll
    引入  npminstallvue-seamless-scroll--save  在找到main.js引入importscrollfrom'vue-seamless-scroll'Vue.use(scroll)主要代码<template>......
  • 游记 CSP2022-J2/S2
    postedon2022-10-2822:41:08|under日志|sourceGD已经有代码了!游记写在代码里,搬过来吧。2022.10.29。GD-J00015/GD-S00013。FS石门中学。震惊:两个编号如此......
  • provide-inject-InjectionKey 标注类型配置全局变量
    官网TypeScript与组合式API|Vue.js(vuejs.org)文章provide-inject-InjectionKey标注类型配置全局变量-掘金(juejin.cn)provide-inject-InjectionKey标注类型......