Heim  >  Artikel  >  Java  >  Spring+SpringMVC+MyBatis vertiefendes Lernen und Konstruieren – Integration von MyBatis und Spring

Spring+SpringMVC+MyBatis vertiefendes Lernen und Konstruieren – Integration von MyBatis und Spring

巴扎黑
巴扎黑Original
2017-06-26 09:26:261556Durchsuche

Bitte geben Sie die Quelle für den Nachdruck an:

Wie bereits erwähnt: Spring+SpringMVC+MyBatis ausführliches Lernen und Aufbau (8) – MyBatis-Abfrage-Cache

1 >

Spring ist erforderlich, um SqlSessionFactory über einen Singleton zu verwalten.

Spring und MyBatis werden integriert, um Proxy-Objekte zu generieren, und verwenden SqlSessionFactory zum Erstellen von SqlSession. (Die Integration von Spring und MyBatis wird automatisch abgeschlossen)

Die Mapper der Persistenzschicht müssen von Spring verwaltet werden.

2. Integrierte Umgebung

Erstellen Sie ein Java-Projekt (nahe der tatsächlichen Entwicklungsprojektstruktur)

JAR-Paket:

JAR-Paket von mybatis3.2.7

JAR-Paket von Spring 3.2.0

Dbcp-Verbindungspool

Datenbanktreiber

Integrationspaket von Mybatis und Spring: Die frühe Integration von Ibatis und Spring wurde offiziell von Spring gestartet. Vorausgesetzt, Mybatis und die Spring-Integration werden von Mybatis bereitgestellt.

3.spring-Konfigurationsdatei

Konfigurieren Sie sqlSessionFactory und Datenquelle in applicationContext.xml. SqlSessionFactory gehört zum Integrationspaket von Mybatis und Spring.


<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans 
         
         
         
         
         
         
         
         
         "><!-- 加载配置文件 --><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><!-- SqlSessionFactory配置 --><!-- 让Spring管理SqlSessionFactory使用mybatis和spring整合包中的 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 数据库连接池 --><property name="dataSource" ref="dataSource" /><!-- 加载mybatis的全局配置文件 --><property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml" /></bean></beans>
Drei Methoden des Mapper-Schreibens

4.1 Ursprüngliche Dao-Entwicklung (nach Integration mit Spring)

4.1 .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"><!--namespace命名空间,作用就是对sql进行分类化的管理,理解为sql隔离
    注意:使用mapper代理开发时,namespace有特殊作用  --><mapper namespace="test"><!--在映射文件中配置很多sql语句  --><!--需求:通过id查询用户表的记录  --><!--id:标识映射文件中的sql,称为statement的id。将sql语句封装在mapperStatement的对象中,所有id称为Statement的id;
        parameterType:指定输入参数的类型,这里指定int型;
        #{}:表示一个占位符;
        #{id}:其中id表示接收输入的参数,参数名称就是id,如果输入参数是简单类型,#{}中的参数名可以任意,可以是value或其它名称;
        resultType:指定输出结果所映射的Java对象类型,select指定resultType表示将单条记录映射成Java对象。      --><select id="findUserById" parameterType="int" resultType="joanna.yan.po.User">select * from user where id=#{value}</select> </mapper>
Load User.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>  <!-- 
      批量别名的定义:
      package:指定包名,mybatis会自动扫描包中的pojo类,自定义别名,别名就是类名(首字母大写或小写都可以) -->  <typeAliases>  <package name="joanna.yan.po"/>  </typeAliases><mappers><mapper resource="sqlmap/User.xml"/><!-- 批量加载映射配置文件,mybatis自动扫描包下的mapper接口进行加载;
            遵循一定的规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录中;
            以上规范的前提是:使用的是mapper代理方法;          --><package name="joanna.yan.mapper"/></mappers>
 </configuration>
4.1.2 dao (Implementierungsklasse erbt SqlSessionDaoSupport)


