mybatis多表关联

本文详细介绍了MyBatis中动态SQL与多表关联的使用,包括sqlMapConfig.xml中的常用标签、实体类映射文件配置、ResultMap的运用、一对一和一对多的关系映射、注解开发以及事务的提交方式。重点讲解了association、collection、ResultMap等标签的作用以及在实际开发中的应用。同时强调了在注解开发中,不要混用配置文件和注解,要根据实际情况选择合适的映射方式。
摘要由CSDN通过智能技术生成

动态SQL与多表关联

sqlMapConfig.xml中常用标签
配置标签名称功能属性或子元素
properties加载外部的属性文件属性 resource:加载类路径下属性文件
属性 url:加载网络或本地目录下文件
子元素property:在文档内部定义键和值,
内部同名的会被外部覆盖
typeAliases给实体类定义别名子元素 typeAliase: 每行定义一个实体类
子元素 package: 给整个包下所有的实体类定位别名,别名是类名
mappers指定实体映射文件子元素 mapper: 每行指定一个实体类映射文件
子元素 package: 指定一个包下所有的实体类映射文件
文件名与DAO接口名字要相同,在同一个包下
实体类映射文件的配置元素
  1. select 标签的属性说明
    namespace指定DAO接口的完全限定类名字
    id方法名,所以在DAO接口中没有方法重载
    resultType返回的数据类型,如果是集合,指定集合中元素类型
    标签体要查询的SQL语句
  2. 测试类

    三个核心类作用
    SqlSessionFactoryBuilder工厂建造类,只需要直接new出来就可以了
    SqlSessionFactory创建会话工厂,读取核心配置文件
    SqlSession通过会话工厂创建会话,每次访问数据库都要创建自己的会话
    会话是轻量级对象,不能共享使用,每次使用完毕要关闭
  3. 说说以下标签的使用

    标签子标签说明
    <select>查询
    <insert>添加
    <selectKey>获取主键的值
    mysql函数:last_insert_id()
    <update>更新
    <delete>删除

    注:insert, update, delete这三个可以乱用,但不建议乱用。

  4. sqlSession提交事务的2种方式

    增删改必须要提交事务,mybatis默认是手动提交事务

    1. factory.openSession(true)
    2. sqlSession.commit()

    学习标签

  • if

    <if test="id != null">
        id = #{id}
    </if>
    
  • where

    • 自定生成where关键字
    • 自动去掉多余的and
  • foreach

    • collection:指定遍历的对象(list)
    • item: 对应遍历中每一次的对象
    • separator: 分隔符

    properties

    • 作用: 加载properties文件,并在核心配置文件中使用
    • 使用:
      • 利用properties标签加载properties文件
      • 利用$直接使用对应配置文件中的key

一对一

  • 映射配置文件的变化

    SELECT c.id cid,number,pid,NAME,age FROM card c,person p WHERE c.pid=p.id
    
  • ResultMap

    • 作用:通过手动的方式将查询的字段映射到实体的某一个字段
    • 作用:相当于方法的返回值
  • ResultMap标签

    • id: 指定表中的id属性
      • colunm: 指定查询结果字段名
      • property:指定的是实体属性名
    • result: 其他的属性
      • colunm: 指定查询结果字段名
      • property:指定的是实体属性名
    • association: 定义引用数据类型
      • property:指定实体中的引用属性名
      • javaType:当前属性的类型
  • 一对一
    • 修改了SQL映射文件中标签返回值的部分
    • association
  • 一对多
    • collection

ResultMap

  • 作用:ResultMap他就是一个方法的返回值的对应映射,等价于ResultType
  • ResultMap相当于一个通用返回值类型,具体返回值类型通过type属性指定

标签

  • association, 一对一
  • collection, 一对多

注解开发

  • 注解

    • @Select
    • @insert
    • @Update
    • @Delete

ResultMap, 对应方法的返回值

  • 被封装类型中包含实体类型(student),用什么子标签
    • association
  • 如果被封装类型中包含集合属性
    • collection
  • 主键属性标签
    • id
  • 普通属性标签
    • result
  • 在映射配置文件中使用ResultMap也就相当于最终需要把查询结果集的每一字段封装为一个Id标签或则Result

注解开发多表查询

  • @Results,作用:可以包含多个@Result
  • @Result,作用:每一个Result映射一个查询字段到实体属性
  • 如果被封装类型包含单个实体类型(student)
    • @One
  • @Many
  • 在注解开发中每一查询结果字段最终都将被封装为一个Result

注意:
在开发中,不要混用注解开发和配置文件配置。
单表:
@Select @Insert @Update @Delete
如果结果集和最终的实体类属性没有直接对应关系,映射关系的配置使用 @Results注解。
在Results注解中,使用 @Result注解配置单个字段的对应关系。id属性用于指定当前是否是主键。
Results注解可以使用id属性指定一个唯一标识,供其他方式复用
在方法上,如果使用 @ResultMap指定一个Results注解的id,就代表引用了这个Results注解中配置的映射关系。

多表
	一对一:
		使用Result注解的one属性指定要封装的实体类
			one属性的数据类型是一个注解
				@One:
					select:指定的是一个statement的id,用于查找另一个dao中的方法查询实体类作为值设置到当前属性上。
					fetchType:用于指定加载的方式,可以是懒加载或者直接加载。一般配置为直接加载
	一对多:
		使用Result注解的many属性指定要封装的实体类
			many属性的数据类型是一个注解
				@Many:
					select:指定的是一个statement的id,用于查找另一个dao中的方法查询实体类作为值设置到当前属性上。
					fetchType:用于指定加载的方式,可以是懒加载或者直接加载。一般配置为懒加载

第一步首先 导入mybatis 相关jar包;
在这里插入图片描述
2 配置mybatis核心配置文件
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述添加注解和操作的SQL语句
在这里插入图片描述
在这里插入图片描述
最后测试
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值