spring + mybatis
原来由mybatis自己创建的对象 sqlSessionFactory、sqlSession等,整合spring后我们只需要按照spring规则,来让spring容器帮我们创建mybatis的对象就行了
IOC:spring容器创建对象
xml-->bean
注解(annotation)方式
数据源:
sqlSessionFactory--创建sqlSession连接
来看原始的sqlMapCongif.xml配置文件(mybatis核心配置文件)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--引入数据库,即jdbc配置文件-->
<properties resource="jdbc.properties"/>
<!--配置驼峰命名-->
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!--配置别名com.hp.entity.User-->
<typeAliases>
<package name="sm.hp.entity"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--如果报绑定的错误,在resource中创建文件夹,以“/”分割,和mapper接口同包-->
<package name="sm.hp.mapper"/>
</mappers>
</configuration>
1.applicationContext.xml(spring核心配置文件)
接着来看applicationContext.xml做了什么,附上applicationContext.xml文件头
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
</beans>
1.配置数据源
连接池常用的有c3p0、阿里巴巴、spring提供的jdbc等
<!--配置数据源,使用阿里巴巴的连接池-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="driverClassName" value="${jdbc.driver}"/>
</bean>
2.spring和mybatis的整合
1.配置工厂
<!--配置工厂相关信息-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!--
加载mybatis核心配置文件
classpath:去target/classes下寻找该配置文件
-->
<property name="configLocation" value="classpath:sqlMapConfig.xml"/>
</bean>
3.配置mapper动态代理
<!--
配置mapper的动态代理
作用:扫描basePackage路径下的mapper接口/dao接口,然后会使用sqlSession.getMapper(xxxMapper.class)
其实是给我们basePackage下的接口都生成了一个代理对象,代理对象的名字就是类名首字母小写
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<property name="basePackage" value="sm.hp.mapper"/>
</bean>
配置代理对象的好处:无论你添加了多少个mapper/删除多少个mapper,配置文件就这样。写一个测试类直观的看一下是怎么代理的:
@Test
public void fun1() {
ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
/*获取所有bean的名字*/
String[] bNames = ac.getBeanDefinitionNames();
for (String name : bNames) {
System.out.println("ac.getBean(name) : "+ name +"========" + ac.getBean(name));
}
}
测试全查方法
@Test
public void fun2() {
ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
UserMapper userMapper = ac.getBean("userMapper", UserMapper.class);
System.out.println(userMapper.findAll());
}
上面时直接调用mapper,加上service层测试
首先在配置文件中加入
<!--配置包扫描-->
<context:component-scan base-package="sm.hp.service"/>
来让spring容器给我们管理service,然后我们就能使用了(不用new对象)
@Test
public void fun3() {
ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
UserService userService = ac.getBean("userService", UserService.class);
System.out.println(userService.findAll());
}
最后的sqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--配置驼峰命名-->
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<!--配置别名com.hp.entity.User-->
<typeAliases>
<package name="sm.hp.entity"/>
</typeAliases>
<mappers>
<!-- <mapper resource="com/hp/mapper/UserMapper"/>-->
<!--如果报绑定的错误,在resource中创建文件夹,以“/”分割,和mapper接口同包-->
<package name="sm.hp.mapper"/>
</mappers>
</configuration>
附项目 项目资源