Mybatis多表关联查询以及注解开发

学习主题:mybatis

学习目标:

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

用于自定义映射关系,可以解决列名和属性名不一致的问题。

    1. resultType和resultMap有什么区别?

MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在。
在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。
①当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当提供的返回类型属性是resultType的时候,MyBatis对自动的给把对应的值赋给resultType所指定对象的属性。
②当提供的返回类型是resultMap时,因为Map不能很好表示领域模型,就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用。

  1. 多表关联查询_设计表结构
    1. MyBatis实现多表关联查询有哪些情况?

多对一和一对多两种情况

    1. 数据库表格间的关系有哪几种?

一对一、一对多、多对多三种关系

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

Mapper层只做单表查询操作,在service层进行手动装配,实现关联查询的结果。

    1. 请总结MyBatis有哪些优点?
  1. 解决了jdbc的每执行一次数据操作就要开关一次数据库,减少了数据库的负担。Mybatis使用连接池解决了该问题。
  2. 将sql语句和代码分离,提高了代码的可维护性减少了代码量
  3. 多表关联查询_resultMap_单个对象_N+1方式实现
    1. 标签有什么作用?

用于关联一个对象

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

property:指定要关联的属性名

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

column:查询时需要传递的列

  1. 多表关联查询_resultMap_单个对象_关联方式实现
    1. 请使用association节点实现根据用户id查询用户信息以及对应角色信息(User实体类中有一个对象Role,只写SQL映射文件)



	
		
				
		
	
	
    1. 在mapper中如何传递多个参数?

在mapper中编写和xml文件名字一样的接口,在接口中创建的方法包含多参数,mabatis会自动把接口和xml文件自动绑定,生成其对应实现类。从而实现传递多个参数。

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

用于关联一个集合

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

property:指定要关联的属性名

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

column:查询时需要传递的列

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

MyBatis 会根据接口和对应的 xml 文件创建接口的实现类

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

可以重载。

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

由mybatis的自动映射机制,实现将列名和属性名的自动关联,实现将sql的执行结果封装为对象返回。

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

单表查询用注解更简单,多表查询使用xml更好

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

注解是用于描述代码的代码,基本上配置文件能做的,注解也能做。用来简化配置文件。

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

@Test(用于描述junit测试)

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

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

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

1使用前必须先导包

2注解使用风格:@xxx(属性)

3属性设定方式:属性名=属性值

4基本类型和String,可以直接使用双引号形式

5数组类型:name={值1,值2,值3…},若只有一个数组元素,花括号可以省略

6对象类型:name=@对象名(属性)

7如果属性是该注解的默认属性, 而且该注解只配置这一个属性, 可以将属性名省略

    1. 哪些注解可以实现增删改查操作?

@Select:类似