mybatis mapper 嵌套查询_【百战程序员从开始到植发】之mybatis框架3

学习主题:mybatis

学习目标:

1 掌握resultMap的使用

2 掌握association的使用

对应作业

  1. 列名和属性名不一致问题_resultMap标签的使用
    1. 什么是ResultMap? 有什么作用?

手动配置映射,可以用于处理列名和属性名不一致,用于多表连接查询等多种问题

  1. resultType和resultMap有什么区别?

restulyType:

1.对应的是java对象中的属性,大小写不敏感,

2.如果放的是java.lang.Map,key是查询语句的列名,value是查询的值,大小写敏感

3.resultMap:指的是定义好了的id的,是定义好的resyltType的引用

注意:用resultType的时候,要保证结果集的列名与java对象的属性相同,而resultMap则不用,而且resultMap可以用typeHander转换

4.type:java 对象对应的类,id:在本文件要唯一column :数据库的列名或别名,property:对应java对象的属性,jdbcType:java.sql.Types

查询语句中,resultMap属性指向上面那个属性的标签的id

  1. 多表关联查询_设计表结构
    1. MyBatis实现多表关联查询有哪些情况?
  1. 通过业务处理可以实现多表连接查询。
  2. 通过ResultMap实现实现
  3. 通过表别名来实现。
    1. 数据库表格间的关系有哪几种?

三种;一对一,一对多,多对多。

  1. 多表关联查询_业务装配方式
    1. 什么是业务装配? 简述如何实现?

通过业务逻辑层来实现多表查询。拿视频里一对多关系的stu和class对象为例。

首先定义两个pojo对象来保存数据表里的字段的信息。其中stu类中设置一个clazz类的属性。接着编写两个接口分表实现查询全部和根据id查信息并配置对应的xml文件。在业务层定义一个接口,在实现类里按以下方法写(精华部分)

bd857ff805716336ed7ef991a3c7c223.png

最后编写测试语句就行。

  1. 请总结MyBatis有哪些优点?

简单好用

  1. 多表关联查询_resultMap_单个对象_N+1方式实现
    1. 标签<association>有什么作用?

当需要实现多表查询的时候,通常需要使用association标签来进行结果集的嵌套。

  1. <association>标签中有哪些属性? 分别有什么含义?

Select 用于定位被嵌套的结果集的位置 properties 用于表示stu中的clazz类的属性。Column用于表示传入结果集中需要的条件。

6121c60352eee0ea6c2f2663885cc9a4.png

b17cd54bffb1fdd9a9c242740b0192d6.png
  1. 多表关联查询_resultMap_单个对象_关联方式实现
    1. 请使用association节点实现根据用户id查询用户信息以及对应角色信息(User实体类中有一个对象Role,只写SQL映射文件)
    2. 在mapper中如何传递多个参数?
  1. 可以把多个参数封装在一个对象中
  2. 使用map集合

分享/讲解/扩展思考

点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。

第62次(mybatis)

  1. 多表关联查询_resultMap_集合对象_N+1方式实现
    1. 标签<collection>有什么作用?

集合的嵌套结果映射就是指通过一次SQL查询将所有的结果查询出来,然后映射到不同的对象中。在一对多的关系中,主表一条数据会对应关联表的多条数据。因此一般查询时会查询出多条结果,按照一对多的数据映射时,最终的结果数会小于等于查询的总记录数。

  1. <collection>标签中有哪些属性? 分别有什么含义?

Select javaType coulnm properties

  1. 多表关联查询_resultMap_集合对象_关联方式实现
    1. 通常一个Xml映射文件,都会写一个Mapper接口与之对应,请问,这个Mapper接口的工作原理是什么?

接口中有方法名,有传参类型,有返回值类型。而xml文件中有sql语句。Mybatis会制动匹配接口和对应的xml文件,为他们创造一个实现类对象。

  1. Mapper接口里的方法,参数不同时,方法能重载吗?

能。

  1. 多表关联查询_Auto-Mapping配合别名实现
    1. Mybatis是如何将sql执行结果封装为目标对象并返回的? 都有哪些映射形式?

第一种是使用<resultMap>标签,逐一定义列名和对象属性名之间的映射关系。

第二种是使用sql列的别名功能,将列别名书写为对象属性名,比如T_NAME AS NAME,对象属性名一般是name,小写,但是列名不区分大小写,Mybatis会忽略列名大小写,智能找到与之对应对象属性名,你甚至可以写成T_NAME AS NaMe,Mybatis一样可以正常工作。

有了列名与属性名的映射关系后,Mybatis通过反射创建对象,同时使用反射给对象的属性逐一赋值并返回,那些找不到映射关系的属性,是无法完成赋值的。

  1. 什么情况下用注解绑定,什么情况下用xml绑定?

