通过Mybatis Generator插件自动生成代码,并与数据库交互

导入数据库驱动依赖包:

  <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>2.1.4</version>
</dependency>

在springboot的配置文件application.yml配置数据库访问路径

spring:
  datasource:
    url: jdbc:mysql://数据库的ip地址:3306/数据库名?characterEncoding=utf8&useUnicode=true&useSSL=false&Timezone=true&serverTimezone=Asia/Shanghai
    username: 数据库的用户名
    password: 数据库的密码
    driver-class-name: com.mysql.cj.jdbc.Driver

springboot的配置文件application.yml配置mybatis

mybatis:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true
  mapper-locations: classpath:mapper/*.xml

通过mybatis插件自动生成代码

  1. 新建一个maven项目,创建MybatisGenerator.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>
        <context id="DB2Tables" targetRuntime="MyBatis3">
            <commentGenerator type="com.bjfu.comment.MyCommentGenerator"><!-- 填写你自己的MyCommentGenerator路径 -->
                <!-- 是否去除自动生成的注释 -->
                <property name="suppressAllComments" value="true"/>
            </commentGenerator>
            <!-- Mysql数据库连接的信息:驱动类、连接地址、用户名、密码 -->
            <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                            connectionURL="jdbc:mysql://localhost:3306/my_test"
                            userId="root"
                            password="123456">
            </jdbcConnection>
    
            <!-- 默认为false,把JDBC DECIMAL 和NUMERIC类型解析为Integer,为true时
            把JDBC DECIMAL 和NUMERIC类型解析为java.math.BigDecimal -->
            <javaTypeResolver>
                <property name="forceBigDecimals" value="false"/>
            </javaTypeResolver>
    
            <!-- targetProject:生成POJO类的位置 D:\work\IntelliJIDEA2018.2.4WorkspaceProject\ForestReservesH\mybatis-generator\src\main\java-->
            <javaModelGenerator targetPackage="com.bjfu.entity"
                                targetProject="D:\code\mybatis_generator\src\main\java">
               <!-- 以上路径信息截止到Java -->
                <!-- enableSubPackages:是否让schema作为包的后缀 -->
                <property name="enableSubPackages" value="false"/>
                <!-- 从数据库返回的值被清理前后的空格 -->
                <property name="trimStrings" value="true"/>
            </javaModelGenerator>
    
            <!-- targetProject:mapper映射文件生成的位置 -->
            <sqlMapGenerator targetPackage="com.bjfu.xml"
                             targetProject="D:\code\mybatis_generator\src\main\java">
                <!-- enableSubPackages:是否让schema作为包的后缀 -->
                <property name="enableSubPackages" value="false"/>
            </sqlMapGenerator>
    
            <!-- targetProject:mapper接口生成的的位置 -->
            <javaClientGenerator type="XMLMAPPER" targetPackage="com.bjfu.mapper"
                                 targetProject="D:\code\mybatis_generator\src\main\java">
                <!-- enableSubPackages:是否让schema作为包的后缀 -->
                <property name="enableSubPackages" value="false"/>
            </javaClientGenerator>
    
            <!-- 指定数据表 -->
    
            <!-- tableName对应数据库中的表名,domainObjectName对应实体类 -->
    
            <table tableName="my_user" domainObjectName="MyUser">
                <generatedKey column="user_id" sqlStatement="MySql" identity="true"/>
            </table>
    
    
            <!-- 有些表的字段需要指定java类型
            <table schema="DB2ADMIN" tableName="ALLTYPES" domainObjectName="Customer" >
              <property name="useActualColumnNames" value="true"/>
              <generatedKey column="ID" sqlStatement="DB2" identity="true" />
              <columnOverride column="DATE_FIELD" property="startDate" />
              <ignoreColumn column="FRED" />
              <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" />
            </table> -->
    
        </context>
    </generatorConfiguration>
    

    注意将数据库链接信息修改成自己指定的数据库,如果MySQL版本为8的话,填写:jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"。

    填写targetProject路径信息时,一定要写到java路径,tableName填写MySQL中的表的名字,注意不要和数据库自带表的名字重合。

  2. 创建MainGeneration类,并设置main方法

    public static void main(String[] args) throws Exception {
            List<String> warnings = new ArrayList<>();
            boolean overwrite = true;
            // 就这一句需要注意,XML的名称别写错,别的都是固定格式
            File configFile = new File("D:/code/mybatis_generator/src/MybatisGenerator.xml");
            ConfigurationParser cp = new ConfigurationParser(warnings);
            Configuration config = cp.parseConfiguration(configFile);
            DefaultShellCallback callback = new DefaultShellCallback(overwrite);
            MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
            myBatisGenerator.generate(null);
            System.out.println("---OVER----");
            System.out.println("覆盖之前,记得别把带有JSR校验注解的实体类覆盖掉");
            System.out.println("1)记得修改插入主键回显");
            System.out.println("2)记得看readme");
        }
    

  3. 创建com.bjfu.comment.MyCommentGeneration.java类

    public class MyCommentGenerator extends DefaultCommentGenerator {
        private Properties properties;
        private Properties systemPro;
        private boolean suppressDate;
        private boolean suppressAllComments;
        private String currentDateStr;
    
        public MyCommentGenerator() {
            super();
            properties = new Properties();
            systemPro = System.getProperties();
            suppressDate = false;
            suppressAllComments = false;
            currentDateStr = (new SimpleDateFormat("yyyy-MM-dd")).format(new Date());
        }
    
    
        @Override
        public void addFieldComment(Field field, IntrospectedTable introspectedTable,
                                    IntrospectedColumn introspectedColumn) {
            if (suppressAllComments) {
                return;
            }
            if (!StringUtils.isNullOrEmpty(introspectedColumn.getRemarks())) {
                StringBuilder sb = new StringBuilder();
                field.addJavaDocLine("/**");
                sb.append(" * ");
                sb.append(introspectedColumn.getRemarks());
                field.addJavaDocLine(sb.toString().replace("\n", " "));
                field.addJavaDocLine(" */");
            }
    
        }
    
        @Override
        public void addModelClassComment(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
            super.addModelClassComment(topLevelClass, introspectedTable);
            /**
             * @Data
             *     @Builder
             *     @NoArgsConstructor
             *     @AllArgsConstructor
             */
            topLevelClass.addAnnotation("@Data");
            topLevelClass.addAnnotation("@Builder");
            topLevelClass.addAnnotation("@NoArgsConstructor");
            topLevelClass.addAnnotation("@AllArgsConstructor");
            topLevelClass.addAnnotation("@Accessors(chain = true)");
    
            topLevelClass.addImportedType("lombok.AllArgsConstructor");
            topLevelClass.addImportedType("lombok.Builder");
            topLevelClass.addImportedType("lombok.Data");
            topLevelClass.addImportedType("lombok.NoArgsConstructor");
            topLevelClass.addImportedType("lombok.experimental.Accessors");
        }
    
        @Override
        public void addFieldComment(Field field, IntrospectedTable introspectedTable) {
    
        }
    
        @Override
        public void addGeneralMethodComment(Method method, IntrospectedTable introspectedTable) {
    
        }
    
        @Override
        public void addGetterComment(Method method, IntrospectedTable introspectedTable,
                                     IntrospectedColumn introspectedColumn) {
    
        }
    
        @Override
        public void addSetterComment(Method method, IntrospectedTable introspectedTable,
                                     IntrospectedColumn introspectedColumn) {
    
        }
    
        @Override
        public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable, boolean markAsDoNotDelete) {
    
        }
    
        @Override
        public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable) {
    
        }
    }
    

  4. 并在pom.xml文件中配置相关依赖

    <dependencies>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.12</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.29</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.4.6</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
            <dependency>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-core</artifactId>
                <version>1.3.7</version>
            </dependency>
    
            <dependency>
                <groupId>tk.mybatis</groupId>
                <artifactId>mapper</artifactId>
                <version>3.4.4</version>
            </dependency>
        </dependencies>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值