前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mybais映射文件笔记----查询

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

作者头像
SuperHeroes
发布2018-05-31 13:30:30
7440
发布2018-05-31 13:30:30
举报
文章被收录于专栏:云霄雨霁云霄雨霁

返回一个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>

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.04.13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档