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

     
  • 相关阅读:
    ui5 call view or method from another view
    vuejs helloworld
    vuejs v-model
    vuejs v-bind
    vuejs on
    vuejs fatherandson
    vuejs scope
    vuejs keep-alive
    VLAN虚拟局域网
    网线的制作
  • 原文地址:https://www.cnblogs.com/yang21/p/9826306.html
Copyright © 2011-2022 走看看