作用:根据数据库中表自动生成实体类,dao层和xml映射文件完成简单的增删改查。
官网:http://mybatis.org/generator/
实例:完成两张表的自动化创建实体类,dao层,mapper层
前置条件
第一张表:tbl_user
SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for tbl_user -- ---------------------------- DROP TABLE IF EXISTS `tbl_user`; CREATE TABLE `tbl_user` ( `id` int(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名', `email` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '邮箱', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 12 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of tbl_user -- ---------------------------- INSERT INTO `tbl_user` VALUES (2, 'zs', 'zs@China.com'); INSERT INTO `tbl_user` VALUES (4, 'ls', 'ls@China.com'); INSERT INTO `tbl_user` VALUES (5, 'ww', 'ww@China.com'); INSERT INTO `tbl_user` VALUES (8, 'll', 'll@China.com'); INSERT INTO `tbl_user` VALUES (9, 'mary', 'mary@China.com'); INSERT INTO `tbl_user` VALUES (10, 'kangkang', 'kk@China.com'); INSERT INTO `tbl_user` VALUES (11, 'kangkang', 'kk@China.com'); INSERT INTO `tbl_user` VALUES (12, 'mary', 'mary@America.com'); SET FOREIGN_KEY_CHECKS = 1;
第二张表:tb_stu
SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for tb_stu -- ---------------------------- DROP TABLE IF EXISTS `tb_stu`; CREATE TABLE `tb_stu` ( `stu_id` int(11) NOT NULL AUTO_INCREMENT, `stu_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `stu_age` int(255) NULL DEFAULT NULL, `stu_sex` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `cid` int(11) NULL DEFAULT NULL, PRIMARY KEY (`stu_id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of tb_stu -- ---------------------------- INSERT INTO `tb_stu` VALUES (1, '张三', 18, '男', 1); INSERT INTO `tb_stu` VALUES (2, '李四', 19, '女', 2); INSERT INTO `tb_stu` VALUES (3, '田七', 20, '男', 3); INSERT INTO `tb_stu` VALUES (5, '赵六', 0, '女', 3); INSERT INTO `tb_stu` VALUES (6, '赵六', 0, '女', 1); INSERT INTO `tb_stu` VALUES (8, '赵六', 0, '女', 2); SET FOREIGN_KEY_CHECKS = 1;
使用步骤
第一步:(1)引入mybatis-generator的依赖jar包。
repMaven.org.mybatis.generator mybatis-generator-core 1.4.0
第二步:配置文件 generator.xml
注意:
第三步:在单元测试中或者在main函数中运行配置文件 生成实体层 dao层 mapper层
@Test
public void test01() throws Exception{
List warnings = new ArrayList();
boolean overwrite = true;
File configFile = new File("generator.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);
}
注意 生成的实体层 dao层 mapper层会有注释 这时候可以使用如下代码消除注释
//抑制注释
整体结构图为:
优化:自动生成的实体类名字和自己的数据库中表中列名一致 在idea中看着非常别扭
比如Student实体类
优化的地方
(1)重新写Student实体类中的属性
通过lombok简化代码书写
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
private Integer stuId;
private String stuName;
private Integer stuAge;
private String stuSex;
private Integer cid;
}
修改后为:
测试自动生成的代码
@Test
public void testStudentFindAll() throws Exception{
Reader rd = Resources.getResourceAsReader("conf.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(rd);
SqlSession session = factory.openSession();
StudentMapper sm = session.getMapper(StudentMapper.class);
int row = sm.deleteByPrimaryKey(8);
System.out.println(row);
session.commit();
session.close();
}
运行图:
其余的代码自行测试即可



