桥哥我又来啦!今天咱们要征服的主题是——Spring 和 Mybatis 的整合!啥?整合?听起来很高大上?别怕,桥哥带你飞!其实整合就像给 Spring 和 Mybatis 牵个红线,让它们愉快地合作,发挥各自的优势,从此过上幸福美满的生活(数据库操作更方便啦!)。
一、为什么需要整合?
Spring 就像一个大管家,负责管理项目中各种对象,而 Mybatis 则是数据库访问高手。整合之后,Spring 就能帮我们管理 Mybatis 中的核心对象 SqlSessionFactory,相当于给 Mybatis 请了个助理,让它更专注于数据库操作,不用操心创建和管理 SqlSessionFactory 的琐事。
二、整合三步走
整合 Spring 和 Mybatis,就像做三明治一样简单:
准备食材: 引入必要的 jar 包,就像买好面包、火腿和芝士。 配置 Spring: 告诉 Spring 如何创建和管理 SqlSessionFactory 和数据源,就像把面包切片,放上火腿和芝士。 连接 Mybatis: 将 Mybatis 的 Mapper 接口交给 Spring 管理,就像把三明治的两片面包合在一起。
三、实战演练:DAO 层整合
1. 引入依赖
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<!-- 其他 Spring 相关依赖 -->
这些依赖就像做菜的调料,缺一不可。mybatis-spring 就是 Spring 和 Mybatis 的“红娘”!
2. 配置数据源和 SqlSessionFactory
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://192.168.64.128:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations" value="classpath:com/txw/mapper/*.xml"/>
</bean>
这里我们配置了数据源,告诉 Spring 如何连接数据库。然后配置 SqlSessionFactory,它就像一个工厂,负责生产 SqlSession,SqlSession 才是真正和数据库交互的“搬运工”。
3. 将 Mapper 接口交给 Spring 管理
<bean id="userDAO" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
<property name="mapperInterface" value="com.txw.dao.UserDAO"/>
</bean>
MapperFactoryBean 就像一个代理,它帮我们创建了 UserDAO 的实现类,这样我们就可以直接在 Service 层注入 UserDAO,而不用关心它的具体实现。
四、Service 层整合
Service 层整合就更简单了,只需要将 DAO 注入到 Service 中即可。
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDAO userDAO;
@Override
public List<User> findAll() {
return userDAO.findAll();
}
}
@Autowired
注解就像一个神奇的胶水,把 UserDAO “粘”到了 UserServiceImpl 中。
五、测试一下
@Test
public void testFindAll(){
ApplicationContext context = new ClassPathXmlApplicationContext("Spring-myabtis.xml");
UserService userService = context.getBean(UserService.class);
List<User> users = userService.findAll();
for (User user : users) {
System.out.println(user);
}
}
运行这段代码,如果能成功打印出数据库中的用户信息,恭喜你,整合成功!
温馨提示
MapperLocations 的路径要配置正确,否则 Spring 找不到你的 Mapper 文件。 Mapper 接口的命名空间要和 Mapper 文件的 namespace 一致。
总结
Spring 和 Mybatis 的整合,其实就是让 Spring 来管理 Mybatis 的核心对象,从而简化数据库访问操作。记住三步走,轻松搞定整合!桥哥带你轻松入门 Java,下次再见!