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

     
  • 相关阅读:
    将vue文件script代码抽取到单独的js文件
    git pull 提示错误:Your local changes to the following files would be overwritten by merge
    vue和uniapp 配置项目基础路径
    XAMPP Access forbidden! Access to the requested directory is only available from the local network.
    postman与newman集成
    postman生成代码段
    Curl命令
    POST方法的Content-type类型
    Selenium Grid 并行的Web测试
    pytorch转ONNX以及TnesorRT的坑
  • 原文地址:https://www.cnblogs.com/yang21/p/9826306.html
Copyright © 2011-2022 走看看