eclipse使用插件实现mybatis反向工程

想要生成这种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");
        }
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值