zoukankan      html  css  js  c++  java
  • 如何愉悦使用mybatis

    1. mybatis-generator+plugins

    单独的generator是免不了全部人工的,配上各种插件则不然,感谢项目
    itfsw/mybatis-generator-plugin

    使用如下:

    pom.xml

    	<dependencies>
    		<!-- lombok -->
    		<dependency>
    			<groupId>org.projectlombok</groupId>
    			<artifactId>lombok</artifactId>
    			<version>${lombok.version}</version>
    			<scope>provided</scope>
    		</dependency>
    		<dependency>
    			<groupId>org.mybatis.spring.boot</groupId>
    			<artifactId>mybatis-spring-boot-starter</artifactId>
    			<version>${springboot.mybatis.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>com.itfsw</groupId>
    			<artifactId>mybatis-generator-plugin</artifactId>
    			<version>${mybatis.generator.itfsw.version}</version>
    		</dependency>
    	</dependencies>
    
    	<build>
    		<finalName>qna-deploy</finalName>
    		<plugins>
    			<plugin>
    				<groupId>org.mybatis.generator</groupId>
    				<artifactId>mybatis-generator-maven-plugin</artifactId>
    				<version>${mybatis.generator.version}</version>
    				<dependencies>
    					<dependency>
    						<groupId> mysql</groupId>
    						<artifactId> mysql-connector-java</artifactId>
    						<version> 5.1.39</version>
    					</dependency>
    					<dependency>
    						<groupId>org.mybatis.generator</groupId>
    						<artifactId>mybatis-generator-core</artifactId>
    						<version>${mybatis.generator.version}</version>
    					</dependency>
    					<dependency>
    						<groupId>com.itfsw</groupId>
    						<artifactId>mybatis-generator-plugin</artifactId>
    						<version>${mybatis.generator.itfsw.version}</version>
    					</dependency>
    				</dependencies>
    				<executions>
    					<execution>
    						<id>Generate MyBatis Artifacts</id>
    						<phase>deploy</phase>
    						<goals>
    							<goal>generate</goal>
    						</goals>
    					</execution>
    				</executions>
    				<configuration>
    					<!--允许移动生成的文件 -->
    					<verbose>true</verbose>
    					<!-- 是否覆盖 -->
    					<overwrite>true</overwrite>
    					<!-- 自动生成的配置 -->
    					<configurationFile>
    						src/main/resources/mybatis-generator.xml</configurationFile>
    				</configuration>
    			</plugin>
    		</plugins>
    	</build>
    

    mybatis-generator.xml 这里我根据我自己项目的情况简况选取了部分插件,更多插件可以见上面给出的github链接。

    <?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="mysql-connector-java-5.1.16-bin.jar"/>-->
        <context id="DB2Tables" targetRuntime="MyBatis3">
            <!-- 查询单条数据插件(selectOne) -->
            <plugin type="com.itfsw.mybatis.generator.plugins.SelectOneByExamplePlugin"/>
            <!-- Example Criteria 增强插件(可以使用.example()方法) -->
            <plugin type="com.itfsw.mybatis.generator.plugins.ExampleEnhancedPlugin"/>
            <!-- 数据Model属性对应Column获取插件 -->
            <plugin type="com.itfsw.mybatis.generator.plugins.ModelColumnPlugin"/>
            <!-- 批量插入插件 -->
            <plugin type="com.itfsw.mybatis.generator.plugins.BatchInsertPlugin"/>
            <!-- 存在即更新插件 -->
            <plugin type="com.itfsw.mybatis.generator.plugins.UpsertPlugin">
                <!--
                支持upsertByExample,upsertByExampleSelective操作
                !需开启allowMultiQueries=true多条sql提交操作,所以不建议使用!插件默认不开启
                -->
                <property name="allowMultiQueries" value="false"/>
                <!--
                开启批量功能,支持batchUpsert,batchUpsertWithBLOBs,batchUpserSelective
                !这几个方法中无法支持IncrementsPlugin的方法!插件默认不开启
                -->
                <property name="allowBatchUpsert" value="true"/>
            </plugin>
            <!-- Lombok插件 -->
            <plugin type="com.itfsw.mybatis.generator.plugins.LombokPlugin">
                <!-- @Data 默认开启,同时插件会对子类自动附加@EqualsAndHashCode(callSuper = true),@ToString(callSuper = true) -->
                <property name="@Data" value="true"/>
                <!-- @Builder 必须在 Lombok 版本 >= 1.18.2 的情况下开启,对存在继承关系的类自动替换成@SuperBuilder -->
                <property name="@Builder" value="false"/>
                <!-- @NoArgsConstructor 和 @AllArgsConstructor 使用规则和Lombok一致 -->
                <property name="@AllArgsConstructor" value="true"/>
                <property name="@NoArgsConstructor" value="true"/>
                <!-- @Getter、@Setter、@Accessors 等使用规则参见官方文档 -->
                <property name="@Accessors(chain = true)" value="false"/>
                <!-- 临时解决IDEA工具对@SuperBuilder的不支持问题,开启后(默认未开启)插件在遇到@SuperBuilder注解时会调用ModelBuilderPlugin来生成相应的builder代码 -->
                <property name="supportSuperBuilderForIdea" value="false"/>
            </plugin>
            <!-- 状态枚举生成插件 -->
            <plugin type="com.itfsw.mybatis.generator.plugins.EnumTypeStatusPlugin"/>
            <!-- Mapper注解插件 -->
            <plugin type="com.itfsw.mybatis.generator.plugins.MapperAnnotationPlugin">
                <!-- @Mapper 默认开启 -->
                <property name="@Mapper" value="true"/>
                <!-- @Repository 默认关闭,开启后解决IDEA工具@Autowired报错 -->
                <property name="@Repository" value="true"/>
            </plugin>
            <!-- Example 目标包修改插件 -->
            <plugin type="com.itfsw.mybatis.generator.plugins.ExampleTargetPlugin">
                <!-- 修改Example类生成到目标包下 -->
                <property name="targetPackage" value="com.huya.qna.entity.example"/>
            </plugin>
            <!-- 逻辑删除插件 -->
            <plugin type="com.itfsw.mybatis.generator.plugins.LogicalDeletePlugin">
                <!-- 这里配置的是全局逻辑删除列和逻辑删除值,当然在table中配置的值会覆盖该全局配置 -->
                <!-- 逻辑删除列类型只能为数字、字符串或者布尔类型 -->
                <property name="logicalDeleteColumn" value="is_del"/>
                <!-- 逻辑删除-已删除值 -->
                <property name="logicalDeleteValue" value="1"/>
                <!-- 逻辑删除-未删除值 -->
                <property name="logicalUnDeleteValue" value="0"/>
                <!-- 是否生成逻辑删除常量(只有开启时 logicalDeleteConstName、logicalUnDeleteConstName 才生效) -->
                <property name="enableLogicalDeleteConst" value="true"/>
                <!-- 逻辑删除常量名称,不配置默认为 IS_DELETED -->
                <property name="logicalDeleteConstName" value="IS_DELETED"/>
                <!-- 逻辑删除常量(未删除)名称,不配置默认为 NOT_DELETED -->
                <property name="logicalUnDeleteConstName" value="NOT_DELETED"/>
            </plugin>
    
            <commentGenerator>
                <property name="suppressDate" value="true"/>
                <property name="suppressAllComments" value="true"/>
            </commentGenerator>
            <!--数据库链接地址账号密码-->
            <!--        added by sunboyu@huya.com:在本地generate相关代码-->
            <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                            connectionURL="jdbc:mysql://00.00.00.00:3306/db_name?useUnicode=true&amp;useSSL=false"
                            userId="balabalabala" password="balabalabala">
            </jdbcConnection>
            <javaTypeResolver>
                <property name="forceBigDecimals" value="false"/>
            </javaTypeResolver>
            <!--生成Model类存放位置-->
            <javaModelGenerator targetPackage="com.huya.qna.entity" targetProject="src/main/java">
                <property name="enableSubPackages" value="true"/>
                <property name="trimStrings" value="true"/>
            </javaModelGenerator>
            <!--生成xml文件存放位置-->
            <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
            <property name="enableSubPackages" value="true"/>
            </sqlMapGenerator>
            <!--生成Mapper类存放位置,可选纯注解模式或使用配置文件模式-->
    <!--        <javaClientGenerator type="ANNOTATEDMAPPER" targetPackage="com.huya.qna.mapper"-->
    <!--                             targetProject="src/main/java">-->
            <javaClientGenerator type="XMLMAPPER" targetPackage="com.huya.qna.mapper"
                                 targetProject="src/main/java">
                <property name="enableSubPackages" value="true"/>
            </javaClientGenerator>
            <!--生成对应表及类名-->
            <table tableName="qna_history" domainObjectName="History"
                   enableInsert="true"
                   enableSelectByPrimaryKey="true"
                   enableSelectByExample="true"
                   enableUpdateByPrimaryKey="true"
                   enableUpdateByExample="true"
                   enableDeleteByPrimaryKey="true"
                   enableDeleteByExample="true"
                   enableCountByExample="true"
                   selectByExampleQueryId="false">
                <!--插入此配置则insert后自动填充主键-->
                <generatedKey column="id" sqlStatement="MySql" identity="true"/>
            </table>
        </context>
    </generatorConfiguration>
    

    关于这个配置文件有几点说明:

    1. 如果想要使用github中的插件,必须使用配置文件模式而非注解模式。
    2. table中设定主键自动填充,该填充是直接写入到相应对象的。
    3. table中没有重新设定大类的类型,实际上使用插件后大类不会被分开存放,仅仅生成对应的BLOBS类操作方式,使用时要注意,非BLOBS方法无法取得大类字段。

    之后,在spring的配置文件加入

    mybatis.mapper-locations=classpath:mapper/*Mapper.xml
    

    如果是Druid,则要遵循druid中的配置,暂时略,后详述

  • 相关阅读:
    PHP基本的语法以及和Java的差别
    Linux 性能測试工具
    【Oracle 集群】Linux下Oracle RAC集群搭建之Oracle DataBase安装(八)
    【Oracle 集群】Oracle 11G RAC教程之集群安装(七)
    【Oracle 集群】11G RAC 知识图文详细教程之RAC在LINUX上使用NFS安装前准备(六)
    【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 特殊问题和实战经验(五)
    【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之缓存融合技术和主要后台进程(四)
    【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)
    Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之ORACLE集群概念和原理(二)
    【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之集群概念介绍(一)
  • 原文地址:https://www.cnblogs.com/cielosun/p/11365252.html
Copyright © 2011-2022 走看看