MyBatis学习笔记03

本文详细介绍了MyBatis中ResultMap的使用,包括返回List、记录封装为Map、自定义结果映射规则、关联查询的环境搭建、级联属性封装、association对象封装规则、collection集合封装、分步查询与延迟加载,以及discriminator鉴别器的运用。通过实例演示了各部分的配置与操作,帮助读者深入理解MyBatis ResultMap的精髓。
摘要由CSDN通过智能技术生成

目录

二十六、MyBatis_映射文件_select_返回List

二十七、MyBatis_映射文件_select_记录封装map

二十八、MyBatis_映射文件_select_resultMap_自定义结果映射规则

二十九、MyBatis_映射文件_select_resultMap_关联查询_环境搭建

三十、MyBatis_映射文件_select_resultMap_关联查询_级联属性封装结果

三十一、MyBatis_映射文件_select_resultMap_关联查询_association定义关联对象封装规则

三十二、MyBatis_映射文件_select_resultMap_关联查询__association分布查询

三十三、MyBatis_映射文件_select_resultMap_关联查询_分步查询&延迟加载

三十四、MyBatis_映射文件_select_resultMap_关联查询_collection定义关联集合封装规则

三十五、MyBatis_映射文件_select_resultMap_关联查询_collection分步查询&延迟加载

三十六、MyBatis_映射文件_select_resultMap_分步查询传递多列值&fetchType

三十七、MyBatis_映射文件_select_resultMap_discriminator鉴别器


二十六、MyBatis_映射文件_select_返回List

第一步、EmployeeMapper .java文件

package com.nanjing.mybatis.dao;

import com.nanjing.mybatis.bean.Employee;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;

//接口与配置文件动态绑定
public interface EmployeeMapper {

    public List<Employee> getEmpsByLastNameLike(String lastName);
}

第二步:EmployeeMapper .xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nanjing.mybatis.dao.EmployeeMapper">

    <!--public List<Employee> getEmpsByLastNameLike(String lastName);-->
	<!--resultType:如果返回的是一个集合,要写集合中元素的类型  -->
	<select id="getEmpsByLastNameLike" resultType="com.nanjing.mybatis.bean.Employee">
		select * from tbl_employee where last_name like #{lastName}
	</select>
</mapper>

第三步:MyBatisTest.java文件

 @Test
    public void test04() throws IOException{

        SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
        //1、获取到的SqlSession不会自动提交数据
        SqlSession openSession = sqlSessionFactory.openSession();

        try{
            EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);

			List<Employee> like = mapper.getEmpsByLastNameLike("%e%");
			for (Employee employee : like) {
				System.out.println(employee);
			}
        }finally{
            openSession.close();
        }
    }

二十七、MyBatis_映射文件_select_记录封装map

第一步:EmployeeMapper .java文件

//接口与配置文件动态绑定
public interface EmployeeMapper {

    //多条记录封装一个map,Map<Integer,Employee>:键是这条记录的主键,值是记录封装后的javaBean
    //告诉mybatis封装这个map的时候使用哪个属性作为map的key
    @MapKey("id")
    public Map<Integer,Employee> getEmpByLastNameLikeReturnMap(String lastName);

    //返回一条记录的map,key就是列名,值就是对应的值
    public Map<String, Object> getEmpByIdReturnMap(Integer id);
}

第二步:EmployeeMapper .xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nanjing.mybatis.dao.EmployeeMapper">

	<!--public Map<Integer,Employee> getEmpByLastNameLikeReturnMap(String lastName);-->
	<select id="getEmpByLastNameLikeReturnMap" resultType="com.nanjing.mybatis.bean.Employee">
		select * from tbl_employee where last_name like #{lastName}
	</select>

    <!--public Map<String, Object> getEmpByIdReturnMap(Integer id);-->
	<select id="getEmpByIdReturnMap" resultType="map">
		select * from tbl_employee where id=#{id}
	</select>
</mapper>

第三步:MyBatisTest.java文件

@Test
    public void test04() throws IOException{

        SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
        //1、获取到的SqlSession不会自动提交数据
        SqlSession openSession = sqlSessionFactory.openSession();

        try{
            EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);

			Map<String, Object> map = mapper.getEmpByIdReturnMap(1);
			System.out.println(map);

			Map<Integer, Employee> map = mapper.getEmpByLastNameLikeReturnMap("%r%");
			System.out.println(map);

        }finally{
            openSession.close();
        }
    }

二十八、MyBatis_映射文件_select_resultMap_自定义结果映射规则

resultType:它是跟我们自动封装有关的,我们查出数据以后,指定你要封装成什么类型,这个数据就会给你封装成对应的Java类型

但是如果说,在我们查出的数据中,列名跟JavaBean的属性名不一样,那么一开始是封装不成功的

我们的解决办法:第一种:别名;第二种:如果列名跟JavaBean的属性名符合驼峰命名,那么就开启驼峰命名;第三种:就是使用resultMap,自定义结果集,我来自己来定义Employee里面每一个属性对应哪个列

第一步:EmployeeMapperPlus.java文件

package com.nanjing.mybatis.dao;

import com.nanjing.mybatis.bean.Employee;

public interface EmployeeMapperPlus {

    public Employee getEmpById(Integer id);
}

第二步:EmployeeMapperPlus.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nanjing.mybatis.dao.EmployeeMapperPlus">

    <!--自定义某个javaBean的封装规则
    type:自定义规则的Java类型
    id:唯一id方便引用
    -->
    <resultMap id="MyEmp" type="com.nanjing.mybatis.bean.Employee">
        <!--指定主键列的封装规则
        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="MyEmp">
        select * from tbl_employee where id=#{id}
    </select>

</mapper>

第三步:MyBatisTest.java文件

@Test
    public void test05() throws IOException{
        SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
        SqlSession openSession = sqlSessionFactory.openSession();
        try{
            EmployeeMapperPlus mapper = openSession.getMapper(EmployeeMapperPlus.class);
			Employee empById = mapper.getEmpById(1);
			System.out.println(empById);
        }finally{
            openSession.close();
        }

    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值