Skip to content

Antadv/generator-x

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

743 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MyBatis Generator (MBG)

Build Status Coverage Status Dependency Status Maven central License

mybatis-generator

本项目对 MBG 源码进行了一些改动, 增加了如下功能:

在默认生成的 xml 中添加了 <sql id="Base_Column_Prefix_List>" 内容,如下

<!-- 默认生成的字段列表 -->
<sql id="Base_Column_List">
id, create_time, update_time ...
</sql>

<!-- 增强后带有表前缀的字段列表 -->
<sql id="Base_Column_Prefix_List">
t.id, t.create_time, t.update_time ...
</sql>

作用是啥呢,举个栗子,假如用户表 t_user,查询所有用户

<sql id="base_column">
    <includerefid="com.xxx.UserMBGMapper.Base_Column_List" />
</sql>

<select id="listAllUser" resultMap="com.xxx.UserMBGMapper.BaseResultMap">
select 
    <include refid="base_column" />
from t_user
where delete_flag = 0
</select>

但实际业务中查询一般比这复杂,比如查询下过订单的用户

<select id="listAllUser" resultMap="com.xxx.UserMBGMapper.BaseResultMap">
select 
    u.id,
    u.username,
    ...
from t_user u 
inner join t_order o on o.user_id = u.id
where u.delete_flag = 0
and u.delete_flag = 0
</select>

可以看到,如果关联表查询就用不到 base_column,查询返回字段只能手动指定。

针对这个痛点,于是修改了 MBG 的源码,使得在生成 xml 多生成带表前缀的字段 sql,如下

<!-- 增强后带有表前缀的字段列表 -->
<sql id="Base_Column_Prefix_List">
t.id, t.create_time, t.update_time ...
</sql>

那上面关联查询就可以这么写了

<sql id="base_column_prefix">
    <includerefid="com.xxx.UserMBGMapper.Base_Column_Prefix_List" />
</sql>

<select id="listAllUser" resultMap="com.xxx.UserMBGMapper.BaseResultMap">
select 
    <include refid="base_column_prefix" />
from t_user u 
inner join t_order o on o.user_id = u.id
where u.delete_flag = 0
and u.delete_flag = 0
</select>

注意:表前缀是根据表名最后一个单词的首字母定的,比如 t_user,那生成的就是 u.id, u.username 等,如果是 t_order,那生成的是 o.id,o.user_id 等。所以在写 sql 的时候需要注意关联表的表明是否和主表冲突。

About

扩展 Mybatis Generator,增加一些自定义功能。请切换到 1.3.7-x 分支

Resources

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Java 93.4%
  • HTML 6.5%
  • Other 0.1%