1. 概念
使用mybites需要mapper.xml,mapper.jva和pojo等文件和代码,如果手动编写无疑是一个巨大的工程,使用mybites逆向工具可以帮助我们快速生成这些文件和代码。
2. 基础使用
本文以创建一个user表为例介绍mybites逆向的使用方法
2.1 创建user表
在mysql中创建如下表格:
CREATE TABLE user(
user_id VARCHAR(32) PRIMARY KEY,
user_name VARCHAR(128),
header_url VARCHAR(512),
level INT8,
follower_count BIGINT,
like_count BIGINT,
badge_count BIGINT,
sex VARCHAR(32),
phone_number VARCHAR(32) NOT NULL,
create_time TIMESTAMP,
modify_time TIMESTAMP
);
2.2 导入依赖
在Java项目中的pom.xml文件中导入如下依赖:
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.10</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.1.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.4.1</version>
</dependency>
2.3 配置逆向工程的配置文件generatorConfig.xml
逆向工程的配置文件主要包括5个部分:
- 数据库的连接信息
- 生成pojo实体对象的存储路径
- 生成mapper.xml文件的存储路径
- 生成mapper对应java文件的存储路径
- 数据库表
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<context id="MysqlContext" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/jujindb"
userId="root"
password="root">
</jdbcConnection>
<!-- 对应生成的pojo所在包 -->
<javaModelGenerator targetPackage="com.tsinghualei.juejin" targetProject="model/pojo"/>
<!-- 对应生成的mapper所在目录 -->
<sqlMapGenerator targetPackage="com.tsinghualei.juejin" targetProject="resources/mapper"/>
<!-- 配置mapper对应的java映射 -->
<javaClientGenerator targetPackage="com.tsinghualei.juejin" targetProject="mapper" type="XMLMAPPER"/>
<!-- 数据库表 -->
<table tableName="user"></table>
</context>
</generatorConfiguration>
2.4 编写生成文件的代码
package com.tsinghualei.juejin.mapper;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.api.ProgressCallback;
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 MybitesGenerator {
public static void main(String[] args) throws Exception {
try {
MybitesGenerator generator = new MybitesGenerator();
generator.generator();
} catch (Exception e) {
e.printStackTrace();
}
}
public void generator() throws Exception {
List<String> warnings = new ArrayList<>();
boolean overwrite = true;
//指定 逆向工程配置文件
File configFile = new File("src/main/resources/generatorConfig.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((ProgressCallback)null);
if(warnings.isEmpty()){
System.out.println("DONE!");
}else{
for(int i=0;i<warnings.size();++i){
System.out.println(warnings.get(i));
}
}
}
}
2.5 生成文件
运行2.4的代码即可生成以下文件
3. mybites功能开发
这里简单举例一个使用手机号码来创建一个新用户的功能,来演示mybites的使用方法。
3.1 在application.yml中配置
# 整合mybatis
mybatis:
type-aliases-package: com.tsinghualei.juejin.model.pojo # 所有pojo类所在的包路径
mapper-locations: classpath:mapper/*.xml # mapper映射文件
3.2 controller层
负责调用Service层的接口,当user查询不到时会尝试新建一个user,新建失败返回错误。
package com.tsinghualei.juejin.controller;
import com.tsinghualei.juejin.common.result.GraceJSONResult;
import com.tsinghualei.juejin.model.pojo.User;
import com.tsinghualei.juejin.service.UserService;
import io.swagger.annotations.Api;
import lombok.Value;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@Slf4j
@RestController
@Api(tags = "LoginRegisterContorller")
@RequestMapping("/LoginRegisterContorller")
public class LoginRegisterContorller {
@Autowired
UserService userService;
@ResponseBody
@PostMapping("createUserByMobile")
GraceJSONResult createUserByMobile(@RequestParam String phoneNumber){
userService.createUserByMobile(phoneNumber);
return GraceJSONResult.ok();
}
}
3.3 service层
- 接口:
package com.tsinghualei.juejin.service;
import com.tsinghualei.juejin.model.pojo.User;
import org.springframework.stereotype.Service;
public interface UserService {
/**
* 通过手机号判创建user
*/
void createUserByMobile(String phoneNumber);
}
- 实现类:
package com.tsinghualei.juejin.service.impl;
import com.tsinghualei.juejin.common.util.UUIDUtil;
import com.tsinghualei.juejin.mapper.UserMapper;
import com.tsinghualei.juejin.model.pojo.User;
import com.tsinghualei.juejin.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.UUID;
@Service
public class UserServiceImpl implements UserService {
String headerUrl = "https://img1.baidu.com/it/u=592570905,1313515675&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500";
@Autowired
UserMapper userMapper;
@Override
public void createUserByMobile(String phoneNumber) {
User user = new User();
String uuid = UUIDUtil.getUUID(32);
user.setUserId(uuid);
user.setUserName("user_"+uuid.trim());
user.setCreateTime(new Date());
user.setLevel(0L);
user.setBadgeCount(0L);
user.setFollowerCount(0L);
user.setLikeCount(0L);
user.setModifyTime(new Date());
user.setHeaderUrl(headerUrl);
user.setPhoneNumber(phoneNumber);
user.setSex("null");
userMapper.createUserByMobile(user);
}
}
3.4 mapper层
- 接口
package com.tsinghualei.juejin.mapper;
import com.tsinghualei.juejin.model.pojo.User;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
@Repository
public interface UserMapper {
void createUserByMobile(@Param("user") User user);
}
- xml 在UserMapper.xml中加入以下配置:
<insert id="createUserByMobile" parameterType="com.tsinghualei.juejin.model.pojo.User">
insert into user(user_id, user_name,header_url,
level, follower_count,like_count,
badge_count,sex,phone_number,
create_time,modify_time)
values (#{user.userId}, #{user.userName}, #{user.headerUrl},
#{user.level}, #{user.followerCount}, #{user.likeCount},
#{user.badgeCount}, #{user.sex}, #{user.phoneNumber},
#{user.createTime}, #{user.modifyTime})
</insert>
调用该接口并测试
使用swagger2调用该接口:
数据库中插入成功: