1、Spring先整合Mybatis框架。
1.1.引入spring和mybatis的相关jar
spring相关 mybatis相关 mysql驱动jar mybatis-spring 集成包
1.2.如何整合?整合思路是什么?
spring 项目管理框架(组件对象创建 使用 销毁)
mybatis 数据持久层的框架 底层封装了jdbc 简化了数据库的操作
将第三方框架的核心对象交由工厂管理
1.3.mybatis中有哪些核心组件
sqlsession
dao对象
sqlsessionFactory======》mybatis的主配置文件
依赖数据源对象
依赖mapper文件的注册
1.4.sqlsessionFactory是简单对象还是复杂对象?
通过源码得知sqlsessionFactory是一个接口====》复杂对象
**1.5.怎么将sqlsessionFactory这个复杂对象交由工厂管理? (土思路)**两种方式
a.实现FactoryBean
public class SqlsessionFactoryBean implements FactoryBean<SqlSessionFactory> {
private String config;
public void setConfig(String config) {
this.config = config;
}
//复杂对象的创建方式
@Override
public SqlSessionFactory getObject() throws Exception {
Reader resourceAsReader = Resources.getResourceAsReader(config);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsReader);
return sqlSessionFactory;
}
@Override
public Class<?> getObjectType() {
return SqlSessionFactory.class;
}
@Override
public boolean isSingleton() {
return true;
}
}
b.使用bean标签交由工厂管理
<!--复杂对象交由工厂管理-->
<bean id="sqlsessionFactoryBean" class="com.baizhi.mybatis.factory.SqlsessionFactoryBean">
<property name="config" value="mybatis-config.xml"></property>
</bean>
*1.6.使用mybatis提供的SqlSessionFactoryBean=====去掉了主配置文件(数据源 mapper文件的注册)*
依赖数据源
private DataSource dataSource;
依赖mapper文件的注册
private Resource[] mapperLocations;
1.7.容器中没有数据源对象 所以需要将数据源对象交由工厂管理(Druid)
<bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource">
<!--依赖四个数据库连接的参数-->
<property name="url" value="jdbc:mysql://localhost:3306/ems"></property>
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</bean>
1.8.测试
SqlSessionFactory sqlSessionFactory = (SqlSessionFactory)applicationContext.getBean("sqlSessionFactoryBean");
CityDao mapper = sqlSessionFactory.openSession().getMapper(CityDao.class);
问题?dao对象不能直接从容器中获取
1.9.怎么才能直接从容器中获取到dao对象呢?
将dao交由工厂管理
依赖于sqlSessionFactory
依赖于自身的类型
<!--将dao交由工厂管理-->
<bean id="empDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.baizhi.dao.EmpDao"></property>
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
2.别名的优化
2.1.给单个类起别名
<property name="typeAliases">
<array>
<value>com.baizhi.entity.Emp</value>
<value>com.baizhi.entity.User</value>
</array>
</property>
2.2.给指定包其别名(实体类所在的包)
<property name="typeAliasesPackage" value="com.baizhi.entity"></property>
别名是和类名一致或者首字母小写
2.3.mapper文件注册
<!--mapper文件的注册-->
<property name="mapperLocations" value="classpath:com/baizhi/mapper/*Mapper.xml"></property>
2.4.批量创建dao
<bean id="configurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--依赖sqlsessionFactory-->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
<!--将dao所在的包告知mybatis-->
<property name="basePackage" value="com.baizhi.dao"></property>
</bean>