如何愉悅使用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中的配置,暫時略,后詳述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM