Mybais映射文件笔记----查询

返回一个list: public List<Employee> getEmpByLastNameLike(String lastname);

<!--映射文件中select标签id属性还是方法名,resultType不是List,而是集合中元素的类型--> <select id="getEmpByLastNameLike" resultType="Employee">     select * from tbl_employee where last_name like #{lastname} </select>

记录封装map: 返回一条map,key是列名,值就是对应的值。 public Map<String, Object> getEmpByIdReturnMap(Integer id); <select id="getEmpByIdReturnMap" resultType="map">     select * from tbl_employee where id=#{id} </select> 多条记录封装一个map:Map(Integer, Employee):键是这条记录的主键,值是记录封装后的javabean. @MapKey("id") //mybatis告诉封装这个map的时候使用哪个属性作为主键 public Map<Integer, Employee> getEmpByLastNameLikeReturnMap(String lastname); <!--returnType还是封装中元素的类型--> <select id="getEmpByLastNameLikeReturnMap" returnType="Employee">     select * from tbl_employee where last_name like #{lastname} </select>

resultMap属性:(resultTpye与自动封装有关) resultMap:从这条语句中返回的 期望类型的类的完全限定名或别名,注意如果是集合,应该是集合可以包含的类型而不是集合本身的类型。 resultType:外部resultMap的命名引用,和resultMap不能同时使用。 自动映射: 1、全局setting设置: autoMappingBehavior 2、自定义rsultMap,实现高级结果映射 自定义结果映射规则: <mapper namespace="com.atguigu.mybatis.dao.EmployeeMapperPlus">     <!--自定义某个javaBean的封装规则     type:自定义规则的Java类型     id:唯一id方便引用       -->     <resultMap type="com.atguigu.mybatis.bean.Employee" id="MySimpleEmp">         <!--指定主键列的封装规则         id定义主键会底层有优化;         column:指定哪一列         property:指定对应的javaBean属性           -->         <id column="id" property="id"/>         <!-- 定义普通列封装规则 -->         <result column="last_name" property="lastName"/>         <!-- 其他不指定的列会自动封装:我们只要写resultMap就把全部的映射规则都写上。 -->         <result column="email" property="email"/>         <result column="gender" property="gender"/>     </resultMap>     <!-- resultMap:自定义结果集映射规则;  -->     <!-- public Employee getEmpById(Integer id); -->     <select id="getEmpById"  resultMap="MySimpleEmp">         select * from tbl_employee where id=#{id}     </select> </mapper>

关联查询:     级联属性:     <resultMap type="com.atguigu.mybatis.bean.Employee" id="MyDifEmp">         <id column="id" property="id"/>         <result column="last_name" property="lastName"/>         <result column="gender" property="gender"/>         <result column="did" property="dept.id"/>         <result column="dept_name" property="dept.departmentName"/>     </resultMap>     联合查询:         <!-- 使用association定义关联的单个对象的封装规则;-->     <resultMap type="com.atguigu.mybatis.bean.Employee" id="MyDifEmp2">         <id column="id" property="id"/>         <result column="last_name" property="lastName"/>         <result column="gender" property="gender"/>         <!--  association可以指定联合的javaBean对象property="dept":指定哪个属性是联合的对象 javaType:指定这个属性对象的类型[不能省略]-->         <association property="dept" javaType="com.atguigu.mybatis.bean.Department">             <id column="did" property="id"/>             <result column="dept_name" property="departmentName"/>         </association>         </resultMap>

分步查询:     <!-- 使用association进行分步查询:         1、先按照员工id查询员工信息         2、根据查询员工信息中的d_id值去部门表查出部门信息         3、部门设置到员工中;      -->      <!--  id  last_name  email   gender    d_id   -->      <resultMap type="com.atguigu.mybatis.bean.Employee" id="MyEmpByStep">          <id column="id" property="id"/>          <result column="last_name" property="lastName"/>          <result column="email" property="email"/>          <result column="gender" property="gender"/>          <!-- association定义关联对象的封装规则              select:表明当前属性是调用select指定的方法查出的结果              column:指定将哪一列的值传给这个方法              流程:使用select指定的方法(传入column指定的这列参数的值)查出对象,并封装给property指定的属性           -->          <association property="dept"               select="com.atguigu.mybatis.dao.DepartmentMapper.getDeptById"              column="d_id">          </association>      </resultMap>

