下面是完整攻略,首先我们来讲解一下Mybatis Plus 逆向工程的概念:
什么是Mybatis Plus逆向工程
Mybatis Plus是一个优秀的Mybatis增强工具,Mybatis Plus逆向工程是一种通过数据库表反向生成对应的Mybatis Plus实体、mapper、mapper.xml等代码文件的技术,可以在一定程度上减少程序员的手动开发工作量,在开发大型系统和繁琐重复的CRUD操作时非常实用。
Mybatis Plus逆向工程的使用
使用Mybatis Plus进行逆向工程的步骤分为以下几个:
添加依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.0</version>
</dependency>
配置数据源
在application.yml中添加数据源的配置:
spring:
datasource:
url: jdbc:mysql://localhost:3306/mybatis_plus_demo?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
配置代码生成器
在代码中配置Mybatis Plus逆向工程代码生成器:
/**
* 代码生成器
*/
public class CodeGenerator {
public static void main(String[] args) {
// 1. 全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath + "/src/main/java");
gc.setAuthor("wangshengwei");
gc.setOpen(false);
// 2. 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/mybatis_plus_demo?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("root");
// 3. 包名策略配置
PackageConfig pc = new PackageConfig();
pc.setModuleName(null);
pc.setParent("com.example.demo");
// 4. 配置生成模板
TemplateConfig tc = new TemplateConfig();
tc.setXml(null);
// 5. 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel); // 表名生成策略
strategy.setColumnNaming(NamingStrategy.underline_to_camel); // 字段名生成策略
strategy.setEntityLombokModel(true); // 是否启用lombok模式
strategy.setRestControllerStyle(true); // 是否生成RestController
strategy.setControllerMappingHyphenStyle(true); // 是否启用mapping映射风格
// 6. 代码生成器配置
AutoGenerator mpg = new AutoGenerator();
mpg.setGlobalConfig(gc);
mpg.setDataSource(dsc);
mpg.setPackageInfo(pc);
mpg.setTemplate(tc);
mpg.setStrategy(strategy);
mpg.execute();
}
}
运行代码
运行代码后即可自动生成对应的实体、mapper、mapper.xml等文件,生成的路径为代码所在路径和包名之和,例如示例中PackageName为"com.example.demo",则生成的代码目录为"/src/main/java/com/example/demo"。
示例1
假如我们有一张user表,表结构如下:
CREATE TABLE `user` (
`id` bigint(20) NOT NULL COMMENT '主键',
`name` varchar(20) NOT NULL COMMENT '姓名',
`age` int(11) DEFAULT NULL COMMENT '年龄',
`email` varchar(50) DEFAULT NULL COMMENT '邮箱',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我们可以使用上述步骤生成该表所对应的实体、mapper、mapper.xml等文件,在controller中进行CRUD操作。
示例2
假如我们有一张order表和一张order_detail表,表结构分别如下:
CREATE TABLE `order` (
`id` bigint(20) NOT NULL COMMENT '主键',
`order_no` varchar(50) NOT NULL COMMENT '订单号',
`user_id` bigint(20) NOT NULL COMMENT '用户id',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_time` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `order_detail` (
`id` bigint(20) NOT NULL COMMENT '主键',
`order_id` bigint(20) NOT NULL COMMENT '订单id',
`goods_name` varchar(50) NOT NULL COMMENT '商品名称',
`goods_price` decimal(10,2) NOT NULL COMMENT '商品价格',
`goods_num` int(11) NOT NULL COMMENT '商品数量',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我们需要将order和order_detail两张表关联起来,可以按照以下步骤进行:
配置实体
在Order类中添加List
@Data
public class Order {
private Long id;
private String orderNo;
private Long userId;
private Date createTime;
private Date updateTime;
private List<OrderDetail> orderDetailList; // 添加OrderDetail列表
}
在OrderDetail类中添加Order属性:
@Data
public class OrderDetail {
private Long id;
private Long orderId;
private String goodsName;
private BigDecimal goodsPrice;
private Integer goodsNum;
private Order order; // 添加Order属性
}
配置mapper
在OrderMapper.xml中添加关联查询的SQL语句:
<select id="selectOrderDetailList" resultMap="OrderDetailResultMap">
SELECT
od.id,
od.order_id,
od.goods_name,
od.goods_price,
od.goods_num
FROM
order_detail od
WHERE
od.order_id = #{orderId}
</select>
在OrderDetailMapper.xml中添加关联查询的SQL语句:
<select id="selectOrderAndOrderDetailById" resultMap="OrderAndOrderDetailResultMap">
SELECT
o.id,
o.order_no,
o.user_id,
o.create_time,
o.update_time,
od.id AS 'order_detail_id',
od.goods_name,
od.goods_price,
od.goods_num
FROM
`order` o
LEFT JOIN order_detail od ON o.id = od.order_id
WHERE
o.id = #{id}
</select>
配置controller
在controller中进行CRUD操作时,可以通过OrderDetailMapper.selectOrderDetailList(order.getId())关联查询OrderDetail信息,并将结果列表赋值给Order的orderDetailList属性。
在查询OrderDetail的同时查询出对应的Order信息时,可以通过OrderDetailMapper.selectOrderAndOrderDetailById(id)一次性查询出Order和OrderDetail信息,并使用Mybatis Plus的ResultMap逐层映射,最终将OrderDetail的Order属性和Order关联起来。
总结
通过Mybatis Plus逆向工程,可以大大提高程序员们的开发效率,降低人为失误的概率,减少重复工作,是一种非常实用的技术。通过本文的介绍,相信大家已经对Mybatis Plus逆向工程有了更深入的了解和掌握。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Mybatis Plus 逆向工程介绍 - Python技术站