查看: 129|回复: 0

mybatis-plus - insert

[复制链接]
发表于 2020-2-18 03:53:14 | 显示全部楼层 |阅读模式
一. insert

起首看一下 insert.java 的代码:
  1. /** *  * 根据 ID 删除 *
  2. * * @author hubin * @since 2018-04-06 */public class Insert extends AbstractMethod {    @Override    public MappedStatement injectMappedStatement(Class mapperClass, Class modelClass, TableInfo tableInfo) {        KeyGenerator keyGenerator = new NoKeyGenerator();        SqlMethod sqlMethod = SqlMethod.INSERT_ONE;        String columnScript =[b] SqlScriptUtils.convertTrim[/b](tableInfo.[b]getAllInsertSqlColumn[/b](),            StringPool.LEFT_BRACKET, StringPool.RIGHT_BRACKET, null, StringPool.COMMA);        String valuesScript = SqlScriptUtils.convertTrim(tableInfo.[b]getAllInsertSqlProperty[/b](),            StringPool.LEFT_BRACKET, StringPool.RIGHT_BRACKET, null, StringPool.COMMA);        String keyProperty = null;        String keyColumn = null;        // 表包含主键处理逻辑,如果不包含主键当普通字段处理        if (StringUtils.isNotEmpty(tableInfo.getKeyProperty())) {            if (tableInfo.getIdType() == IdType.AUTO) {                /** 自增主键 */                keyGenerator = new Jdbc3KeyGenerator();                keyProperty = tableInfo.getKeyProperty();                keyColumn = tableInfo.getKeyColumn();            } else {                if (null != tableInfo.getKeySequence()) {                    keyGenerator = TableInfoHelper.genKeyGenerator(tableInfo, builderAssistant, sqlMethod.getMethod(), languageDriver);                    keyProperty = tableInfo.getKeyProperty();                    keyColumn = tableInfo.getKeyColumn();                }            }        }        String sql = String.format(sqlMethod.getSql(), tableInfo.getTableName(), columnScript, valuesScript);        SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);        return this.addInsertMappedStatement(mapperClass, modelClass, sqlMethod.getMethod(), sqlSource, keyGenerator, keyProperty, keyColumn);    }}
复制代码
可以看到 insert 继承了 AbstractMethod 类.

1. ableInfo.getAllInsertSQLColumn()
  1.     /**     * 获取 inset 时间字段 sql 脚本片段     * insert into table (字段) values (值)     * 位于 "字段" 部位     *     * @return sql 脚本片段     */    public String getAllInsertSqlColumn() {        return [b]getKeyInsertSqlColumn[/b]() + fieldList.stream().map(TableFieldInfo::[b]getInsertSqlColumn[/b])            .collect(joining(StringPool.NEWLINE));    }
复制代码
getInsertSqlColumn() 方法, 拿列名:
  1.     /**     * 获取 inset 时间字段 sql 脚本片段     * insert into table (字段) values (值)     * 位于 "字段" 部位     *     * @return sql 脚本片段     */    public String getInsertSqlColumn() {        String sqlScript = column + StringPool.COMMA;        if (fieldFill == FieldFill.INSERT || fieldFill == FieldFill.INSERT_UPDATE) {            return sqlScript;        }        return convertIf(sqlScript, property);    }
复制代码
  1. getKeyInsertSqlColumn()就是根据配置看是否要拿 id , 进入sql列的拼装:
复制代码
  1. /** * 获取 inset 时间主键 sql 脚本片段 * insert into table (字段) values (值) * 位于 "字段" 部位 * * @return sql 脚本片段 */public String getKeyInsertSqlColumn() {    if (StringUtils.isNotEmpty(keyColumn)) {        if (idType == IdType.AUTO) {            return StringPool.EMPTY;        }        return keyColumn + StringPool.COMMA + StringPool.NEWLINE;    }    return StringPool.EMPTY;}
复制代码
如果 id 配置了 自动天生, 则在天生 sql 的列的时间, id不到场. 也就是说, 天生的语句是 insert name, age  values(#{name}, #{age})

2. SqlScriptUtils.convertTrim()

[code]    /**     *      * 获取 带 trim 标签的脚本     *
     *     * @param sqlScript       sql 脚本片段     * @param prefix          以...开头     * @param suffix          以...末了     * @param prefixOverrides 干掉最前一个...     * @param suffixOverrides 干掉末了一个...     * @return trim 脚本     */    public static String convertTrim(final String sqlScript, final String prefix, final String suffix,                                     final String prefixOverrides, final String suffixOverrides) {        StringBuilder sb = new StringBuilder("

天涯海角也要找到Ni:mybatis-plus - insert

中发现Ni: mybatis-plus - insert
中发现Ni: mybatis-plus - insert
中发现Ni: mybatis-plus - insert
中发现Ni: mybatis-plus - insert
中发现Ni: mybatis-plus - insert
中发现Ni: mybatis-plus - insert
相关技术服务需求,请联系管理员和客服QQ:2753533861或QQ:619920289
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

帖子推荐:
客服咨询

QQ:2753533861

服务时间 9:00-22:00

快速回复 返回顶部 返回列表