collection定义关联集合封装规则:     <!--      public class Department {             private Integer id;             private String departmentName;             private List<Employee> emps;       did  dept_name  ||  eid  last_name  email   gender        -->     <!--嵌套结果集的方式,使用collection标签定义关联的集合类型的属性封装规则  -->     <resultMap type="com.atguigu.mybatis.bean.Department" id="MyDept">         <id column="did" property="id"/>         <result column="dept_name" property="departmentName"/>         <!--              collection定义关联集合类型的属性的封装规则              ofType:指定集合里面元素的类型         -->         <collection property="emps" ofType="com.atguigu.mybatis.bean.Employee">             <!-- 定义这个集合中元素的封装规则 -->             <id column="eid" property="id"/>             <result column="last_name" property="lastName"/>             <result column="email" property="email"/>             <result column="gender" property="gender"/>         </collection>     </resultMap>     <!-- public Department getDeptByIdPlus(Integer id); -->     <select id="getDeptByIdPlus" resultMap="MyDept">         SELECT d.id did,d.dept_name dept_name,                 e.id eid,e.last_name last_name,e.email email,e.gender gender         FROM tbl_dept d         LEFT JOIN tbl_employee e         ON d.id=e.d_id         WHERE d.id=#{id}     </select>

collection分步查询&延迟加载     <!-- collection:分段查询 -->     <resultMap type="com.atguigu.mybatis.bean.Department" id="MyDeptStep">         <id column="id" property="id"/>         <id column="dept_name" property="departmentName"/>         <collection property="emps"              select="com.atguigu.mybatis.dao.EmployeeMapperPlus.getEmpsByDeptId"             column="{deptId=id}" fetchType="lazy"></collection>     </resultMap>     <!-- public Department getDeptByIdStep(Integer id); -->     <select id="getDeptByIdStep" resultMap="MyDeptStep">         select id,dept_name from tbl_dept where id=#{id}     </select>     <!-- 扩展:多列的值传递过去:             将多列的值封装map传递;             column="{key1=column1,key2=column2}"         fetchType="lazy":表示使用延迟加载;                 - lazy:延迟                 - eager:立即      -->

collection discriminator鉴别器          <!-- <discriminator javaType=""></discriminator>         鉴别器:mybatis可以使用discriminator判断某列的值,然后根据某列的值改变封装行为         封装Employee:             如果查出的是女生:就把部门信息查询出来,否则不查询;             如果是男生,把last_name这一列的值赋值给email;      -->      <resultMap type="com.atguigu.mybatis.bean.Employee" id="MyEmpDis">          <id column="id" property="id"/>          <result column="last_name" property="lastName"/>          <result column="email" property="email"/>          <result column="gender" property="gender"/>          <!--              column:指定判定的列名              javaType:列值对应的java类型  -->          <discriminator javaType="string" column="gender">              <!--女生  resultType:指定封装的结果类型;不能缺少。/resultMap-->              <case value="0" resultType="com.atguigu.mybatis.bean.Employee">                  <association property="dept"                       select="com.atguigu.mybatis.dao.DepartmentMapper.getDeptById"                      column="d_id">                  </association>              </case>              <!--男生 ;如果是男生,把last_name这一列的值赋值给email; -->              <case value="1" resultType="com.atguigu.mybatis.bean.Employee">                  <id column="id" property="id"/>                  <result column="last_name" property="lastName"/>                  <result column="last_name" property="email"/>                  <result column="gender" property="gender"/>              </case>          </discriminator>      </resultMap>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java学习之路

Hibernate学习---单表查询

我们都知道SQL是非常强大的,为什么这么说呢?相信学过数据库原理的同学们都深有体会,SQL语句变化无穷,好毫不夸张的说可以实现任意符合我们需要的数据库操作,既然...

31270
来自专栏Zephery

数据库

1.SQL执行的顺序 ? 2.NULL “空值” 和”NULL”的概念: 1:空值(‘’)是不占用空间的,判断空字符用 = ‘’ 或者 <> ‘’ 来进行处...

37980
来自专栏cloudskyme

设计模式(4)-序列生成器之单例模式

场景:序列生成器 系统中统一的序列生成程序,整个系统统一一套!那么就用单例模式吧! 首先看看单例模式 1)类持有一个自己的实例,而且还是个静态实例。 2)类的构...

34960
来自专栏机器学习原理

图数据库neo4j介绍(4)——常用语法

union:把多段match的return结果 上线组合一个结果集,会自动去掉重复行

11520
来自专栏Android Note

Android—Room数据库多表查询(Relationships)

47020
来自专栏Python攻城狮

MySQL高级1.mysql高级3.内置函数4.时间与字符串的相互转换

要求:表的类型必须是innodb或bdb类型(表的默认类型就是innodb),才可以对此表使用事务

19710
来自专栏chenssy

【死磕Sharding-jdbc】---SQL解析-词法分析

sharding-jdbc对SQL解析的源码主要在下图所示parsing模块中,由下图可知SQL解析主要分为两部分:lexer和parser。lexer就是本文...

18420
来自专栏java一日一条

MySql数据库索引原理

第二部分结合MySQL数据库中InnoDB数据存储引擎中索引的架构实现讨论聚集索引、非聚集索引及覆盖索引等话题。

29930
来自专栏pangguoming

sharding-jdbc之——分库分表实例

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/79368021

40410
来自专栏性能与架构

Mysql 索引与排序

image.png sql 中 order by 排序可能发生2种情况: 1)对应覆盖索引,直接在索引上查询时,就是有序的,不需要另外处理排序 2)没有使用到索...

34060

扫码关注云+社区

领取腾讯云代金券