今天早上打算做一个spring+springmvc+mybatis的项目,然后感觉这个mapper文件太难写了,最后就想在网上找一个方法能解决不写mapper文件的方法,最后就发现了这个懒人必背法宝:“myabtis逆向工程”的技术,但是全网几乎都是“eclipse 版本生成 MyBatis 逆向工程”,然后自己就搞了一个idea+maven版本的逆向工程,并且全部在gitee开源了的哟,如果你也想做懒人,就使用mybatis的逆向工程吧!(开源地址在文末!)
1、什么是Mybatis逆向工程开发MyBatis逆向工程,就是通过相应插件,自动生成MyBatis数据库连接的一些文件。
表(数据库)→实体类、*Dao.java、*Mapper.xml
以Spring整合MyBatis环境下,MyBatis逆向工程自动生成pojo,mapper,dao的Java类。MyBatis的一个主要的特点就是需要程序员自己编写sql,那么如果表太多的话,难免会很麻烦,所以mybatis官方提供了一个逆向工程,可以针对单表自动生成mybatis执行所需要的代码,一般在开发中,常用的逆向工程方式是通过数据库的表生成代码。可以针对单表自动生成mybatis执行所需要的代码(mapper.java、mapper.xml、pojo…),提高工作效率。
2、Pojo(plian ordinary java object)解释"Plain Old Java Object"就是简单java对象。 Pojo的内在含义是指那些没有从任何类继承、也没有实现任何接口, 更没有被其它框架侵入的java对象。 即有无参构造函数,每个字段都有getter和setter的java类。 其实就是传统开发中的**entity**
- 按我的理解pojo就是entity
mybatis-generator-core ** ** :进入https://mvnrepository.com/搜索 MyBatis ,找到 MyBatis Generator Core
选择版本,其中Maven选择版本最好的原则,就是那个版本用得多久选择那个版本!
我选择的是 MyBatis Generator Core1.3.7这个版本
(2)mybatis及数据库连接所需依赖org.mybatis.generator mybatis-generator-core 1.3.7
com.tjcu MyBatisGeneratorTools 1.0-SNAPSHOT UTF-8 1.7 1.7 junit junit 4.11 test log4j log4j 1.2.17 org.mybatis mybatis 3.5.5 org.mybatis.generator mybatis-generator-core 1.3.7 mysql mysql-connector-java 8.0.27 org.mybatis.generator mybatis-generator-maven-plugin 1.3.7 mysql mysql-connector-java 8.0.27 true true
4、mysql数据库表的创建
- 这是一个《数码商城后台管理系统》的数据库表,三张表
-- 1、管理员表
CREATE TABLE admin(
a_id INT AUTO_INCREMENT PRIMARY KEY,
a_username VARCHAR(20),
a_password VARCHAR(50)
);
-- 查询管理员表
select * from admin;
-- 添加管理员
INSERT INTO admin(a_id,a_username,a_password) VALUES(1,'王恒杰','123456');
-- 2、商品类型表
CREATE TABLE product_type
(
type_id int auto_increment PRIMARY KEY,
type_name varchar(20)
);
-- 查询商品类型
select * from product_type;
-- 添加数据
insert into product_type(type_name) values('手机');
insert into product_type(type_name) values('电脑');
insert into product_type(type_name) values('电视');
-- 3、商品表
create table product_info
(
p_id int auto_increment primary key,
p_name varchar(20),
-- 商品规格/简介
p_content varchar(200),
-- 价格
p_price int,
-- 图片
p_image varchar(200),
-- 数量
p_number int,
type_id int,
p_date date,
FOREIGN KEY(type_id) REFERENCES product_type(type_id)
);
-- 添加商品
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('小米Note2','双曲面 黑色 6GB内存 64GB闪存',2899,'xmNote2.jpg',500,1,NOW());
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('红米Note5A','5.5英寸 粉色 2GB内存 16GB闪存',699,'hmNote5A.jpg',500,1,NOW());
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('红米Note4X','5.5英寸 绿色 4GB内存 64GB闪存',1299,'hmNote4X.jpg',500,1,NOW());
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('红米4','5英寸 金色 3GB内存 32GB闪存',999,'hm4.jpg',500,1,NOW());
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('红米4X','5英寸 黑色 3GB内存 32GB闪存',899,'hm4X.jpg',500,1,NOW());
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('小米平板3','7.9英寸 金色 4GB内存 64GB闪存',1499,'xmPad3.jpg',500,2,NOW());
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('小米Air12','12.5英寸 银色 4GB内存 128GB闪存',3599,'xmAir12.jpg',500,2,NOW());
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('小米Air13','13.3英寸 银色 8GB内存 256GB闪存',4999,'xmAir13.jpg',500,2,NOW());
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('小米Pro','15.6英寸 灰色 16GB内存 256GB闪存',6999,'xmPro.jpg',500,2,NOW());
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('小米电视4','49英寸 原装LG屏 3840×2160 真4K',3299,'xmTV4-49.jpg',500,3,NOW());
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('小米电视4','55英寸 原装三星屏 3840×2160 真4K',3999,'xmTV4-55.jpg',500,3,NOW());
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('小米电视4','65英寸 原装三星屏 3840×2160 真4K',8999,'xmTV4-65.jpg',500,3,NOW());
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('小米电视4A','43英寸 FHD全高清屏 1920*1080',1999,'xmTV4A-43.jpg',500,3,NOW());
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('小米电视4A','49英寸 FHD全高清屏 1920*1080',2299,'xmTV4A-49.jpg',500,3,NOW());
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('小米MIX2','全陶瓷 黑色 8GB内存 128GB闪存',4699,'xmMIX2.jpg',500,1,NOW());
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('小米Note3','全网通 蓝色 6GB内存 64GB闪存',2499,'xmNote3.jpg',500,1,NOW());
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('小米6','玻璃金属 白色 6GB内存 128GB闪存',2899,'xm6.jpg',500,1,NOW());
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('小米MAX2','全金属 金色 4GB内存 64GB闪存',1599,'xmMAX2.jpg',500,1,NOW());
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('小米5X','全金属 金色 4GB内存 64GB闪存',1499,'xm5X.jpg',500,1,NOW());
-- 查询商品
select * from product_info;
-- 删除原始的商品数据
delete from product_info;
数据库名: digitalmall
文档描述: 该项目总共有三张表分别是管理员,商品信息,商品类别
| 表名 | 说明 |
|---|---|
| admin | 管理员表 |
| product_info | 商品信息 |
| product_type | 商品类别 |
- admin``表结构
- product_info 表结构
- product_type 表结构
用来配置指定数据库和表
2、日志文件(log4j.properties)
- 没有什么作用,就是为了控制台打印日志,复制进项目就可以了
log4j.rootLogger=DEBUG, stdout # SqlMap logging configuration... log4j.logger.com.ibatis=DEBUG log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG log4j.logger.com.ibatis.sqlmap.engine.cache.CacheModel=DEBUG log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientImpl=DEBUG log4j.logger.com.ibatis.sqlmap.engine.builder.xml.SqlMapParser=DEBUG log4j.logger.com.ibatis.common.util.StopWatch=DEBUG log4j.logger.java.sql.Connection=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG log4j.logger.java.sql.ResultSet=DEBUG # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n3、添加主程序运行项目:
- 使用主程序运行来生成逆向工程:
package com.tjcu.Tools;
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.File;
import java.util.ArrayList;
import java.util.List;
public class GeneratorSqlmap {
public void generator() throws Exception {
List warnings = new ArrayList();
boolean overwrite = true;
//指定 逆向工程配置文件
File configFile=new File(GeneratorSqlmap.class.getResource("/generatorConfig.xml").getFile());
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);
}
public static void main(String[] args) throws Exception {
try {
GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap();
generatorSqlmap.generator();
} catch (Exception e) {
e.printStackTrace();
}
}
}
三、如何使用Maven运行逆向工程
1、打开运行的配置
2、选择maven
3、填入命令内容
命令是:mybatis-generator:generate -e
4、点击如下运行: 5、异常报错及原因我才点击mybatis-generator:gengerate时他报异常
Exception getting JDBC Driver: com.mysql.cj.jdbc.Driver
我检查了无数遍,代码都没有写错,最后才发现在插件里面没有引入驱动 ,修改后:
然后刷新一下 Maven,再次启动试一试:
6、逆向工程,运行结果如下这样我们就自动成功了dao层,mapper文件和实体类
四、idea版本的《mybatis逆向工程》开源说明 1、开源位置在gittee该idea+Maven实现的Mybatis逆向工程我已经开源在gitee上面了,
需要的可以自取:https://gitee.com/wanghengjie563135/MyBatisGeneratorTools.git
2、下载使用说明书 (1)在gitee点击下载 (2)解压项目文件 (3)mybatisn逆向工程项目目录结构 (4)在idea直接引入项目 (5)修改数据库名,和相关的表名就可以完成逆向工程了!


