大家好,我是来自郑州分院的第10期java学员,今天我要讲Spring整合Mybatis
例行公事先来背景介绍
背景介绍
Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,根据Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。MyBatis是一个基于Java的持久层框架。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
知识剖析
在MyBatis 中,session 工厂可以使用 SqlSessionFactoryBuilder 来创建。而在 MyBatis-Spring 中,则使用 SqlSessionFactoryBean 来替代。
首先我们要说一下SqlSession, SqlSession是MyBatis的关键对象,它是应用程序与持久层之间执行交互操作的一个单线程对象, 类似于JDBC中的Connection
SqlSessionFactory是创建SqlSession的工厂
整合时也需要使用数据映射器(MapperFactoryBean)
MapperFactoryBean这个类的作用是:
将传统Mybatis调用数据库的方式:
xxxMapper mapper = sqlSession.getMapper(xxxMapper.class);
变成xxxMapper mapper = context.getBean(“xxxMapper”);
也就是将mybatis的对象由spring以bean的方式管理
形成了一一对应关系,方便在service层直接注入使用。
Spring整合Mybatis的三种方式。
常见问题
当mapper文件数量多的时候,使用MapperFactoryBean就很麻烦。
不过spring提供了MapperScannerConfigurer来批量的实现映射,可以自动扫描。
扩展思考
SqlFactoryBean的一些常见属性
mapperLocations:它表示我们的Mapper文件存放的位置,当我们的Mapper文件跟对应的Mapper接口处于同一位置的时候可以不用指定该属性的值。
configLocation:用于指定Mybatis的配置文件位置。如果指定了该属性,那么会以该配置文件的内容作为配置信息构建对应的SqlSessionFactoryBuilder,但是后续属性指定的内容会覆盖该配置文件里面指定的对应内容。
typeAliasesPackage:它一般对应我们的实体类所在的包,这个时候会自动取对应包中不包括包名的简单类名作为包括包名的别名。多个package之间可以用逗号或者分号等来进行分隔。(value的值一定要是包的全名)
typeAliases:数组类型,用来指定别名的。指定了这个属性后,Mybatis会把这个类型的短名称作为这个类型的别名,前提是该类上没有标注@Alias注解,否则将使用该注解对应的值作为此种类型的别名。(value的值一定要是类的
更多讨论
Q1:使用xml的时候,如果不在Spring配置文件里面配置Mapper.xml,该怎么办
回答:mapper接口和xml放在一个文件下会自动扫描到。
Q2:别名的作用。
在parameterType和resultType设置时,为了方便编码,可以给类配置别名。否则就要写全限定名,比较麻烦,容易出错。
Q3:注解方式和xml方式具体在那种情况下使用,什么情况下用注解方式更好,什么情况下用xml方式更好?
1 首先官方也是推荐使用 xml。
2 注解方式拼接动态 sql 功能有限。
3注解使用比较简单。