栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SprintBoot整合MyBatis+MyBastis generator

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SprintBoot整合MyBatis+MyBastis generator

文章目录

  • 前言
  • 一、pom.xml添加Maven依赖
  • 二、application.yaml修改数据库配置
  • 三、resources目录下添加generator.properties、generatorConfig.xml
  • 四、添加运行生成的java代码
  • 五、数据库多表操作
  • 六、添加Mapper对应路径
  • 七、数据库






前言

开发过程中的笔记





一、pom.xml添加Maven依赖
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            2.2.0
        
        
        
            org.mybatis.generator
            mybatis-generator-core
            1.3.3
        
        
            mysql
            mysql-connector-java
            runtime
        
        
            org.projectlombok
            lombok
            true
        



二、application.yaml修改数据库配置

其中“trade”为数据库名,username为数据库账号,password为数据库密码

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/trade?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
三、resources目录下添加generator.properties、generatorConfig.xml

generator.properties内容如下

jdbc.driverClass=com.mysql.cj.jdbc.Driver
jdbc.connectionURL=jdbc:mysql://localhost:3306/trade?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
jdbc.userId=root
jdbc.password=123456

 generatorConfig.xml内容如下,其中包的路径名称不一样自行修改和根据不同Table表生成,需自行修改

标签里的内容,例

commentGenerator、javaModelGenerator、sqlMapGenerator、javaClientGenerator、table根据实际修改




    
    
        
        
        
        
        
        
        
        
        
            
            
            
            
        
        
        
            
            
        
        
        
        
        
        
        
        
        
四、添加运行生成的java代码

内容如下

package com.afc.trade.mbg;

import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.dom.java.CompilationUnit;
import org.mybatis.generator.api.dom.java.Field;
import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
import org.mybatis.generator.internal.DefaultCommentGenerator;
import org.mybatis.generator.internal.util.StringUtility;

import java.util.Properties;


public class CommentGenerator extends DefaultCommentGenerator {
    private boolean addRemarkComments = false;
    private static final String EXAMPLE_SUFFIX="Example";
    private static final String MAPPER_SUFFIX="Mapper";
    private static final String API_MODEL_PROPERTY_FULL_CLASS_NAME="io.swagger.annotations.ApiModelProperty";

    
    @Override
    public void addConfigurationProperties(Properties properties) {
        super.addConfigurationProperties(properties);
        this.addRemarkComments = StringUtility.isTrue(properties.getProperty("addRemarkComments"));
    }

    
    @Override
    public void addFieldComment(Field field, IntrospectedTable introspectedTable,
                                IntrospectedColumn introspectedColumn) {
        String remarks = introspectedColumn.getRemarks();
        //根据参数和备注信息判断是否添加备注信息
        if(addRemarkComments&&StringUtility.stringHasValue(remarks)){
//            addFieldJavaDoc(field, remarks);
            //数据库中特殊字符需要转义
            if(remarks.contains(""")){
                remarks = remarks.replace(""","'");
            }
            //给model的字段添加swagger注解
            field.addJavaDocLine("@ApiModelProperty(value = ""+remarks+"")");
        }
    }

    
    private void addFieldJavaDoc(Field field, String remarks) {
        //文档注释开始
        field.addJavaDocLine("");
    }

    @Override
    public void addJavaFileComment(CompilationUnit compilationUnit) {
        super.addJavaFileComment(compilationUnit);
        //只在model中添加swagger注解类的导入
        if(!compilationUnit.getType().getFullyQualifiedName().contains(MAPPER_SUFFIX)&&!compilationUnit.getType().getFullyQualifiedName().contains(EXAMPLE_SUFFIX)){
            compilationUnit.addimportedType(new FullyQualifiedJavaType(API_MODEL_PROPERTY_FULL_CLASS_NAME));
        }
    }
}

package com.afc.trade.mbg;

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;


public class Generator {
    public static void main(String[] args) throws Exception {
        //MBG 执行过程中的警告信息
        List warnings = new ArrayList();
        //当生成的代码重复时,覆盖原代码
        boolean overwrite = true;
        //读取我们的 MBG 配置文件
        InputStream is = Generator.class.getResourceAsStream("/generatorConfig.xml");
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(is);
        is.close();

        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        //创建 MBG
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        //执行生成代码
        myBatisGenerator.generate(null);
        //输出警告信息
        for (String warning : warnings) {
            System.out.println(warning);
        }
    }
}

执行Generator

运行成功后即生成如下文件

 

 通过生成的Mapper即可实现简单的单表操作,另外多表操作则需要自定义Mapper并且书写SQL语句

五、数据库多表操作

一对多的例子

自定义DoTradeOrder,相当于model

package com.afc.trade.domain;

import com.afc.trade.mbg.model.TradeNotes;
import com.afc.trade.mbg.model.TradeOrder;
import lombok.Data;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;

import java.util.List;

@Data
@Repository
public class DoTradeOrder extends TradeOrder {
    private List tradeNotesList;
}

