【北京尚学堂·百战程序员】第031天

【北京尚学堂·百战程序员】第031天
最新回答
勒非

2026-04-23 21:09:24

上午学习目标详解1. 列名和属性名不一致问题_resultMap标签的使用

ResultMap用于自定义映射关系,可以由程序员自主制定列名和属性名的映射关系,一旦使用resultMap表示不再使用自动映射机制。

  • resultType和resultMap的区别:

    resultType:表示采用MyBatis的自动映射机制,即相同的属性名和列名会自动匹配,当数据表的列名和属性名不一致的时候会导致查不到数据。

    resultMap:可以自定义映射关系,便于程序员自主制定列名和属性名的映射关系。

2. 多表关联查询_设计表结构
  • MyBatis实现多表关联查询的情况:

    N+1的方式实现

    关联方式的实现

  • 数据库表格间的关系:

    一对一

    多对一

    一对多

    多对多

3. 多表关联查询_业务装配方式
  • 业务装配:指的是在service层进行手动装配,实现关联查询的结果。

  • MyBatis的优点:

    使用范围广

    操作简单

    内存小

4. 多表关联查询_resultMap_单个对象_N+1方式实现
  • 标签的作用:用于关联一个对象。

  • 标签的属性:

    property:属性名

    select:查询语句(命名空间+id)

    column:表示需要传入的列的信息

5. 多表关联查询_resultMap_单个对象_关联方式实现
  • 在mapper中传递多个参数的方法:

    顺序传参法

    注解传参

    Map传参

    JavaBean传参

下午学习目标详解1. 多表关联查询_resultMap_集合对象_N+1方式实现
  • 标签的作用:用于关联一个集合。

  • 标签的属性:

    property:指定要关联的属性名

    select:设定要继续引用的查询

    column:查询时需要传递的列

2. 多表关联查询_resultMap_集合对象_关联方式实现
  • Mapper接口的工作原理:通过Mapper接口定义需要实现的方法。

  • Mapper接口方法重载:Mapper接口里的方法,参数不同时,方法不能重载。

3. 多表关联查询_Auto-Mapping配合别名实现
  • MyBatis封装结果的方式:

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

    第二种是使用sql列的别名功能,将列别名书写为对象属性名(MyBatis会忽略列名大小写,智能找到与之对应对象属性名)。

  • 注解绑定与xml绑定的选择:执行动态SQL语句时,只能通过xml进行绑定。

4. 注解开发详解
  • 注解的作用:注解是用于描述代码的代码,可以用于简化配置文件。

  • MyBatis中常用的注解:

    @Test

    @Param

    @Override(注意,@Test并非MyBatis特有,而是JUnit中的注解,此处可能是一个小错误或误导,应更专注于MyBatis特有的注解如@Select、@Update等)

注意:在MyBatis中,更常用的注解是@Select、@Update、@Delete、@Insert等用于CRUD操作的注解,以及@Results和@Result用于自定义结果映射的注解。

5. MyBatis注解_CRUD
  • 使用注解的注意事项:注意属性设定的格式。

  • 实现增删改查操作的注解:

    @select

    @update

    @delete

    @insert

6. MyBatis注解_关联查询
  • @Results和@Result注解的作用:

    @results类似于标签

    @result类似于的子标签

  • 通过注解实现多表关联查询:

    使用@Results注解定义结果映射关系,其中可以包含多个@Result注解,每个@Result注解用于映射一个列名到属性名。

    对于关联对象或集合,可以使用@One(对应)或@Many(对应)注解来指定关联查询。

注意:由于注解的表达能力有限,对于复杂的查询和映射关系,使用XML配置文件仍然是更灵活和强大的选择。

7. 分析MyBatis的运行原理
  • SqlSession对象的创建过程:

    加载核心配置文件

    解析xml文件

    通过配置文件创建SqlSession对象

  • 处理属性名和字段名不一致的方法:

    修改属性名或给SQL语句起别名

    使用resultMap手动映射属性

8. 详述MyBatis的运行原理
  • MyBatis运行过程中涉及的类或接口:

    SqlSessionFactory:用于创建SqlSession的工厂类。

    SqlSession:用于执行SQL语句和获取映射器(Mapper)实例。

    Mapper接口:用户定义的接口,MyBatis通过动态代理生成其实现类,用于执行SQL语句。

    MappedStatement:表示一个映射的SQL语句,包括输入参数、输出结果等信息。

    Executor:MyBatis的执行器,负责SQL语句的执行和结果的处理。

    Configuration:MyBatis的全局配置信息,包括数据源、事务管理器、映射器等。

  • MyBatis的运行原理总结:

    加载配置:MyBatis首先加载全局配置文件(如mybatis-config.xml),解析并构建Configuration对象。

    创建SqlSessionFactory:通过Configuration对象创建SqlSessionFactory实例。

    获取SqlSession:通过SqlSessionFactory获取SqlSession实例,SqlSession用于执行SQL语句和获取Mapper接口的实现类。

    执行SQL:调用Mapper接口的方法,MyBatis通过动态代理生成Mapper接口的实现类,并调用相应的SQL语句。

    处理结果:MyBatis执行SQL语句后,将结果集映射为Java对象,并返回给用户。

图片展示:

(注:由于markdown格式限制,图片链接已转换为markdown格式的图片展示形式,确保在预览时能正确显示。)