MyBatis之整合Spring

MyBatis之整合Spring

整合思路:

  1、SqlSessionFactory对象应该放到spring容器中作为单例存在

  2、传统dao的开发方式中,应该从spring容器中获得sqlSession对象

  3、Mapper代理形式中,应该从spring容器中直接获得mapper的代理对象

  4、数据库的连接以及数据库连接池事务管理都交给spring容器来完成

整合需要的jar包

  1、spring的jar包

  2、mybatis的jar包

  3、spring+mybatis的整合包

  4、mysql的数据库驱动jar包

  5、数据库连接池的jar包

 

配置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>
    <!-- 设置别名 -->
    <typeAliases>
        <!-- 2.指定扫描包,会把包内所有的类都设置别名,别名的名称就是类名,大小写不敏感 -->
        <package name="deep.mybatis.pojo"/>
    </typeAliases>
</configuration>
复制代码

 

配置applicationContext.xml核心配置文件

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns="http://www.springframework.org/schema/beans" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:aop="http://www.springframework.org/schema/aop" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-4.2.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-4.2.xsd 
     http://www.springframework.org/schema/aop 
     http://www.springframework.org/schema/aop/spring-aop-4.2.xsd ">
 
     
     <!-- 加载配置文件 -->
     <context:property-placeholder location="classpath:db.properties"/>
 
     <!-- dbcp 数据源 -->
     <!-- 数据库连接池 -->
     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
         destroy-method="close">
         <property name="driverClassName" value="${jdbc.driver}"/>
         <property name="url" value="${jdbc.url}"/>
         <property name="username" value="${jdbc.username}"/>
         <property name="password" value="${jdbc.password}"/>
         <property name="maxActive" value="10"/>
         <!-- 最大空闲数量(最少留多少个连接) -->
         <property name="maxIdle" value="5"/>
     </bean>
     
     
     <!-- Mybatis的工厂 -->
     <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
         <property name="dataSource" ref="dataSource"/>
         <!-- 核心配置文件的位置 -->
         <property name="configLocation" value="classpath:sqlMapConfig.xml"/>
     </bean>
       
 </beans>
复制代码

 

配置资源文件db.properties文件

1
2
3
4
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456

 

配置log4j.properties日志资源文件

1
2
3
4
5
6
#Global logging configuration
log4j.rootLogger=DEBUG,stdout
#Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p[%t]-%m%n

 

配置UserDaoImpl

<!-- Dao -->
     <bean id="userDao" class="deep.mybatis.dao.UserDaoImpl">
         <!-- 其实这个工厂并没有注入到UserDaoImp这个实现类里面,而是注入到了实现类的父类里去了 -->
         <property name="sqlSessionFactory" ref="sqlSessionFactoryBean"/>
     </bean>
复制代码
package deep.mybatis.dao;

import org.mybatis.spring.support.SqlSessionDaoSupport;

/**
 * 原始dao开发
 * @author DeepSleeping
 *
 */
public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao{
    
    //声明工厂
    
    public void insertUser(){
        this.getSqlSession().insert("");
    }
}
复制代码

 

配置Mapper动态代理开发

applicationContext.xml

<!-- Mapper动态代理开发 -->
     <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
         <!-- 有工厂才能有session,有session才能有session.getMapper获得实现类 -->
         <property name="sqlSessionFactory" ref="sqlSessionFactoryBean"/>
         <property name="mapperInterface" value="deep.mybatis.mapper.UserMapper"/>
     
     </bean>

 

复制代码
package deep.mybatis.mapper;

import deep.mybatis.pojo.User;

public interface UserMapper {

    
    public User findByUserId(Integer id);
}
复制代码
复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper 
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="deep.mybatis.mapper.UserMapper">
    
    <!-- 通过ID查询一个用户 -->
    <select id="findByUserId" parameterType="Integer" resultType="User">
        select * from account where id = #{v}
    </select>
</mapper>
复制代码
复制代码
package deep.mybatis.junit;

import static org.junit.Assert.*;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import deep.mybatis.mapper.UserMapper;
import deep.mybatis.pojo.User;

public class JunitTest {

    @Test
    public void testmapper() throws Exception {
     ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
     /*ac.getBean(UserMapper.class);*/
     UserMapper userMapper = (UserMapper) ac.getBean("userMapper");
     User user = userMapper.findByUserId(27);
     System.out.println(user);
    }
}
复制代码

 

配置Mapper动态代理(增强版)

  上面的方式还是有弊端,给mybatis提供接口的时候,必须得指定到具体类。我们可以用mybatis中的另一个mapper包里的功能,扫描基本包下的所有

<!-- Mapper动态代理开发(增强版) 扫描 -->
     
     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
         <!-- 不需要指定工厂了,因为会自动去工厂中找到工厂bean -->
         <!-- 配置基本包(扫描包下的所有的) -->
         <property name="basePackage" value="deep.mybatis.mapper"></property>
     </bean>

 

posted @   瓶子coder  阅读(192)  评论(0编辑  收藏  举报
编辑推荐:
· 从 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的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示