MyBatis笔记04(mybatis.)

  本篇文章为你整理了MyBatis笔记04(mybatis.)的详细内容,包含有mybatis详细教程 mybatis. mybatisjpa mybatisorm MyBatis笔记04,希望能帮助你了解 MyBatis笔记04。

  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

 

  
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

  
private String saddress;

   private String password;//在表中的字段是spwd,与表中的字段不一致

  }

 

 

  
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)(推荐使用)

  
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中介绍)

  

  以上就是MyBatis笔记04(mybatis.)的详细内容,想要了解更多 MyBatis笔记04的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: