事务中mybatis通过id查不到但是通过其他条件可以查到_MyBatis框架

ResultMap:

<resultMap>用于自定义映射关系, 可以由程序员自主制定

列名和属性名的映射关系. 一旦使用 resultMap, 表示不再

采用自动映射机制.

e58ed3593635ddd5d90b76f6373456b9.png

resultType和resultMap有什么区别?

resultType:表示采用 MyBatis 的Auto-Mapping(自动映射)机制,

即相同的列名和属性名会自动匹配. 当数据库表的列名和类的属

性名不一致时,会导致查不到数据

resultMap:可以自定义映射关系, 由程序员自主制定

列名和属性名的映射关系. 一旦使用 resultMap, 表示不再

采用自动映射机制.

业务装配:(多对一)

mapper 层只做单表查询操作, 在 service 层进行手动装配,

实现关联查询的结果

1 实体类

创建班级类(Clazz)和学生类(Student), 并在 Student 中添

加一个 Clazz 类型的属性, 用于表示学生的班级信息

.2 mapper 层

提供StudentMapper和ClazzMapper, StudentMapper查询所

有学生信息, ClazzMapper 根据编号查询班级信息

8dfbbc5a2f8e524a9620334c735e3601.png

3 service 层

调用 mapper 层, 先查询所有学生, 再根据每个学生的班级

编号查询班级信息, 手动进行组装, 称之为业务装配.

13282a8f122db4106a47863e44e3af65.png

d200ed9ed27e06e8e2bb418b6887469f.png

c5c0641dfd212d9d97328a26ac10d43c.png

MyBatis优点:

1. 与JDBC相比,减少了代码量。

2. MyBatis是最简单的持久化框架,小巧并且简单易学。

3. MyBatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,并可重用。

4. 提供XML标签,支持编写动态SQL语句。

5. 提供映射标签,支持对象与数据库的ORM字段关系映射

多表关联查询_resultMap_单个对象_N+1方式实现

标签<association>有什么作用

用于关联一个对象

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

property: 指定要关联的属性名

select: 设定要继续引用的查询, namespace+id

column: 查询时需要传递的列

多表关联查询_resultMap_集合对象_N+1方式实现

标签<collection>有什么作用?

用于关联一个集合

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

property: 指定要关联的属性名

Ø select: 设定要继续引用的查询, namespace+id

Ø column: 查询时需要传递的列

注解:

(1) 什么是注解? 有什么作用?

注解是用于描述代码的代码

1.使用注解一般用于简化配置文件. 但是, 注解有时候也不

是很友好(有时候反而更麻烦), 例如动态 SQL

2.注解和配置文件可以配合使用

MyBatis中常用的注解:

@Test(用于描述方法进行 junit 测试),

@Override(用于描述方法的重写),

@Param(用于描述属性的名称)

MyBatis注解_CRUD:

@Select: 类似于<select>

@Insert: 类似于<insert>

@Update: 类似于<update>

@Delete: 类似于<delete>

MyBatis注解_关联查询:

(1) @Results和@Result注解有什么作用?

当数据库字段名和实体类对应的属性名不一致时,可以使用@Results使其对 应起来@Result是@Results的子标签,Result中的column为数据库字段名,property为实体类属性名,id为是否为主键

MyBatis的运行原理

MyBatis运行过程中涉及到哪些类或接口

1.1.1 Resources(C)

用于加载 MyBatis 核心配置文件

1.1.2 XMLConfigBuilder(C)

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

1.1.3 Configuration(C)

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

1.1.4 DefaultSqlSessionFactory(C)

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

Configuration 对象

1.1.5 SqlSession(I)

是 MyBatis 操作的核心

1.1.6 DefaultSqlSession(C)

是 SqlSession 接口的实现类

1.1.7 TransactionFactory(I)

用于生产 Transaction 对象

1.1.8 Transaction(I)

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

1.1.9 Executor(I)

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

用的实现类是 SimpleExecutor

总结MyBatis的运行原理

当 MyBatis 运行开始时, 先要通过 Resources 加载核心

配置文件, 之后使用 XMLConfigBuilder 对配置文件进行解

析, 将解析结果封装为 Configuration 对象, 接着, 使用

Configuration对象构建一个DefaultSqlSessionFactory对

象, 至此, SqlSession 工厂构建完成.

接下来, 通过工厂对象调用 openSession 方法创建

SqlSession 对 象 . 在 这 个 过 程 中 , 需 要 通 过

TransactionFactory 生成 Transaction 对象, 并且, 还需要

创建核心执行器 Executor 对象, 之后, 通过这些对象来创

建DefaultSqlSession对象, 至此, SqlSession对象创建成

功.

之后, 通过 SqlSession 对象执行相应的操作, 如果执

行成功, 调用 commit 方法提交事务; 如果失败, 调用

rollback 方法事务回滚. 最后, 调用 close 方法关闭

session 资源. 以上, 就是 MyBatis 的运行原理.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值