zoukankan      html  css  js  c++  java
  • 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文件

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

    配置log4j.properties日志资源文件

    #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>
  • 相关阅读:
    摘抄博文
    html5中getContext()方法和CanvasRenderingContext2D对象详解
    三十四、Android Spinner控件之键值对用法
    二十七、Android之GPS定位详解
    J2EE用监听器实现同一用户只能有一个在线
    三十二、Android上传文件至服务器
    二十六、Android WebView缓存
    三十九、Android原理 不需要关闭后台运行程序
    三十七、android sqlite3详解
    struts2之注解权限控制
  • 原文地址:https://www.cnblogs.com/deepSleeping/p/10457832.html
Copyright © 2011-2022 走看看