Mybatis(三):Mybatis-Spring实践

MyBatis 提供了 MyBatis-Spring 组件,能够将 MyBatis “无缝嵌入” 到 Spring 框架,例如:将 MyBatis 映射器 “注入” 到 Bean。

引入 MyBatis-Spring 而产生的变更,主要涉及:

  • 数据源(数据库连接)配置
  • SqlSessionFactory:基于 MyBatis-Spring 的 org.mybatis.spring.SqlSessionFactoryBean
  • 映射器
  • 事务

MyBatis-Spring 提供了 org.mybatis.spring.SqlSessionTemplate 作为 SqlSession 实现。

关于映射器配置,Mybatis-Spring 支持 org.mybatis.spring.mapper.MapperScannerConfigurer 和 org.mybatis.spring.mapper.MapperFactoryBean 两种形式:

  • MapperFactoryBean,即手工配置映射器:类型为 org.mybatis.spring.mapper.MapperFactoryBean 的 bean 作为映射器
  • 通过 mapperInterface 属性,配置映射器的 Java 接口类型
  • 通过 sqlSessionFactory 属性,注入 SqlSessionFactory
  • MapperScannerConfigurer,表示由 Spring 自动扫描,获取映射器
  • 通过 basePackage 属性,配置 “扫描路径”
  • 通过 annotationClass 属性,配置:仅扫描 “路径” 中,被特定注解标记的 Java 接口
  • 通过 markerInterface 属性,配置:仅扫描 “路径” 中,继承特定接口的 Java 接口
  • 通过 sqlSessionFactoryBeanName 属性,关联 SqlSessionFactory,以注入到映射器中

mybatis-config.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>
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
</configuration>

spring-dao.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">

    <!-- 导入jdbc文件 -->
    <context:property-placeholder
            location="classpath:config/jdbc/jdbc.properties"/>

    <!-- dataSource -->
    <!-- dataSource 配置 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
          init-method="init" destroy-method="close">
        <property name="name" value="${jdbc.dataSourceName}"/>
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.user}"/>
        <property name="password" value="${jdbc.password}"/>

        <property name="initialSize" value="5"/>
        <property name="minIdle" value="3"/>
        <property name="maxActive" value="30"/>

        <property name="maxWait" value="60000"/>

        <property name="timeBetweenEvictionRunsMillis" value="60000"/>

        <property name="minEvictableIdleTimeMillis" value="300000"/>

        <property name="validationQuery" value="SELECT 1"/>
        <property name="testWhileIdle" value="true"/>
        <property name="testOnBorrow" value="false"/>
        <property name="testOnReturn" value="false"/>

        <property name="removeAbandoned" value="true"/>
        <property name="removeAbandonedTimeout" value="1800"/>
        <property name="logAbandoned" value="true"/>

        <property name="poolPreparedStatements" value="false"/>
        <property name="maxPoolPreparedStatementPerConnectionSize" value="20"/>

        <property name="filters" value="stat"/>
    </bean>

    <!-- sqlSessionFactoryBean -->
    <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:mybatis-config.xml" />
        <property name="mapperLocations"
                  value="classpath:mapper/*/*Mapper.xml"/>
    </bean>

    <!-- MapperScannerConfigurer -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 自动扫描 -->
        <property name="basePackage" value="love.ning.yang.mapper"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"/>
    </bean>
</beans>

spring-transaction.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:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

    <!-- 事务管理器 -->
    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!-- 启用事务注解的支持 @Transaction -->
    <tx:annotation-driven transaction-manager="transactionManager"/>

</beans>
  • 构建 org.springframework.jdbc.datasource.DriverManagerDataSource 类型的 bean,作为数据库连接配置
  • 构建 org.mybatis.spring.SqlSessionFactoryBean 类型的 bean,其中:
    通过 dataSource 属性注入数据库连接信息
  • 通过 configLocation 属性设置 MyBatis 配置文件路径(SqlSessionFactoryBean 支持直接注入 MyBatis 配置项)
  • 构建 org.springframework.jdbc.datasource.DataSourceTransactionManager 类型的 bean,并启用 “声明式事务”

MyBatis Generator

generatorConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration PUBLIC
        "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <!-- 数据库驱动包位置 -->
    <classPathEntry
            location="C:Userswade.m2
epositorymysqlmysql-connector-java5.1.6mysql-connector-java-5.1.6.jar"/>
    <context id="myBatisGeneratorContext"
             targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressAllComments"
                      value="true"/>
            <property name="suppressDate"
                      value="true"/>
        </commentGenerator>
        <!-- 数据库链接URL、用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://127.0.0.1:3306/yang?useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC&amp;zeroDateTimeBehavior=convertToNull&amp;useInformationSchema=true&amp;useSSL=false"
                        userId="root"
                        password=""/>
        <javaTypeResolver>
            <property name="forceBigDecimals"
                      value="false"/>
        </javaTypeResolver>
        <!-- 生成模型的包名和位置 -->
        <javaModelGenerator targetPackage="sun.flower.demo.mybatis.domain"
                            targetProject="src/main/java">
            <property name="trimStrings"
                      value="true"/>
        </javaModelGenerator>
        <!-- 生成的映射文件xml包名和位置 -->
        <sqlMapGenerator targetPackage="sun.flower.demo.mybatis.xml"
                         targetProject="src/main/java"/>
        <!-- 生成dao的包名和位置 -->
        <javaClientGenerator targetPackage="sun.flower.demo.mybatis.dao"
                             targetProject="src/main/java"
                             type="XMLMAPPER"/>

        <!-- 要生成哪些表(更改tableName和domainObjectName就可以) -->
        <table tableName="yang_user"
               domainObjectName="User"
               enableCountByExample="false"
               enableUpdateByExample="false"
               enableDeleteByExample="false"
               enableSelectByExample="false"
               selectByExampleQueryId="false"/>
    </context>
</generatorConfiguration>

pom.xml

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.2</version>
                <executions>
                    <execution>
                        <id>Generate MyBatis Files</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <phase>generate</phase>
                        <configuration>
                            <verbose>true</verbose>
                            <overwrite>true</overwrite>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

执行

maven执行mybatis-generator

 
原文地址:https://www.cnblogs.com/yang21/p/9826306.html