依赖包
①Spring核心包
②Mybatis包
③Spring中Data Access/intergration层中的JDBC包
④Spring中spring-tx包
⑤Spring中aop包
⑤mybatis-spring包
所有包:
实现步骤
spring联合mybatis的实质是将mybatis的配置文件信息加载到了一些特殊的类中,再将这些类交给Spring容器进行管理
①连接数据库
使用<bean>加载数据源封装类:org.springframework.jdbc.datasource.DriverManagerDataSource
使用<property>设置属性:driverClassName、url、username、password
<!-- 加载数据库源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/kfc?serverTimezone = GMT"></property>
<property name="username" value="root"></property>
<property name="password" value="*******"></property>
</bean>
②产生SqlSessionFactory对象
使用<bean>加载工厂类:org.mybatis.spring.SqlSessionFactoryBean
使用<property>设置属性:
dataSource,加载信息,需引用上一步中的对象,即bean id
typeAliasesPackage,可给指定的包起别名(简化sql类型)
configLocation,加载本地的myabtis配置文件(可配置插件)
<!-- 加载SqlSessionFactory -->
<bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="typeAliasesPackage" value="com.mfqh.pojo"></property>
</bean>
③扫描mapper(此处可以不设置id,因为不会被外部引用)
使用<bean>加载:org.mybatis.spring.mapper.MapperScannerConfigurer
使用<property>设置属性:
basePackage,值为需要扫描的mapper包名
sqlSessionFactory,引用上一步的factory id,在工厂中加载mapper
Ps:
Ⅰ、若使用文件(properties)加载连接信息且使用自动注入,需使用属性:sqlSessionFactoryBeanName
因为自动注入级别较高,并不会加载到文件内容
Ⅱ、该步在加载时会直接创建好接口绑定的对象,对象名(类名首字母小写)
<!-- 扫描mapper,不会被引用,并不需要id-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.mfqh.mapper"></property>
<property name="sqlSessionFactory" ref="factory"></property>
</bean>
查看容器内部信息
有关资源释放
在非WEB应用中,若手动加载Spring.xml配置文件,需使用AbstractApplicationContext来接收容器对象,因为ApplicationContext并没有提供容器的关闭方法,则会造成资源的浪费(数据库连接不能释放等)
测试
①使用接口(位于com.mfqh.mapper下)绑定:
public interface GoodsMapper {
/**
* 接口绑定,查询所有货物信息
* @return 货物信息
*/
public List<Goods> selAll();
}
和mapper.xml搭配使用:
<mapper namespace="com.mfqh.mapper.GoodsMapper">
<select id="selAll" resultType="Goods">
SELECT * FROM goods;
</select>
</mapper>
②在Service中设置私有属性 GoodsMapper对象(注入),交给容器管理
<bean id="queryService" class="com.mfqh.service.QueryService">
<property name="selGoods" ref="goodsMapper"></property>
</bean>
public class QueryService {
//查询对象
private GoodsMapper selGoods;
//get/set方法
puvlic void goodsService(){
List<Goods> goods = selGoods.selAll();
if(goods == null) {
System.out.println("未查询到结果");
}else {
System.out.println("结果为:");
for (Goods good: goods) {
System.out.println(good.getName()+" "+good.getId());
}
}
}
}
③在Servlet进行测试