Table des matières
1. Posez des questions
Dans le développement de SSM (Spring+SpringMVC+MyBatis), MyBatis est utilisé et configuré séparément lorsqu'il n'est pas intégré à Spring et SpringMVC.
L'intégration de Spring et SpringMVC est transparente, car c'est la même écologie, très fluide voire "ignorante".
Le problème avant l'intégration de MyBatis est que certains codes sont trop "redondants" :
Deux questions:
① Écrivez le code de l'usine de session à chaque fois
② Contrôle des transactions
Solution:
① Transférez la fabrique de sessions au conteneur Spring pour la gestion et obtenez l'instance Mapper qui effectue l'opération à partir du conteneur.
② Transférer le contrôle de la transaction au conteneur Spring pour le contrôle déclaratif des transactions
2. Résolvez le problème
Placez applicationContext.xml :
L'analyse du mappeur analyse ici l'interface du mappeur et la classe d'implémentation de l'interface est automatiquement créée par Spring.
Écrivez le code du test :
Il vous suffit de transmettre l'interface et le conteneur Spring injectera automatiquement la classe d'implémentation.
Cette étape d'injection est équivalente à la précédente :
new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml")).openSession().getMapper(UserProxyDao.class);
3. Documents associés
applicationContext.xml:
<?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"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
">
<context:component-scan base-package="com.xzl.controller"/>
<!--2、加载jdbc.properties-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!--3、配置数据源对象-->
<bean id="dataSource_C3p0" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!--配置MyBatis的SqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource_C3p0"/>
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
<!--配置Mapper扫描-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.xzl.dao"/>
</bean>
</beans>
mybatis-config.xml:
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--注册类型自定义转换器-->
<typeHandlers>
<typeHandler handler="com.xzl.handle.DateTypeHandle"/>
</typeHandlers>
<!-- 注意:分页助手的插件 配置在通用mapper之前 -->
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper">
<!-- 指定方言 -->
<property name="dialect" value="mysql"/>
</plugin>
</plugins>
<mappers>
<!-- <mapper resource="com/xzl/domain/mapper/UserMapper.xml"/>
<mapper resource="com/xzl/domain/mapper/UserDaoMapper.xml"/>-->
<mapper resource="com/xzl/dao/UserProxyDaoMapper.xml"/>
<!-- <mapper class="com.xzl.dao.UserProxyDao"/>-->
<!-- <package name="com.xzl.dao"/>-->
</mappers>
</configuration>
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>mybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<!--spring相关-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<!--mybatis相关-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>3.7.5</version>
</dependency>
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>0.9.1</version>
</dependency>
</dependencies>
</project>