MyBatis——查询进阶(resultMap)详解,模糊查询

自动映射

1、全局setting设置
  • autoMappingBehavior默认是PARTIAL,开启自动映射的功能。唯一的要求是列名和javaBean属性名一致
  • 如果autoMappingBehavior设置为null则会取消自动映射
  • 数据库字段命名规范,POJO属性符合驼峰命名法,
    A_COLUMN->aColumn,我们可以开启自动驼峰命名规则映射功能,mapUnderscoreToCamelCase=true
  • 2、自定义resultMap,实现高级结果集映射。

查询进阶(resultMap)

  • constructor-类在实例化时, 用来注入结果到构造方法中
    –idArg-ID 参数; 标记结果作为ID 可以帮助提高整体效能
    –arg-注入到构造方法的一个普通结果

  • id–一个ID 结果; 标记结果作为ID 可以帮助提高整体效能

  • result–注入到字段或JavaBean 属性的普通结果

  • association –一个复杂的类型关联;许多结果将包成这种类型
    –嵌入结果映射–结果映射自身的关联,或者参考一个

  • collection–复杂类型的集
    –嵌入结果映射–结果映射自身的集,或者参考一个

  • discriminator–使用结果值来决定使用哪个结果映射

    • case–基于某些值的结果映射
      • 嵌入结果映射–这种情形结果也映射它本身,因此可以包含很多相同的元素,或者它可以参照一个外部的结果映射。

id & result

  • id 和result 映射一个单独列的值到简单数据类型(字符串,整型,双精度浮点数,日期等)的属性或字段。

column:指定哪一列
property:指定对应的 javaBean属性

在这里插入图片描述

association

  • 复杂对象映射
  • POJO中的属性可能会是一个对象
    在这里插入图片描述
  • 我们可以使用联合查询,并以级联属性的方式封装对象。
    在这里插入图片描述

association-分段查询

select调用目标的方法查询当前属性的值
column将指定列的值传入目标方法
流程使用select指定的方法(传入column指定的这列参数的值)查出对象,并封装给property指定的属性
在这里插入图片描述

association-分段查询&延迟加载

开启延迟加载和属性按需加载

  • 旧版本的MyBatis需要额外的支持包
    –asm-3.3.1.jar
    –cglib-2.2.2.jar

Collection-集合类型&嵌套结果集

在这里插入图片描述
在这里插入图片描述

Collection-分步查询&延迟加载

在这里插入图片描述

@Test
	public void test06() throws IOException{
   
		SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
		SqlSession openSession = sqlSessionFactory.openSession();
		
		try{
   
			DepartmentMapper mapper = openSession.getMapper(DepartmentMapper.class);
			/*Department department = mapper.getDeptByIdPlus(1);
			System.out.println(department);
			System.out.println(department.getEmps());*/
			Department deptByIdStep = mapper.getDeptByIdStep(1);
			System.out.println(deptByIdStep.getDepartmentName());
			System.out.println(deptByIdStep.getEmps());
		}finally{
   
			openSession.close();
		}
	}	

扩展-多列值封装map传递

•分步查询的时候通过column指定,将对应的列的数据传递过去,我们有时需要传递多列数据。
•使用{key1=column1,key2=column2…}的形式
在这里插入图片描述

•association或者collection标签的fetchType=eager/lazy可以覆盖全局的延迟加载策略,指定立即加载(eager)或者延迟加载(lazy)

discriminator(鉴别器)

<mapper>
<!-- =======================鉴别器============================ -->
	<!-- <discriminator javaType=""></discriminator>
		鉴别器:mybatis可以使用discriminator判断某列的值,然后根据某列的值改变封装行为
		封装Employee:
			如果查出的是女生:就把部门信息查询出来,否则不查询;
			如果是男生,把last_name这一列的值赋值给email;
	 -->
	 <resultMap type=
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
关于Mybatis在insert中嵌套子查询的问题,可以使用Mybatis的动态SQL语句来实现,具体方法如下: 1. 在mapper文件中定义一个包含子查询的SQL语句,比如: ``` <select id="getUserIdByName" parameterType="java.lang.String" resultType="java.lang.Integer"> SELECT user_id FROM user WHERE user_name = #{name} </select> ``` 2. 在insert语句中使用动态SQL语句来调用子查询,比如: ``` <insert id="insertOrder" parameterType="Order"> INSERT INTO order (order_no, user_id, order_time) VALUES (#{orderNo}, #{userId, jdbcType=INTEGER}, #{orderTime}) <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer"> SELECT LAST_INSERT_ID() </selectKey> </insert> ``` 其中,#{userId, jdbcType=INTEGER}是插入语句中的一个参数,它的值通过调用getUserIdByName子查询来获取。 关于Mybatis查询结果resultMap的使用概述,可以参考以下几点: 1. resultMapMybatis中用于映射查询结果集的标签,它可以将查询结果集的列名映射为Java对象的属性名。 2. resultMap标签可以定义在mapper文件中,也可以定义在公共的resultMap文件中,以便在多个mapper文件中复用。 3. resultMap标签支持多种映射方式,如一对一、一对多、多对一、多对多等,可以根据查询结果集的实际情况选择不同的映射方式。 4. resultMap标签还支持映射嵌套对象、映射对象属性、映射枚举值等高级功能,可以根据具体情况选择使用。 总之,Mybatis中的resultMap标签是非常强大且灵活的,可以帮助我们快速、方便地实现查询结果集的映射。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值