zoukankan      html  css  js  c++  java
  • MyBatis Generator自动生成(转载)

    原文地址:https://blog.csdn.net/weixin_42476498/article/details/100511477

    1.先在项目resources下创建并编写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>
    <!--    如果导入下面就可以导入属性:就可以注入属性值如:driverClass="${jdbc.driverClass}"-->
    <!--    <properties resource="application.properties"></properties>-->
        <!--targetRuntime:
        1,MyBatis3:默认的值,生成基于MyBatis3.x以上版本的内容,包括XXXBySample;
        2,MyBatis3Simple:类似MyBatis3,只是不生成XXXBySample;-->
        <context id="mysqlgenerator" targetRuntime="MyBatis3">
            <plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin"></plugin>
            <plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin>
            <plugin type="org.mybatis.generator.plugins.ToStringPlugin"></plugin>
            <plugin type="com.itfsw.mybatis.generator.plugins.ExampleEnhancedPlugin"/>
            <plugin type="com.itfsw.mybatis.generator.plugins.ModelColumnPlugin"/>
            <plugin type="com.itfsw.mybatis.generator.plugins.ExampleTargetPlugin">
                <property name="targetPackage" value="com.zxd.testforteaching.example"/>
            </plugin>
            <plugin type="com.itfsw.mybatis.generator.plugins.SelectOneByExamplePlugin"/>
            <plugin type="com.itfsw.mybatis.generator.plugins.LogicalDeletePlugin">
                <!-- 这里配置的是全局逻辑删除列和逻辑删除值,当然在table中配置的值会覆盖该全局配置 -->
                <!-- 逻辑删除列类型只能为数字、字符串或者布尔类型 -->
                <property name="logicalDeleteColumn" value="deleted"/>
                <!-- 逻辑删除-已删除值 -->
                <property name="logicalDeleteValue" value="1"/>
                <!-- 逻辑删除-未删除值 -->
                <property name="logicalUnDeleteValue" value="0"/>
            </plugin>
            <plugin type="com.itfsw.mybatis.generator.plugins.OptimisticLockerPlugin"/>
            <!--覆盖生成XML文件-->
            <plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" />
            <commentGenerator>
                <!-- 这个元素用来去除指定生成的注释中是否包含生成的日期 false:表示保护 -->
                <!-- 如果生成日期,会造成即使修改一个字段,整个实体类所有属性都会发生变化,不利于版本控制,所以设置为true -->
                <property name="suppressDate" value="true"/>
                <!-- 是否去除自动生成的注释 true:是 : false:否 (如果去除注释生成的xml会merge而不是覆盖,如果即不想要注释,又要覆盖需配置UnmergeableXmlMappersPlugin)-->
                <property name="suppressAllComments" value="true"/>
            </commentGenerator>
            <!--数据库链接URL,用户名、密码 -->
            <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                            connectionURL="jdbc:mysql://127.0.0.1:3306/zxdtestmysql?nullCatalogMeansCurrent=true&amp;serverTimezone=UTC"
                            userId="root"
                            password="root">
                <property name="useInformationSchema" value="true"/>
            </jdbcConnection>
            <!-- 生成实体类的包名和位置 -->
            <javaModelGenerator targetPackage="com.zxd.testforteaching.model"
                                targetProject="src/main/java">
                <property name="enableSubPackages" value="true"/>
                <property name="trimStrings" value="true"/>
                <property name="constructorBased" value="false"/>
            </javaModelGenerator>
            <!-- 生成映射文件xml的包名和位置 -->
            <sqlMapGenerator targetPackage="com.zxd.testforteaching.mapper"
                             targetProject="src/main/resources">
                <property name="enableSubPackages" value="true"/>
            </sqlMapGenerator>
            <!-- 生成java接口的包名和位置-->
            <javaClientGenerator type="XMLMAPPER"
                                 targetPackage="com.zxd.testforteaching.dao"
                                 targetProject="src/main/java">
            </javaClientGenerator>
            <!-- 要生成哪些表 -->
            <table tableName="course" domainObjectName="Course">
            <!-- 如果上面配置了乐观锁并且表中字段有version,需要配置-->
            <!--<property name="versionColumn" value="version"/>-->
            <!--如果表中有text类型需要转为String,需要配置-->
            <!--<columnOverride column="message_content" jdbcType="VARCHAR"></columnOverride>-->
            <!--生成的insert语句会把刚刚插入的id返回java实体类,只试用于主键自增-->
                <generatedKey column="c_id" sqlStatement="MySql" identity="true"/>
            </table>
        </context>
    </generatorConfiguration>

    2.设置pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.7.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.zxd</groupId>
        <artifactId>testforteaching</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>testforteaching</name>
        <description>Demo project for Spring Boot</description>
        <properties>
            <java.version>1.8</java.version>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.2</version>
            </dependency>
        </dependencies>
    
        <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.7</version>
                    <configuration>
                        <configurationFile>${basedir}/src/main/resources/generatorConfig.xml</configurationFile>
                        <verbose>true</verbose>
                        <!--每次生成xml是覆盖而不是追加-->
                        <overwrite>true</overwrite>
                    </configuration>
                    <dependencies>
                        <!--自动生成的插件所使用的jdbc驱动-->
                        <dependency>
                            <groupId>mysql</groupId>
                            <artifactId>mysql-connector-java</artifactId>
                            <version>8.0.13</version>
                        </dependency>
                        <!--自动生成更加便捷的代码插件。如:selectOneByExample-->
                        <dependency>
                            <groupId>com.itfsw</groupId>
                            <artifactId>mybatis-generator-plugin</artifactId>
                            <version>1.2.10</version>
                        </dependency>
                        <!--上面的引了,下面的依赖并不需要-->
    <!--                    <dependency>-->
    <!--                        <groupId>org.mybatis.generator</groupId>-->
    <!--                        <artifactId>mybatis-generator-core</artifactId>-->
    <!--                        <version>1.3.7</version>-->
    <!--                    </dependency>-->
                    </dependencies>
                </plugin>
            </plugins>
        </build>
    
    </project>

    3.项目根目录下执行 mvn mybatis-generator:generate
    正确无误执行完,就是在你设定的位置生成mybatis的各文件。
    ps:每次generate都会覆盖原来的xml,所以不要在自动生成的xml中DIY自己的语句

    4.说明
    1.generatorConfig.xml中:
    context的targetRuntime

    <context id="mysqlgenerator" targetRuntime="MyBatis3">
        1,MyBatis3:默认的值,生成基于MyBatis3.x以上版本的内容,包括XXXBySample;(常用)
        2,MyBatis3Simple:类似MyBatis3,只是不生成XXXBySample; 

    javaClientGenerator的type

    对于mybatis来说,即生成Mapper接口,注意,如果没有配置该元素,那么默认不会生成Mapper接口 
    type:选择怎么生成mapper接口(在MyBatis3/MyBatis3Simple下):
    1,ANNOTATEDMAPPER:会生成使用Mapper接口+Annotation的方式创建(SQL生成在annotation中),不会生成对应的XML;
    2,MIXEDMAPPER:使用混合配置,会生成Mapper接口,并适当添加合适的Annotation,但是XML会生成在XML中;
    3,XMLMAPPER:会生成Mapper接口,接口完全依赖XML;
    注意,如果context是MyBatis3Simple:只支持ANNOTATEDMAPPER和XMLMAPPER

    2.如果要实现生成的文件不要注释并且也是覆盖,需要做如下配置:

    1,pom中加<overwrite>true</overwrite>,并且导入1.3.7以上版本的插件;
    2,自动生成配置中配置UnmergeableXmlMappersPlugin;
    才可以取消生成全部注释。
    注意:如果没有取消生成注释,就不用做这些处理,就是覆盖。因为插件是根据自己的注释来确定是否为overwrite还是merge的。


    5.搭建运行mybatis的配置
    为方便记,分三部曲配置
    1.需要配置扫描的xml文件: 在application.xml中配置,

    mybatis:
    mapper-locations: classpath:com/zxd/testforteaching/mapper/*.xml

    2.需要配置扫描的接口文件:
    启动类上加 @MapperScan(“com.zxd.testforteaching.dao”) 取src.main.java后面的路径;
    或者每个Mapper接口上面加@Mapper注解;

    3.需要配置映射的实体类: 两种方式
    一。不用配置的情况:用完全限定名来指定这些POJO的引用,例如

    <resultMap id="BaseResultMap" type="com.zxd.testforteaching.model.Course">
    1
    二。可以通过在application.xml中配置pojo引用路径,就可以不用完全限定名

    mybatis:
    type-aliases-package: com.zxd.testforteaching.model
    -----------------------
    <resultMap id="BaseResultMap" type="Course">

    6.缺少mybatis配置的一些常见报错信息
    org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.zxd.testforteaching.dao.CourseMapper.selectByPrimaryKey
    ps 是因为未配置mapper-locations
    Caused by: java.lang.ClassNotFoundException: Cannot find class: Course
    ps 是因为未扫描到接受的实体类(pojo)
    Field courseMapper in com.zxd.testforteaching.controller.TestController required a bean of type 'com.zxd.testforteaching.dao.CourseMapper' that could not be found.
    ps 是因为mapper接口未扫描到。

    7.最后就可以测试一下mybatis啦~
    @RestController
    public class TestController {
    @Autowired
    private CourseMapper courseMapper;
    @RequestMapping("/getOne")
    public Course getOne(String a){
    Course course = courseMapper.selectByPrimaryKey("01");
    return course;
    }
    }
    //结果返回 {"cId":"01","cName":"语文","tId":"02"}

  • 相关阅读:
    Openssl和PKCS#11的故事
    SSL连接建立过程分析(5)
    SSL连接建立过程分析(1)
    关于OpenSSL支持USBKEY证书的尝试
    install the CLEARCASE with eclipse 3.4,duplicate location
    10种技巧可提升Android应用运行效果
    专访实战专家 揭秘iOS神奇开发之路
    win objc codeblocks
    redeclared as different kind of symbol ,undefined reference to `__objc_class_name_Rectangle12'
    201203NEWS
  • 原文地址:https://www.cnblogs.com/shuaimeng/p/13163625.html
Copyright © 2011-2022 走看看