public interface UserDao {//根据id查询用户信息public User findUserById(int id) throws Exception;
}
Dao-Schnittstellen-Implementierungsklasse muss SqlSessionFactory bis zum Frühjahr injizieren.

Hier verwenden wir die Konfigurationsmethode der Spring-Deklaration, um Dao-Beans zu konfigurieren:

Lassen Sie die UserDaoImpl-Implementierungsklasse SqlSessionDaoSupport erben.


public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao{

    @Overridepublic User findUserById(int id) throws Exception {//继承SqlSessionDaoSupport,通过this.getSqlSession()得到sqlSessionSqlSession sqlSession=this.getSqlSession();
        User user=sqlSession.selectOne("test.findUserById", id);return user;
    }
}
4.1.3 Dao konfigurieren

Dao in applicationContext.xml konfigurieren.


    <!-- 方法一:原始dao接口  --><bean id="userDao" class="joanna.yan.dao.UserDaoImpl"><property name="sqlSessionFactory" ref="sqlSessionFactory" /></bean>
4.1.4 Testprogramm


public class UserDaoImplTest {private ApplicationContext applicationContext;
    
    @Beforepublic void setUp(){
        applicationContext=new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
    }
    
    @Testpublic void findUsetByIdTest() throws Exception{
        UserDao userDao=(UserDao) applicationContext.getBean("userDao");
        User user=userDao.findUserById(1);
        System.out.println(user);
    }
}
4.2Mapper-Agent-Entwicklung

4.2.1mapper.xml und mapper.java


<?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"><!--namespace命名空间,作用就是对sql进行分类化的管理,理解为sql隔离
    注意:使用mapper代理开发时,namespace有特殊作用,namespace等于mapper接口地址  --><mapper namespace="joanna.yan.mapper.UserMapper"><select id="findUserById" parameterType="int" resultType="user">select * from user where id=#{value}</select></mapper>


public interface UserMapper {public User findUserById(int id) throws Exception;
}
4.2 .2 Erstellen Sie ein Proxy-Objekt über MapperFactoryBean

und konfigurieren Sie den Mapper in applicationContext.xml.


    <!-- 方法二:mapper配置
         MapperFactoryBean:根据mapper接口生成代理对象     --><bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"><property name="mapperInterface" value="joanna.yan.mapper.UserMapper" /><property name="sqlSessionFactory" ref="sqlSessionFactory" /></bean>
4.2.3 Testverfahren


public class UserMapperTest {private ApplicationContext applicationContext;
    
    @Beforepublic void setUp(){
        applicationContext=new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
    }
    
    @Testpublic void findUsetByIdTest() throws Exception{
        UserMapper userMapper=(UserMapper) applicationContext.getBean("userMapper");
        User user=userMapper.findUserById(1);
        System.out.println(user);
    }
}
Probleme mit dieser Methode: Muss jede getestet werden Das Konfigurieren des Mappers ist mühsam.

4.3 Mapper-Scanning über MapperScannerConfigurer (empfohlen)

Mapper-Batch-Scanning in applicationContext.xml konfigurieren.


    <!-- 方法三:mapper批量扫描 
          从mapper包中扫描出mapper接口,自动创建代理对象并且在spring容器中注册
          遵循规范:将mapper.java和mapper.xml映射文件名称保持一致,且在一个目录中。
         自动扫描出来的mapper的bean的id为mapper类名(首字母小写)     --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!-- 指定扫描的包名
             如果扫描多个包,每个包中间使用半角逗号分隔          --><property name="basePackage" value="joanna.yan.mapper"/><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/></bean>
Zu diesem Zeitpunkt kann die Konfiguration des Stapellade-Mappers unter joanna.yan.mapper in SqlMapConfig.xml weggelassen werden.

Testablauf:


Das obige ist der detaillierte Inhalt vonSpring+SpringMVC+MyBatis vertiefendes Lernen und Konstruieren – Integration von MyBatis und Spring. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn