Mybatis整合Spring
一.导包
1.Mybatis的核心包以及依赖包
2.Spring的jar包(这个可能麻烦点)
3.mybastis和spring整合包
4.数据库驱动包
5.根据自己需求,junit,jstl等jar包导入,下面也将springmvc所需的jar也导入了
二.设计表,创建表
三.创建mybatis和spring的主配置文件
1.书写mybatis配置。由于数据库连接的参数交给spring保管,只配别名和引入映射文件就够了
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis/dtd/mybatis-3-config.dtd"> <configuration> <typeAliases> <package name="cn.itheima.pojo"/> </typeAliases> <mappers> <mapper resource="cn/itheima/dao/UserMapper.xml"/> </mappers> </configuration>
2.书写spring配置文件。依次配置连接池,session工厂,配置dao(这里采用原先的dao开发方式)
<!-- 读取数据库信息配置文件 --> <context:property-placeholder location="classpath:db.properties"/> <!-- 配置连接池 --> <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="jdbcUrl" value="${jdbc.jdbcUrl}" ></property> <property name="driverClass" value="${jdbc.driverClass}" ></property> <property name="user" value="${jdbc.user}" ></property> <property name="password" value="${jdbc.password}" ></property> </bean> <!-- 配置工厂 --> <bean name="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 连接池 --> <property name="dataSource" ref="dataSource"></property> <!-- mybatis主配置信息 --> <property name="configLocation" value="classpath:sqlMapConfig.xml"></property> </bean> <!-- 配置dao --> <bean name="userDao" class="cn.itheima.dao.impl.UserDaoImpl"> <property name="sqlSessionFactory" ref="sqlSessionFactory"></property> </bean>
3.创建实体类
public class User implements Serializable{ private Integer user_id; private String user_name; public Integer getUser_id() { return user_id; } public void setUser_id(Integer user_id) { this.user_id = user_id; } public String getUser_name() { return user_name; } public void setUser_name(String user_name) { this.user_name = user_name; } @Override public String toString() { return "User [user_id=" + user_id + ", user_name=" + user_name + "]"; } }
4.创建dao接口和dao实现类
public interface UserDao { public List<User> findUserList(); }
public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao { public List<User> findUserList() { //通过继承sqlSessionDaoSupprot,调用getSqlSession获得session SqlSession session = super.getSqlSession(); List<User> list = session.selectList("test.findUserList"); return list; } }
5.创建映射文件userMapper.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis/dtd/mybatis-3-mapper.dtd"> <mapper namespace="test"> <select id="findUserList" resultType="User"> select * from user2 </select> </mapper>
6.书写测试类
public class Junit { @Test public void fun1() { ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml"); UserDao dao = (UserDao) ac.getBean("userDao"); List<User> list = dao.findUserList(); System.out.println(list); } }
四.采用动态代理开发dao
1.创建接口UserMapper,不需书写它的实现类,实现类对象创建交给spring
public interface UserMapper { public List<User> findUserList(); }
2.配置applicationContext.xml文件,配置连接池,session工厂,还有一个非常重要的mapper工厂,该工厂用于创建接口的代理对象
<!-- 读取数据库信息配置文件 --> <context:property-placeholder location="classpath:db.properties"/> <!-- 配置连接池 --> <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="jdbcUrl" value="${jdbc.jdbcUrl}" ></property> <property name="driverClass" value="${jdbc.driverClass}" ></property> <property name="user" value="${jdbc.user}" ></property> <property name="password" value="${jdbc.password}" ></property> </bean> <!-- 配置工厂 --> <bean name="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 连接池 --> <property name="dataSource" ref="dataSource"></property> <!-- mybatis主配置信息 --> <property name="configLocation" value="classpath:sqlMapConfig.xml"></property> </bean> <!-- 动态代理开发:从mapper工厂获得代理对象 --> <bean name="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> <!-- 依赖session工厂 --> <property name="sqlSessionFactory" ref="sqlSessionFactory"></property> <!-- 依赖需要代理的接口 --> <property name="mapperInterface" value="cn.itheima.mapper.UserMapper"></property> </bean> </beans>
3.在调用工厂时创建userMapper即可
4.上面虽然很好用,不过还是存在弊端的:当需要代理的接口多时,需要书写的<bean>随之增多,为了减少代码量,通常是采用扫描包的形式自动创建多个代理对象
<!-- 动态代理开发:扫描包下的配置和接口 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 基本包 --> <property name="basePackage" value="cn.itheima.mapper"></property> </bean>
这里用到了一个mapperScannerConfigurer类,该类创建后会自动扫描指定包下的接口和配置并生成代理对象,无需我们手动获取mapperScannerConfigurer
@Test public void fun3() { ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml"); UserMapper userMapper = (UserMapper) ac.getBean(UserMapper.class); List<User> list = userMapper.findUserList(); System.out.println(list); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~