文章目录
- 前言
- 一、pom.xml添加Maven依赖
- 二、application.yaml修改数据库配置
- 三、resources目录下添加generator.properties、generatorConfig.xml
- 四、添加运行生成的java代码
- 五、数据库多表操作
- 六、添加Mapper对应路径
- 七、数据库
前言
开发过程中的笔记
一、pom.xml添加Maven依赖
org.mybatis.spring.boot mybatis-spring-boot-starter2.2.0 org.mybatis.generator mybatis-generator-core1.3.3 mysql mysql-connector-javaruntime org.projectlombok lomboktrue
二、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表生成,需自行修改
内容如下
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;
Java相关栏目本月热门文章
- 1【Linux驱动开发】设备树详解(二)设备树语法详解
- 2别跟客户扯细节
- 3Springboot+RabbitMQ+ACK机制(生产方确认(全局、局部)、消费方确认)、知识盲区
- 4【Java】对象处理流(ObjectOutputStream和ObjectInputStream)
- 5【分页】常见两种SpringBoot项目中分页技巧
- 6一文带你搞懂OAuth2.0
- 7我要写整个中文互联网界最牛逼的JVM系列教程 | 「JVM与Java体系架构」章节:虚拟机与Java虚拟机介绍
- 8【Spring Cloud】新闻头条微服务项目:FreeMarker模板引擎实现文章静态页面生成
- 9JavaSE - 封装、static成员和内部类
- 10树莓派mjpg-streamer实现监控及拍照功能调试
- 11用c++写一个蓝屏代码
- 12从JDK8源码中看ArrayList和LinkedList的区别
- 13idea 1、报错java: 找不到符号 符号: 变量 log 2、转换成Maven项目
- 14在openwrt使用C语言增加ubus接口(包含C uci操作)
- 15Spring 解决循环依赖
- 16SpringMVC——基于MVC架构的Spring框架
- 17Andy‘s First Dictionary C++ STL set应用
- 18动态内存管理
- 19我的创作纪念日
- 20Docker自定义镜像-Dockerfile
热门相关搜索
路由器设置
木托盘
宝塔面板
儿童python教程
心情低落
朋友圈
vim
双一流学科
专升本
我的学校
日记学校
西点培训学校
汽修学校
情书
化妆学校
塔沟武校
异形模板
西南大学排名
最精辟人生短句
6步教你追回被骗的钱
南昌大学排名
清朝十二帝
北京印刷学院排名
北方工业大学排名
北京航空航天大学排名
首都经济贸易大学排名
中国传媒大学排名
首都师范大学排名
中国地质大学(北京)排名
北京信息科技大学排名
中央民族大学排名
北京舞蹈学院排名
北京电影学院排名
中国戏曲学院排名
河北政法职业学院排名
河北经贸大学排名
天津中德应用技术大学排名
天津医学高等专科学校排名
天津美术学院排名
天津音乐学院排名
天津工业大学排名
北京工业大学耿丹学院排名
北京警察学院排名
天津科技大学排名
北京邮电大学(宏福校区)排名
北京网络职业学院排名
北京大学医学部排名
河北科技大学排名
河北地质大学排名
河北体育学院排名



