Spring整合Mybatis

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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值