用于自定义映射关系,可以解决列名和属性名不一致的问题。
MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在。
在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。
①当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当提供的返回类型属性是resultType的时候,MyBatis对自动的给把对应的值赋给resultType所指定对象的属性。
②当提供的返回类型是resultMap时,因为Map不能很好表示领域模型,就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用。
多对一和一对多两种情况
一对一、一对多、多对多三种关系
Mapper层只做单表查询操作,在service层进行手动装配,实现关联查询的结果。
用于关联一个对象
property:指定要关联的属性名
select:设定要继续引用的查询,namespace+id
column:查询时需要传递的列
在mapper中编写和xml文件名字一样的接口,在接口中创建的方法包含多参数,mabatis会自动把接口和xml文件自动绑定,生成其对应实现类。从而实现传递多个参数。
用于关联一个集合
property:指定要关联的属性名
select:设定要继续引用的查询
column:查询时需要传递的列
MyBatis 会根据接口和对应的 xml 文件创建接口的实现类
可以重载。
由mybatis的自动映射机制,实现将列名和属性名的自动关联,实现将sql的执行结果封装为对象返回。
单表查询用注解更简单,多表查询使用xml更好
注解是用于描述代码的代码,基本上配置文件能做的,注解也能做。用来简化配置文件。
@Test(用于描述junit测试)
@Override(用于描述方法的重写)
@Param(用于描述属性的名称)
1使用前必须先导包
2注解使用风格:@xxx(属性)
3属性设定方式:属性名=属性值
4基本类型和String,可以直接使用双引号形式
5数组类型:name={值1,值2,值3…},若只有一个数组元素,花括号可以省略
6对象类型:name=@对象名(属性)
7如果属性是该注解的默认属性, 而且该注解只配置这一个属性, 可以将属性名省略
@Select:类似
@Insert:类似
@Update:类似
@Delete:类似
@Results:类似与
@Result: 类似与
public interface StudentMapper {
@Select("select * from t_student")
@Results(value = {
@Result(column="id",property="id",id=true),
@Result(column="name",property="name"),
@Result(column="age",property="age"),
@Result(column="gender",property="gender"),
@Result(column="cid",property="cid"),
@Result(property="clazz",
one=@One(select="com.bjsxt.mapper.ClazzMapper.selById"), column="cid") })
List sel();
}
-----------------------------------------------------------------------------------------------
public interface ClazzMapper {
@Select("select * from t_class where id=#{0}")
Clazz selById(int id);
}
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
运行后,通过resources加载核心配置资源,再由XMLConfigBuilder解析xml核心配置文件封装成configration对象,由build方法生成DefaultSqlSessionFactory对象,至此,SqlSession工厂创建完成。接下来由该工厂对象,调用opensession方法,创建SqlSession对象,期间,需要TransactionFactory生成Tranction对象,以及excuter核心执行器执行,之后构建出DefaultSqlSession对象。至此SqlSession对象创建完成。