想要生成这种xml格式的sql语句,看这边:
https://blog.csdn.net/clown__drop/article/details/112643514
因为Mybatis Dynamic SQL有点难学哦,建议点开上面的连接。我学不动了…
一 需要下载ecplise里面的插件
点击Help >> Ecplise Markplace >> 在Search的Find里面 搜索 Mybatis >> 点击install >> 点击accept同意 >> xxx anyways >> restart >> 重新启动,安装成功
二 在项目新建一个xml文件
右键项目 >> 新建一个other >> 点击mybatis generator configuration file >> next >> 自定义xml文件 >> 如下
<?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>
1.这里是选择自己的mysql-connector-java-5.1.39-bin.jar的本地地址
<classPathEntry
location="E:\ecplise\workspace\spring_boot_test\mysql-connector-java-5.1.39-bin.jar" />
<context id="context1">
<!-- 生成数据库的注释信息,并且禁止在 注释中生成日期 -->
<commentGenerator>
<property name="suppressDate" value="true"/>
<property name="addRemarkComments" value="true"/>
</commentGenerator>
2.自己配置数据库的url,驱动,用户名,密码。
!!! 高级的mysql驱动是com.mysql.jc.jdbc.Driver !!!
<!-- 数据库连接信息 -->
<jdbcConnection
connectionURL="jdbc:mysql://localhost:3306/springboot_redis?serverTimezone=GMT"
driverClass="com.mysql.jdbc.Driver" password="123456" userId="root" />
3.实体类的地址,文件放置地址一开始我是'src\main\java',可能这是我启动起来没有反应的原因,我在前面添加了我的工程名字'springboot_redis'
<!-- 生成实体类地址 -->
<!-- targetPackage 指定 model 类的包名, targetProject指定生成的 model 放在 eclipse 的哪个工程下面 -->
<javaModelGenerator
targetPackage="suwaaaa.author.springboot_redis.damain"
targetProject="springboot_redis\src\main\java" />
4.生成dao类接口的地址,同上类似
<!-- 生成DAO地址 -->
<javaClientGenerator
targetPackage="suwaaaa.author.springboot_redis.dao"
targetProject="springboot_redis\src\main\java" type="XMLMAPPER" />
<!-- 在targetPackage的基础上,在package下生成$schema包,默认为false -->
<!-- <property name="enableSubPackages" value="false"/> -->
5.schema是自己的数据库名字,user是对应的表,剩下的是属性(数据库的和实体类的一一对应)
<!-- 数据库表名及对应的 Java 模型类名 -->
<table schema="springboot_redis" tableName="user">
<columnOverride column="AGE" property="age" />
<columnOverride column="NAME" property="name" />
<columnOverride column="ADDRESS" property="address" />
<columnOverride column="PHONE" property="phone" />
<columnOverride column="MAIL" property="mail" />
<columnOverride column="VIP" property="vip" />
<columnOverride column="USERID" property="userId" />
<!-- 忽略列,不生成bean 字段 -->
<!-- <ignoreColumn column="passcode" /> -->
<ignoreColumn column="creat_time" />
</table>
</context>
</generatorConfiguration>
三 启动运行
(关于反向工程,有java,maven,和插件三种方式实现,我这里是第三种)------------生成的为Mybatis动态sql,鼎鼎大名为 MyBatis Dynamic SQL
同样是右键点击运行刚刚编写的自动生成的xml文件,run as >> run mybatis generator >> 可以看见生成了support和mapper文件
四 可能会出现的报错
ecplise 可能会对org.mybatis.dynamic 这个包报错,原因是没有导入对应的maven依赖
参照:
MyBatis Dynamic SQL Dependency Information
https://mybatis.org/mybatis-dynamic-sql/dependency-info.html
<dependency>
<groupId>org.mybatis.dynamic-sql</groupId>
<artifactId>mybatis-dynamic-sql</artifactId>
<version>1.2.1</version>
</dependency>
附上版本 :
jdk 15
spring boot 2.4.1
maven 3.6.3
我的Github:https://github.com/suwaaaa/springboot_redis.git
附上user实体类:
/*#使用lombok的@data 自动生成的getter,setter,tostring等等
* private int userId;
*
* private String address;
*
* @JsonInclude(Include.NON_NULL)
* private Object phone;
*
* private String mail;
*
* @JsonInclude(Include.NON_NULL)
* private String name;
*
* private String age;
*
* private boolean vip;
*
* @JsonProperty("passcode")
* @JsonIgnore private
* String password;
*
* @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss", locale = "zh", timezone =
* "GMT+8") private String creat_time;
*/
usermapper:
package suwaaaa.author.springboot_redis.dao;
import static org.mybatis.dynamic.sql.SqlBuilder.*;
import static suwaaaa.author.springboot_redis.dao.UserDynamicSqlSupport.*;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
import javax.annotation.Generated;
import org.apache.ibatis.annotations.DeleteProvider;
import org.apache.ibatis.annotations.InsertProvider;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.ResultMap;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.annotations.UpdateProvider;
import org.apache.ibatis.type.JdbcType;
import org.mybatis.dynamic.sql.BasicColumn;
import org.mybatis.dynamic.sql.delete.DeleteDSLCompleter;
import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider;
import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider;
import org.mybatis.dynamic.sql.insert.render.MultiRowInsertStatementProvider;
import org.mybatis.dynamic.sql.select.CountDSLCompleter;
import org.mybatis.dynamic.sql.select.SelectDSLCompleter;
import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
import org.mybatis.dynamic.sql.update.UpdateDSL;
import org.mybatis.dynamic.sql.update.UpdateDSLCompleter;
import org.mybatis.dynamic.sql.update.UpdateModel;
import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider;
import org.mybatis.dynamic.sql.util.SqlProviderAdapter;
import org.mybatis.dynamic.sql.util.mybatis3.MyBatis3Utils;
import suwaaaa.author.springboot_redis.damain.User;
@Mapper
public interface UserMapper {
@Generated(value="org.mybatis.generator.api.MyBatisGenerator", comments="Source Table: user")
BasicColumn[] selectList = BasicColumn.columnList(userId, age, name, address, passcode, phone, mail, vip);
@Generated(value="org.mybatis.generator.api.MyBatisGenerator", comments="Source Table: user")
@SelectProvider(type=SqlProviderAdapter.class, method="select")
long count(SelectStatementProvider selectStatement);
@Generated(value="org.mybatis.generator.api.MyBatisGenerator", comments="Source Table: user")
@DeleteProvider(type=SqlProviderAdapter.class, method="delete")
int delete(DeleteStatementProvider deleteStatement);
@Generated(value="org.mybatis.generator.api.MyBatisGenerator", comments="Source Table: user")
@InsertProvider(type=SqlProviderAdapter.class, method="insert")
int insert(InsertStatementProvider<User> insertStatement);
@Generated(value="org.mybatis.generator.api.MyBatisGenerator", comments="Source Table: user")
@InsertProvider(type=SqlProviderAdapter.class, method="insertMultiple")
int insertMultiple(MultiRowInsertStatementProvider<User> multipleInsertStatement);
@Generated(value="org.mybatis.generator.api.MyBatisGenerator", comments="Source Table: user")
@SelectProvider(type=SqlProviderAdapter.class, method="select")
@ResultMap("UserResult")
Optional<User> selectOne(SelectStatementProvider selectStatement);
@Generated(value="org.mybatis.generator.api.MyBatisGenerator", comments="Source Table: user")
@SelectProvider(type=SqlProviderAdapter.class, method="select")
@Results(id="UserResult", value = {
@Result(column="userId", property="userId", jdbcType=JdbcType.INTEGER, id=true),
@Result(column="age", property="age", jdbcType=JdbcType.INTEGER),
@Result(column="name", property="name", jdbcType=JdbcType.CHAR),
@Result(column="address", property="address", jdbcType=JdbcType.VARCHAR),
@Result(column="passcode", property="passcode", jdbcType=JdbcType.VARCHAR),
@Result(column="phone", property="phone", jdbcType=JdbcType.INTEGER),
@Result(column="mail", property="mail", jdbcType=JdbcType.VARCHAR),
@Result(column="vip", property="vip", jdbcType=JdbcType.BIT)
})
List<User> selectMany(SelectStatementProvider selectStatement);
@Generated(value="org.mybatis.generator.api.MyBatisGenerator", comments="Source Table: user")
@UpdateProvider(type=SqlProviderAdapter.class, method="update")
int update(UpdateStatementProvider updateStatement);
@Generated(value="org.mybatis.generator.api.MyBatisGenerator", comments="Source Table: user")
default long count(CountDSLCompleter completer) {
return MyBatis3Utils.countFrom(this::count, user, completer);
}
@Generated(value="org.mybatis.generator.api.MyBatisGenerator", comments="Source Table: user")
default int delete(DeleteDSLCompleter completer) {
return MyBatis3Utils.deleteFrom(this::delete, user, completer);
}
@Generated(value="org.mybatis.generator.api.MyBatisGenerator", comments="Source Table: user")
default int deleteByPrimaryKey(Integer userId_) {
return delete(c ->
c.where(userId, isEqualTo(userId_))
);
}
@Generated(value="org.mybatis.generator.api.MyBatisGenerator", comments="Source Table: user")
default int insert(User record) {
return MyBatis3Utils.insert(this::insert, record, user, c ->
c.map(userId).toProperty("userId")
.map(age).toProperty("age")
.map(name).toProperty("name")
.map(address).toProperty("address")
.map(passcode).toProperty("passcode")
.map(phone).toProperty("phone")
.map(mail).toProperty("mail")
.map(vip).toProperty("vip")
);
}
@Generated(value="org.mybatis.generator.api.MyBatisGenerator", comments="Source Table: user")
default int insertMultiple(Collection<User> records) {
return MyBatis3Utils.insertMultiple(this::insertMultiple, records, user, c ->
c.map(userId).toProperty("userId")
.map(age).toProperty("age")
.map(name).toProperty("name")
.map(address).toProperty("address")
.map(passcode).toProperty("passcode")
.map(phone).toProperty("phone")
.map(mail).toProperty("mail")
.map(vip).toProperty("vip")
);
}
@Generated(value="org.mybatis.generator.api.MyBatisGenerator", comments="Source Table: user")
default int insertSelective(User record) {
return MyBatis3Utils.insert(this::insert, record, user, c ->
c.map(userId).toPropertyWhenPresent("userId", record::getUserId)
.map(age).toPropertyWhenPresent("age", record::getAge)
.map(name).toPropertyWhenPresent("name", record::getName)
.map(address).toPropertyWhenPresent("address", record::getAddress)
.map(passcode).toPropertyWhenPresent("passcode", record::getPasscode)
.map(phone).toPropertyWhenPresent("phone", record::getPhone)
.map(mail).toPropertyWhenPresent("mail", record::getMail)
.map(vip).toPropertyWhenPresent("vip", record::getVip)
);
}
@Generated(value="org.mybatis.generator.api.MyBatisGenerator", comments="Source Table: user")
default Optional<User> selectOne(SelectDSLCompleter completer) {
return MyBatis3Utils.selectOne(this::selectOne, selectList, user, completer);
}
@Generated(value="org.mybatis.generator.api.MyBatisGenerator", comments="Source Table: user")
default List<User> select(SelectDSLCompleter completer) {
return MyBatis3Utils.selectList(this::selectMany, selectList, user, completer);
}
@Generated(value="org.mybatis.generator.api.MyBatisGenerator", comments="Source Table: user")
default List<User> selectDistinct(SelectDSLCompleter completer) {
return MyBatis3Utils.selectDistinct(this::selectMany, selectList, user, completer);
}
@Generated(value="org.mybatis.generator.api.MyBatisGenerator", comments="Source Table: user")
default Optional<User> selectByPrimaryKey(Integer userId_) {
return selectOne(c ->
c.where(userId, isEqualTo(userId_))
);
}
@Generated(value="org.mybatis.generator.api.MyBatisGenerator", comments="Source Table: user")
default int update(UpdateDSLCompleter completer) {
return MyBatis3Utils.update(this::update, user, completer);
}
@Generated(value="org.mybatis.generator.api.MyBatisGenerator", comments="Source Table: user")
static UpdateDSL<UpdateModel> updateAllColumns(User record, UpdateDSL<UpdateModel> dsl) {
return dsl.set(userId).equalTo(record::getUserId)
.set(age).equalTo(record::getAge)
.set(name).equalTo(record::getName)
.set(address).equalTo(record::getAddress)
.set(passcode).equalTo(record::getPasscode)
.set(phone).equalTo(record::getPhone)
.set(mail).equalTo(record::getMail)
.set(vip).equalTo(record::getVip);
}
@Generated(value="org.mybatis.generator.api.MyBatisGenerator", comments="Source Table: user")
static UpdateDSL<UpdateModel> updateSelectiveColumns(User record, UpdateDSL<UpdateModel> dsl) {
return dsl.set(userId).equalToWhenPresent(record::getUserId)
.set(age).equalToWhenPresent(record::getAge)
.set(name).equalToWhenPresent(record::getName)
.set(address).equalToWhenPresent(record::getAddress)
.set(passcode).equalToWhenPresent(record::getPasscode)
.set(phone).equalToWhenPresent(record::getPhone)
.set(mail).equalToWhenPresent(record::getMail)
.set(vip).equalToWhenPresent(record::getVip);
}
@Generated(value="org.mybatis.generator.api.MyBatisGenerator", comments="Source Table: user")
default int updateByPrimaryKey(User record) {
return update(c ->
c.set(age).equalTo(record::getAge)
.set(name).equalTo(record::getName)
.set(address).equalTo(record::getAddress)
.set(passcode).equalTo(record::getPasscode)
.set(phone).equalTo(record::getPhone)
.set(mail).equalTo(record::getMail)
.set(vip).equalTo(record::getVip)
.where(userId, isEqualTo(record::getUserId))
);
}
@Generated(value="org.mybatis.generator.api.MyBatisGenerator", comments="Source Table: user")
default int updateByPrimaryKeySelective(User record) {
return update(c ->
c.set(age).equalToWhenPresent(record::getAge)
.set(name).equalToWhenPresent(record::getName)
.set(address).equalToWhenPresent(record::getAddress)
.set(passcode).equalToWhenPresent(record::getPasscode)
.set(phone).equalToWhenPresent(record::getPhone)
.set(mail).equalToWhenPresent(record::getMail)
.set(vip).equalToWhenPresent(record::getVip)
.where(userId, isEqualTo(record::getUserId))
);
}
}
UserDynamicSqlSupport:
package suwaaaa.author.springboot_redis.dao;
import java.sql.JDBCType;
import javax.annotation.Generated;
import org.mybatis.dynamic.sql.SqlColumn;
import org.mybatis.dynamic.sql.SqlTable;
public final class UserDynamicSqlSupport {
@Generated(value="org.mybatis.generator.api.MyBatisGenerator", comments="Source Table: user")
public static final User user = new User();
/**
* Database Column Remarks:
* �û�ID
*/
@Generated(value="org.mybatis.generator.api.MyBatisGenerator", comments="Source field: user.userId")
public static final SqlColumn<Integer> userId = user.userId;
/**
* Database Column Remarks:
* �û�����
*/
@Generated(value="org.mybatis.generator.api.MyBatisGenerator", comments="Source field: user.age")
public static final SqlColumn<Integer> age = user.age;
/**
* Database Column Remarks:
* �û�����
*/
@Generated(value="org.mybatis.generator.api.MyBatisGenerator", comments="Source field: user.name")
public static final SqlColumn<String> name = user.name;
/**
* Database Column Remarks:
* �û���ַ
*/
@Generated(value="org.mybatis.generator.api.MyBatisGenerator", comments="Source field: user.address")
public static final SqlColumn<String> address = user.address;
/**
* Database Column Remarks:
* �û�����
*/
@Generated(value="org.mybatis.generator.api.MyBatisGenerator", comments="Source field: user.passcode")
public static final SqlColumn<String> passcode = user.passcode;
/**
* Database Column Remarks:
* �û��ֻ���
*/
@Generated(value="org.mybatis.generator.api.MyBatisGenerator", comments="Source field: user.phone")
public static final SqlColumn<Integer> phone = user.phone;
/**
* Database Column Remarks:
* �û�����
*/
@Generated(value="org.mybatis.generator.api.MyBatisGenerator", comments="Source field: user.mail")
public static final SqlColumn<String> mail = user.mail;
/**
* Database Column Remarks:
* �û�vip
*/
@Generated(value="org.mybatis.generator.api.MyBatisGenerator", comments="Source field: user.vip")
public static final SqlColumn<Boolean> vip = user.vip;
@Generated(value="org.mybatis.generator.api.MyBatisGenerator", comments="Source Table: user")
public static final class User extends SqlTable {
public final SqlColumn<Integer> userId = column("userId", JDBCType.INTEGER);
public final SqlColumn<Integer> age = column("age", JDBCType.INTEGER);
public final SqlColumn<String> name = column("name", JDBCType.CHAR);
public final SqlColumn<String> address = column("address", JDBCType.VARCHAR);
public final SqlColumn<String> passcode = column("passcode", JDBCType.VARCHAR);
public final SqlColumn<Integer> phone = column("phone", JDBCType.INTEGER);
public final SqlColumn<String> mail = column("mail", JDBCType.VARCHAR);
public final SqlColumn<Boolean> vip = column("vip", JDBCType.BIT);
public User() {
super("user");
}
}
}