提供一种Spring的IoC容器与Mybatis的整合方式,其中中,Mybatis采用纯注解方式配置,Spring采用XML方式配置。数据库源采用的是C3P0数据库连接池。
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
<property name="jdbcUrl"
value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true"/>
<property name="user" value="root"/>
<property name="password" value="password123"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cn.titan6.spring.dao"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
<bean id="userService" class="cn.titan6.spring.service.impl.UserServiceImpl"/>
这里采用的是mybatis-spring的MapperScannerConfigurer来实现将DAO对象置入IOC容器中,将会扫描并加入basePackage指定包下的所有DAO接口。
DAO简单的实现了一个查询所有信息的功能
package cn.titan6.spring.dao;
import cn.titan6.spring.bean.User;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface UserDao {
@Select("SELECT * FROM user")
List<User> findAllUser();
}
UserService实现类采用Spring的注解方式自动通过构造器进行依赖注入UserDao
package cn.titan6.spring.service.impl;
import cn.titan6.spring.bean.User;
import cn.titan6.spring.dao.UserDao;
import cn.titan6.spring.service.UserService;
import org.springframework.stereotype.Component;
import java.util.List;
@Component("userService")
public class UserServiceImpl implements UserService {
private final UserDao dao;
public UserServiceImpl(UserDao dao) {
this.dao = dao;
}
@Override
public List<User> findAllUser() {
return dao.findAllUser();
}
}
import cn.titan6.spring.bean.User;
import cn.titan6.spring.config.SpringConfiguration;
import cn.titan6.spring.service.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.List;
public class SpringTest {
@Test
public void findAllUser() {
ApplicationContext context = new ClassPathXmlApplicationContext("Application.xml");
UserService userService = context.getBean("userService", UserService.class);
List<User> allUser = userService.findAllUser();
allUser.forEach(System.out::println);
}
}