zoukankan      html  css  js  c++  java
  • spring与mybatis的整合

    整合需要的jar包

    要实现spring与mybatis的整合,就要首先导入相关的依赖jar包,如下:

      •   Spring的jar包
      •   Mybatis的jar包
      •   Spring与mybatis整合的jar包
      •   Mysql数据库驱动的jar包
      •   Druid数据库连接池的jar包
      •   Spring与Junit集成测试的jar包(spring-test、Junit)
      •   日志的jar包

          具体依赖

        复制代码
        <properties>
              <spring-version>4.2.4.RELEASE</spring-version>
          </properties>
          
          <dependencies>
              <!-- spring 核心 -->
              <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring-version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${spring-version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>${spring-version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-expression</artifactId>
                <version>${spring-version}</version>
            </dependency>
            
            <!-- spring web集成 -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>${spring-version}</version>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.1.0</version>
                <scope>provided</scope>
            </dependency>
            
            <!-- spring aop的jar包 -->
            <!-- https://mvnrepository.com/artifact/org.springframework/spring-aop -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
                <version>${spring-version}</version>
            </dependency>
            
            <dependency>
                <groupId>aopalliance</groupId>
                <artifactId>aopalliance</artifactId>
                <version>1.0</version>
            </dependency>
              
              <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjweaver</artifactId>
                <version>1.6.8</version>
            </dependency>
              
             <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
                <version>${spring-version}</version>
            </dependency>
              
              <!-- spring jdbc jar包 -->
                  <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>${spring-version}</version>
            </dependency>
              
              <!-- mysql驱动 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.38</version>
            </dependency>
            <!-- 事务 -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
                <version>${spring-version}</version>
            </dependency>
            
            <!-- druid数据库连接池 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.0.18</version>
            </dependency>
              
              <!-- mybaties的依赖包 -->
              <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.2.7</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>1.2.2</version>
            </dependency>
            <!-- 日志相关的jar包 -->
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.7.13</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>1.7.5</version>
            </dependency>
          
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.16</version>
            </dependency>
            
            <!-- spring与Junit测试的jar包 -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>${spring-version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.9</version>
                <scope>test</scope>
            </dependency>
                  
          </dependencies>
          
          <build>  
            <plugins>  
                <plugin>  
                    <groupId>org.apache.maven.plugins</groupId>  
                    <artifactId>maven-compiler-plugin</artifactId>  
                    <configuration>  
                        <source>1.7</source>
                        <target>1.7</target>  
                    </configuration>  
                </plugin>  
                <plugin>
                        <groupId>org.apache.tomcat.maven</groupId>
                        <artifactId>tomcat7-maven-plugin</artifactId>
                        <version>2.2</version>
                        <configuration>
                            <!-- 指定端口 -->
                            <port>8080</port>
                            <!-- 请求路径 -->
                            <path>/</path>
                        </configuration>
                    </plugin>
                
            </plugins>  
        </build>

        整合的步骤

          第一步:创建maven的web工程

          第二步:导入整合需要的jar包

         

          第三步:mybatis的核心配置文件: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>
                 <package name="cn.itcast.spring.domain"/>
             </typeAliases>
             <!-- 加载映射文件 -->    
             <mappers>
                 <mapper resource="mapper.xml"/>
             </mappers>
         </configuration>    
        复制代码

          第四步:spring的核心配置文件:applicationContext.xml的配置

          •     加载db.properties属性配置文件
          •     配置Druid数据库连接池
          •     将SqlSessionFactory的单例对象,配置到spring容器中
          •     将mapper代理对象或者dao接口的实现类对象,配置到spring容器中
        复制代码
        <?xml version="1.0" encoding="UTF-8"?>
        <beans xmlns="http://www.springframework.org/schema/beans"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:context="http://www.springframework.org/schema/context"
            xmlns:tx="http://www.springframework.org/schema/tx"
            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/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">            
            <context:component-scan base-package="cn.spring"></context:component-scan>
            
            <!-- 加载db.properties属性文件 -->
            <context:property-placeholder location="classpath:db.properties"/>
            
            <!-- 数据库连接池 -->
            <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
                <property name="driverClassName" value="${jdbc.driverClassName}"></property>
                <property name="url" value="${jdbc.url}"></property>
                <property name="username" value="${jdbc.username}"></property>
                <property name="password" value="${jdbc.password}"></property>
            </bean>
            
            <!-- SQLSessionFactory的配置 -->
            <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
                <property name="dataSource" ref="dataSource"></property>        
                <!-- mybatis的核心配置文件的路径 -->
                <property name="configLocation" value="classpath:sqlMapConfig.xml"></property>
            </bean>       
        </beans>
        复制代码

              至于将mapper代理对象或者dao接口的实现类对象,配置到spring容器中,将在下面进行配置

          第五步:编写dao接口、dao实现类或者mapper接口、mapper映射文件

         传统Dao开发方式

          开发方式:dao接口+dao实现类。

          Dao的实现类需要从spring容器中获取sqlSession对象来操作数据库,spring为我们提供了SqlsessionDaoSupport类,我们只需要继承这个类,就可以顺利的获得sqlSession对象。

        总结一句话:dao实现类需要继承SqlsessionDaoSupport类,然后再spring容器中配置这个bean。

        1 public interface AccountDao {
        2     public List<Account> findAll();
        3 }
        复制代码
         1 public class AccountDaoImpl extends SqlSessionDaoSupport implements AccountDao {//需要继承SqlSessionDaoSupport 
         2     @Override
         3     public List<Account> findAll() {
         4         SqlSession sqlSession = getSqlSession();    //继承SqlSessionDaoSupport 后直接调用getSqlSession方法
         5         List<Account> selectList = sqlSession.selectList("test.abc");
         6         //整合后sqlSession不需要关闭
         7         return selectList;
         8     }
         9 
        10 }
        复制代码

              mapper.xml

        复制代码
        <?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="test">
            <select id="abc" resultType="account">
                select * from account
            </select>
        </mapper>
        复制代码

              applicationContext.xml中配置dao

           <!-- dao的实现类放到容器中(spring与mybatis整合传统dao的开发) -->
            <bean id="accountDao" class="cn.itcast.spring.dao.AccountDaoImpl">
                <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
            </bean>

              基于mapper代理形式开发Dao

                  开发mapper接口及mapper映射文件

        1 public interface AccountMapper {
        2     public List<Account> selectAll();
        3 }
        复制代码
        <?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代理的开发规则:
            1.namespace必须为接口的全路径
            2.id必须和接口的方法名称一致
            3.parameterType必须与接口方法的参数类型一致
            4.resultType必须与接口方法的返回值类型一致
        -->
        <mapper namespace="cn.itcast.spring.mapper.AccountMapper"> <select id="selectAll" resultType="account"> select * from account </select> </mapper>
        复制代码

                  applicationContext.xml中配置mapper代理

           <!-- 包扫描器 -->
            <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
                <!-- 扫描包,mapper接口和映射对象的名称必须保持一致 -->
                <property name="basePackage" value="cn.spring.mapper"></property>
            </bean>

          第六步:编写Junit测试代码测试

              传统dao方式开发测试

        复制代码
         1 @RunWith(SpringJUnit4ClassRunner.class)
         2 @ContextConfiguration("classpath:applicationContext.xml")
         3 public class SpringMybatisTest {
         4     @Autowired
         5     private AccountDao accountDao;
         6     
         7     @Test
         8     public void testName() throws Exception {
         9         List<Account> findAll = accountDao.findAll();        
        10         for (Account account : findAll) {
        11             System.out.println(account);
        12         }
        13     }
        14 }
        复制代码

              基于mapper代理方式测试

        复制代码
         1 @RunWith(SpringJUnit4ClassRunner.class)
         2 @ContextConfiguration("classpath:applicationContext.xml")
         3 public class SpringMybatisTest {
         4     @Autowired
         5     private AccountMapper accountMapper;
         6     
         7     @Test
         8     public void testName() throws Exception {
         9         List<Account> list = accountMapper.selectAll();        
        10         for (Account account : list) {
        11             System.out.println(account);
        12         }
        13     }
        14 }
        复制代码
  • 相关阅读:
    android Context 持有导致的内存泄漏
    android PreferenceFragment
    android 修改 SwitchPreferenceCompat 高度,内边距,字体大小
    Android MPAndroidChart RadarChart (蜘蛛网图)
    Bugtags 测试平台(支持ios、android)
    BlockCanary 一个轻量的,非侵入式的性能监控组件(阿里)
    RecyclerView item 状态错乱
    RecyclerView android:layout_width="match_parent" 无效
    android-async-http cancelRequests
    Android MultiDex
  • 原文地址:https://www.cnblogs.com/wang01/p/11799350.html
Copyright © 2011-2022 走看看