crud有啥意思,快来用代码生成器偷懒吧

Mybatis-generator的两种使用方式

为什么我们需要代码生成器?

还记得我刚刚入行的时候,那会儿,感觉根据数据库字段创建model,生成getter,setter方法,mapper,xml的crud代码和SQL的编写,这些一搞就是一天,感觉真的好有成就感~~~

现在呢? 确实是不想做这种重复性的工作,这也许就是成长.


代码生成器在网上有很多很多了, 但是有一些代码生成器适合于你的公司,但是不一定适合你平时自己悄摸学习提升.

下面就和大家介绍两种非常普遍的和一种升级版的代码生成器的集成方式

  • 写写写
  • 点点点
  • tk+写写写

先把我用的数据表赠送给有需要的人~~~

CREATE TABLE `lol_hero` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键自增',
  `nick_name` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '外号',
  `name` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '英雄名字',
  `age` int DEFAULT NULL COMMENT '英雄年龄',
  `sex` enum('-1','0','1') COLLATE utf8_bin NOT NULL DEFAULT '-1' COMMENT '-1未知 0 男 1女',
  `occupation` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '职业',
  `famous` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '口头禅',
  `create_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

INSERT INTO `lol_hero` VALUES (1, '德玛西亚之力', '盖伦', 18, '0', '战士', 'dedededede', '2020-05-13 16:07:31');
INSERT INTO `lol_hero` VALUES (2, '黑暗之女', '安妮', 6, '1', '法师', '提伯斯', '2020-05-13 16:08:12');
INSERT INTO `lol_hero` VALUES (3, ' 狂战士', '奥拉夫', 40, '0', '战士', NULL, '2020-05-13 16:16:03');
INSERT INTO `lol_hero` VALUES (4, '正义巨像', '加里奥', 80, '-1', '法坦', NULL, '2020-05-13 16:16:40');
INSERT INTO `lol_hero` VALUES (5, '卡牌大师', '崔斯特', 31, '0', '法师', NULL, '2020-05-13 16:17:09');
INSERT INTO `lol_hero` VALUES (6, '德邦总管', '赵信', 28, '0', '战士', '一点寒芒先到,随后枪出如龙', '2020-05-13 16:18:08');
INSERT INTO `lol_hero` VALUES (7, '无畏战车', '厄加特', 43, '0', '坦克/战士', 'emmmm', '2020-05-13 16:19:40');

1 最常见-写写写

pom引依赖+generatorConfig.xml

第一种方式,其实是我们最常用的代码生成方式

在集成该代码生成器的时候,我们需要以下三部分:

  • pom引入相关依赖
  • application.properties(或yml)相关配置
  • 复制粘贴generatorConfig.xml,文件内进行相关修改
1 pom引依赖
<dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starterartifactId>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-jdbcartifactId>
        dependency>

        
        <dependency>
            <groupId>com.zaxxergroupId>
            <artifactId>HikariCPartifactId>
        dependency>

        
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <version>8.0.18version>
        dependency>
        <dependency>
            <groupId>org.mybatis.generatorgroupId>
            <artifactId>mybatis-generator-coreartifactId>
            <version>1.3.7version>
        dependency>

        
        <dependency>
            <groupId>org.mybatis.spring.bootgroupId>
            <artifactId>mybatis-spring-boot-starterartifactId>
            <version>2.1.0version>
        dependency>

        
        <dependency>
            <groupId>tk.mybatisgroupId>
            <artifactId>mapper-spring-boot-starterartifactId>
            <version>2.1.5version>
        dependency>

        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <optional>trueoptional>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintagegroupId>
                    <artifactId>junit-vintage-engineartifactId>
                exclusion>
            exclusions>
        dependency>
    dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
            plugin>
            
            <plugin>
                <groupId>org.mybatis.generatorgroupId>
                <artifactId>mybatis-generator-maven-pluginartifactId>
                <version>1.4.0version>
                <configuration>
                    <configurationFile>src/main/resources/generator/generatorConfig.xmlconfigurationFile>
                    <overwrite>trueoverwrite>
                    <verbose>trueverbose>
                configuration>
                <dependencies>
                    <dependency>
                        <groupId>mysqlgroupId>
                        <artifactId>mysql-connector-javaartifactId>
                        <version>8.0.18version>
                    dependency>
                    <dependency>
                        <groupId>tk.mybatisgroupId>
                        <artifactId>mapperartifactId>
                        <version>4.0.4version>
                    dependency>
                dependencies>
            plugin>
        plugins>
    build>
2 application.yml 配置
server:
  port: 80

spring:
  application:
    name: diginto

#数据库
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    username: root
    password: paasword
    url: jdbc:mysql://localhost:3306/diginto?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true&allowPublicKeyRetrieval=true
    driver-class-name: com.mysql.cj.jdbc.Driver
    hikari:
      maximum-pool-size:  200
      max-lifetime: 60000

mybatis:
  mapper-locations: classpath:/mapper/*.xml
  type-aliases-package: com.taurus.diginto.crud.model

记得账号密码数据库,以及包地址改成自己的

3 generatorConfig.xml 粘走(不要自己敲)


 
<generatorConfiguration>
    
    
    
    <context id="default" targetRuntime="MyBatis3">
 
        
        <commentGenerator>
            <property name="suppressDate" value="true" />
            
            <property name="suppressAllComments" value="true" />
        commentGenerator>
 
        
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/ajyl_medical_model?serverTimezone=UTC"
                        userId="root"
                        password="123456">
        jdbcConnection>
 
        
        <javaTypeResolver>
            
            
            
            <property name="forceBigDecimals" value="false" />
        javaTypeResolver>
 
        
        
        <javaModelGenerator targetPackage="com.ajyl.modules.asset.entity"
                            targetProject="src/main/java">
            
            <property name="enableSubPackages" value="false" />
            
            <property name="constructorBased" value="true" />
            
            <property name="trimStrings" value="true" />
            
            <property name="immutable" value="false" />
        javaModelGenerator>
 
        
        <sqlMapGenerator targetPackage="mapper"
                         targetProject="src/main/resource">
            
            <property name="enableSubPackages" value="false" />
        sqlMapGenerator>
 
        
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.ajyl.modules.asset.dao" targetProject="src/main/java">
            
            <property name="enableSubPackages" value="false" />
        javaClientGenerator>
 

        
        <table tableName="asset_product_feedback" domainObjectName="AssetProductFeedback"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">
             
        <generatedKey column="id" sqlStatement="Mysql" identity="true"/>
        table>
    context>
generatorConfiguration>

这个generatorConfig.xml算是注释详尽的很了,所以不要手敲啊,因为没有提示,注定会敲错,直接粘过来,根据注释看一遍就好了

注意:有一些地方需要修改成自己项目的包地址,哪里需要改成自己的项目包地址注释上都已经标出

4 最后 generator

IDEA最右侧的Maven工具栏, Plugins -> mybatis-generator -> mybatis-generator:generate(双击它)

如果一切都很顺利, 会在你对应的包下生成,实体类,一个没有加类注解的Mapper以及对应的xml文件

最后请大家通过这个mapper测一下你配置的数据库是否OK;

2 最简单-点点点

Free MyBatis plugin插件在Idea中生成代码

前题必备:首先请确认你的IDEA已经装好插件:Free Mybatis plugin

点点点其实就很简单了,上面我们说IDEA最右侧的Maven工具栏, 很多人都在使用这个Maven工具栏,但是对与其相邻的Database却视而不见;

这里和大家说一下这个工具栏有啥神奇之处

如果你没用过这个工具栏,点开它其实是空白一片的,当你点开+按钮,光标指向Data Source的时候就会不由得惊呼,卧槽,真叼,集成了N多数据库,向我这种只使用MySQL的足矣~~~
crud有啥意思,快来用代码生成器偷懒吧_第1张图片

连接数据库
crud有啥意思,快来用代码生成器偷懒吧_第2张图片

连接数据库的方式和Navicat一样一样的

代码生成

连接上数据库之后,就是下面这个样子
crud有啥意思,快来用代码生成器偷懒吧_第3张图片

我们选中lol_hero这个表,右键之
crud有啥意思,快来用代码生成器偷懒吧_第4张图片
crud有啥意思,快来用代码生成器偷懒吧_第5张图片
点击OK, lol_hero表生成的domain,mapper,以及SQL文件就会在对应的包下产生

最后请大家通过这个mapper测一下你配置的数据库是否OK;

3 tk升级写写写

tk.Mapper省略了简单的SQL

不知不觉,如果你觉得看这些最基础的CRUD很烦了,说明你老了~~~
此时相见不如不见,但是该咋整呢? 这个时候我们就可以借助 tk.mapper这个jar包来搞它!

注意事项:

(1) 引入tk依赖包(发现一不小心已经在上面给出了,这里就不重复)

(2) 写写写的generatorConfig.xml需要多一些配置(我建议是直接复制然后整个文件覆盖)




<generatorConfiguration>
    
    

    
    <classPathEntry
            location="D:\job\mvn\repository\mysql\mysql-connector-java\8.0.20\mysql-connector-java-8.0.20.jar"/>

    
    
    <context id="MysqlTables" targetRuntime="MyBatis3Simple" defaultModelType="flat">
        
        <property name="autoDelimitKeywords" value="true"/>
        
        <property name="javaFileEncoding" value="utf-8"/>
        
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>

        
        <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
        
        <property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
        

        
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin" />
        
        <plugin type="tk.mybatis.mapper.generator.MapperPlugin">
            <property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
        plugin>

        




        
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
            <property name="suppressDate" value="true"/> 
        commentGenerator>

        
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/diginto?serverTimezone=GMT%2B8"
                        userId="root"
                        password="Xukai1234!@#$"/>
        
        <javaTypeResolver>
            
            <property name="forceBigDecimals" value="false"/>
        javaTypeResolver>

        
        <javaModelGenerator targetPackage="com.taurus.diginto.crud.model" targetProject="src/main/java">
            <property name="enableSubPackages" value="false"/>
            <property name="trimStrings" value="true"/>
        javaModelGenerator>
        
        <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources/mapper">
            <property name="enableSubPackages" value="false"/>
        sqlMapGenerator>
        
        <javaClientGenerator targetPackage="com.taurus.diginto.crud.mapper" targetProject="src/main/java"
                             type="XMLMAPPER">
            <property name="enableSubPackages" value="false"/>
        javaClientGenerator>
        
        
        
        <table tableName="lol_hero" enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">

            
            <generatedKey column="id" sqlStatement="Mysql" identity="true"/>
        table>
    context>
generatorConfiguration>

和上面的写写写,这里就多了一些插件,比如:集成了lombok,这里给注释掉了,lombok使用起来很方便,但是有些架构师也不建议使用它,这里以后再说吧.

其它的不用变,包记得引用,数据库以及mybatis的配置记得配,生成代码的方式也是一样的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sSxvvyBQ-1589871837812)(C:\Users\ThinkPad\AppData\Roaming\Typora\typora-user-images\1589868609112.png)]

但是生成的mapper和xml你就会发现什么都木有了,xml文件里面只有一个resultMap存在,那我们测试的时候该怎么用呢? 此时我们就需要借助tk.mapper了

代码

    @Test
    void testMapper(){
        LolHero lolHero = lolHeroMapper.selectByPrimaryKey(1);
        System.out.println(lolHero.toString());
    }

上溯这个selectByPrimaryKey就会发现它是tk.mapper的一个接口

我们生成的这个LolHeroMapper其集成了一个Mapper类,这个类其实就是tk包中的类,具体tk.mapper的东西我们也另说

import com.taurus.diginto.crud.model.LolHero;
import tk.mybatis.mapper.common.Mapper;

public interface LolHeroMapper extends Mapper<LolHero> {
}

最后请大家通过这个mapper测一下你配置的数据库是否OK;

你可能感兴趣的:(效率)