动态查询的时候用xml,其他情况应该可以互换。

  1. 注解开发详解
    1. 什么是注解? 有什么作用?

注解是用来描述代码的代码。比如 @param表示用来描述属性名称。

  1. MyBatis中常用的注解有哪些?

@Test @Override @param

  1. MyBatis注解_CRUD
    1. MyBatis中使用注解需要注意什么?

注解的使用风格:@XXX(属性),使用前必须先导包。

注解的属性

  1. 哪些注解可以实现增删改查操作?
  1. @select
  2. @insert
  3. Update
  4. Delete
  1. MyBatis注解_关联查询
    1. @Results和@Result注解有什么作用?

@Results类似于ResultMap标签。@Result类似于ResultMap标签的子标签。

  1. 如何通过注解实现多表关联查询?

原理类似于xml文件的写法。拿多对一举例,stu为多,class为一。在pojo类中的stu加上class对象作为属性。在stu的Mapper接口中实现查询所有stu信息的功能,再加上@Result注解,把stu的各个属性写在@Result中,其中clazz属性用@one代替association,select对应clazz的mepper的接口的方法的全限定路径。

跟xml一样ClazzMapper接口只需要写一个根据id查询的方法即可。

c329ee4957b559b33ae6349ab9bd7cb6.png

cf3e4f2d3572031b8525ec777f4fb109.png
  1. 分析MyBatis的运行原理
    1. SqlSession对象的创建经理的哪些过程?

当 MyBatis 运行开始时, 先要通过 Resources 加载核心 配置文件, 之后使用 XMLConfigBuilder 对配置文件进行解 析, 将解析结果封装为 Configuration 对象, 接着, 使用 Configuration对象构建一个DefaultSqlSessionFactory对 象, 至此, SqlSession 工厂构建完成. 接下来, 通过工厂对象调用 openSession 方法创建 SqlSession 对 象 . 在 这 个 过 程 中 , 需 要 通 过 TransactionFactory 生成 Transaction 对象, 并且, 还需要 创建核心执行器 Executor 对象, 之后, 通过这些对象来创 建DefaultSqlSession对象, 至此, SqlSession对象创建成功. 之后, 通过 SqlSession 对象执行相应的操作, 如果执 行成功, 调用 commit 方法提交事务; 如果失败, 调用 rollback 方法事务回滚. 最后, 调用 close 方法关闭 session 资源. 以上, 就是 MyBatis 的运行原理.

  1. 当实体类中的属性名和表中的字段名不一样 ,怎么办?

两种方法:

  1. 通过ResultMap标签来对属性进行匹配。
  2. 可以对表的列起别名来匹配属性名。
  3. 详述MyBatis的运行原理
    1. MyBatis运行过程中涉及到哪些类或接口? 请列举并简述作用.

1 Resources(C)

用于加载 MyBatis 核心配置文件

2 XMLConfigBuilder(C)

用于解析 xml 文件(核心配置文件)

3 Configuration(C)

用于存放 xml 文件解析后的结果

4 DefaultSqlSessionFactory(C)

是 SqlSessionFactory(I)的 实 现 类 , 创 建 时 需 要 使 用

Configuration 对象

5 SqlSession(I)

是 MyBatis 操作的核心

6 DefaultSqlSession(C)

是 SqlSession 接口的实现类

7 TransactionFactory(I)

用于生产 Transaction 对象

8 Transaction(I)

用于表示操作数据库的事务对象

9 Executor(I)

是 MyBatis 的核心执行器, 类似于 jdbc 中的 Statement, 常

用的实现类是 SimpleExecutor

  1. 请总结MyBatis的运行原理

当 MyBatis 运行开始时, 先要通过 Resources 加载核心 配置文件, 之后使用 XMLConfigBuilder 对配置文件进行解 析, 将解析结果封装为 Configuration 对象, 接着, 使用 Configuration对象构建一个DefaultSqlSessionFactory对 象, 至此, SqlSession 工厂构建完成. 接下来, 通过工厂对象调用 openSession 方法创建 SqlSession 对 象 . 在 这 个 过 程 中 , 需 要 通 过 TransactionFactory 生成 Transaction 对象, 并且, 还需要 创建核心执行器 Executor 对象, 之后, 通过这些对象来创 建DefaultSqlSession对象, 至此, SqlSession对象创建成功. 之后, 通过 SqlSession 对象执行相应的操作, 如果执 行成功, 调用 commit 方法提交事务; 如果失败, 调用 rollback 方法事务回滚. 最后, 调用 close 方法关闭 session 资源. 以上, 就是 MyBatis 的运行原理.

分享/讲解/扩展思考

点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值