继承于TradeOrder

package com.afc.trade.mbg.model;

import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.util.Date;

public class TradeOrder implements Serializable {
    private Integer id;

    private Date time;

    private Integer type;

    private Integer total;

    private Integer pages;

    private static final long serialVersionUID = 1L;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Date getTime() {
        return time;
    }

    public void setTime(Date time) {
        this.time = time;
    }

    public Integer getType() {
        return type;
    }

    public void setType(Integer type) {
        this.type = type;
    }

    public Integer getTotal() {
        return total;
    }

    public void setTotal(Integer total) {
        this.total = total;
    }

    public Integer getPages() {
        return pages;
    }

    public void setPages(Integer pages) {
        this.pages = pages;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append(getClass().getSimpleName());
        sb.append(" [");
        sb.append("Hash = ").append(hashCode());
        sb.append(", id=").append(id);
        sb.append(", time=").append(time);
        sb.append(", type=").append(type);
        sb.append(", total=").append(total);
        sb.append(", pages=").append(pages);
        sb.append(", serialVersionUID=").append(serialVersionUID);
        sb.append("]");
        return sb.toString();
    }
}

 创建自定义的Mapper

package com.afc.trade.dao;

import com.afc.trade.domain.DoTradeOrder;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

@Mapper
public interface TradeOrderDao {
    DoTradeOrder getDoTradeOrderById(@Param("id") Long id);
}

 创建对应的映射xml

 注意根据实际修改namespace、extends等等




    
        
        
    
    

至此,完成自定义关联类的生成,即TradeOrder对应列表tradeNoteList 关联起来了

六、添加Mapper对应路径

@MapperScan({"com.afc.trade.mbg.mapper","com.afc.trade.dao"})
package com.afc.trade.config;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;


@Configuration
@MapperScan({"com.afc.trade.mbg.mapper","com.afc.trade.dao"})
public class MyBatisConfig {
}

 

mybatis:
  mapper-locations:
    - classpath:daomapper

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for trade_order
-- ----------------------------
DROP TABLE IF EXISTS `trade_order`;
CREATE TABLE `trade_order`  (
  `id` int NOT NULL AUTO_INCREMENT,
  `Time` datetime NULL DEFAULT NULL,
  `Type` int NULL DEFAULT NULL,
  `Total` int NULL DEFAULT NULL,
  `Pages` int NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '交易订单' ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Records of trade_order
-- ----------------------------
INSERT INTO `trade_order` VALUES (1, '2021-11-01 19:16:52', 0, 5700, 9);
INSERT INTO `trade_order` VALUES (2, '2021-11-01 21:20:12', 0, 600, 2);
INSERT INTO `trade_order` VALUES (3, '3921-12-02 00:00:00', 0, 2000, 4);
INSERT INTO `trade_order` VALUES (9, '2021-11-01 13:20:12', 0, 300, 3);

SET FOREIGN_KEY_CHECKS = 1;

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for trade_notes
-- ----------------------------
DROP TABLE IF EXISTS `trade_notes`;
CREATE TABLE `trade_notes`  (
  `id` int NOT NULL AUTO_INCREMENT,
  `Trade_id` int NULL DEFAULT NULL,
  `Currency` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `Denomination` int NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 33 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '钞票信息' ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Records of trade_notes
-- ----------------------------
INSERT INTO `trade_notes` VALUES (1, 1, 'HKD', 1000);
INSERT INTO `trade_notes` VALUES (2, 1, 'HKD', 1000);
INSERT INTO `trade_notes` VALUES (3, 1, 'HKD', 1000);
INSERT INTO `trade_notes` VALUES (4, 1, 'HKD', 1000);
INSERT INTO `trade_notes` VALUES (5, 1, 'HKD', 500);
INSERT INTO `trade_notes` VALUES (6, 1, 'HKD', 500);
INSERT INTO `trade_notes` VALUES (7, 1, 'HKD', 500);
INSERT INTO `trade_notes` VALUES (8, 1, 'HKD', 100);
INSERT INTO `trade_notes` VALUES (9, 1, 'HKD', 100);
INSERT INTO `trade_notes` VALUES (10, 2, 'HKD', 100);
INSERT INTO `trade_notes` VALUES (11, 2, 'HKD', 500);
INSERT INTO `trade_notes` VALUES (12, 3, 'HKD', 500);
INSERT INTO `trade_notes` VALUES (13, 3, 'HKD', 500);
INSERT INTO `trade_notes` VALUES (14, 3, 'HKD', 500);
INSERT INTO `trade_notes` VALUES (15, 3, 'HKD', 500);
INSERT INTO `trade_notes` VALUES (31, 9, 'HKD', 100);
INSERT INTO `trade_notes` VALUES (32, 9, 'HKD', 100);
INSERT INTO `trade_notes` VALUES (33, 9, 'HKD', 100);

SET FOREIGN_KEY_CHECKS = 1;

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/444988.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号