私信发送成功
Watch Star Fork

abel533 / MapperJavaMIT

极其方便的使用Mybatis单表的增删改查
克隆/下载
一键复制 编辑 原始数据 按行查看 历史
3.2.Use330.md 3.80 KB isea533 提交于 2017-07-09 17:39 . 增加文档中标题缺少的空格。

3.3.0版本新增内容使用文档

增加对动态表名的支持

新增IDynamicTableName接口:

/**
 * 实现动态表名时,实体类实现该接口
 *
 * @author liuzh
 * @since 2015-10-28 22:20
 */
public interface IDynamicTableName {

    /**
     * 获取动态表名 - 这个方法是关键,只要有返回值,不是null和'',就会用返回值作为表名
     *
     * @return
     */
    String getDynamicTableName();
}

一个动态表名的例子

首先继承IDynamicTableName接口:

public class Country implements IDynamicTableName {

    @Id
    @OrderBy("desc")
    private Integer id;

    @Column
    private String countryname;
    private String countrycode;

    @Transient//非表字段,字段名称无所谓
    private String dynamicTableName123;

    //省略getter和setter

    @Override//当该方法返回值不为空时,就会使用返回值作为表名
    public String getDynamicTableName() {
        return dynamicTableName123;
    }

    public void setDynamicTableName(String dynamicTableName) {
        this.dynamicTableName123 = dynamicTableName;
    }
}

测试代码:

CountryMapper mapper = sqlSession.getMapper(CountryMapper.class);
Country country = new Country();
country.setDynamicTableName("country_123");
List<country> countryList = mapper.select(country);

输出SQL:

SELECT id,countryname,countrycode FROM country_123 ORDER BY id

Example增加了4个方法

/**
 * 手写条件
 *
 * @param condition 例如 "length(countryname)<5"
 * @return
 */
public Criteria andCondition(String condition) {
    addCriterion(condition);
    return (Criteria) this;
}

/**
 * 手写左边条件,右边用value值
 *
 * @param condition 例如 "length(countryname)="
 * @param value 例如 5
 * @return
 */
public Criteria andCondition(String condition, Object value) {
    criteria.add(new Criterion(condition, value));
    return (Criteria) this;
}

/**
 * 手写左边条件,右边用value值
 *
 * @param condition 例如 "length(countryname)="
 * @param value 例如 5
 * @param typeHandler 类型处理
 * @return
 */
public Criteria andCondition(String condition, Object value, String typeHandler) {
    criteria.add(new Criterion(condition, value, typeHandler));
    return (Criteria) this;
}

/**
 * 手写左边条件,右边用value值
 *
 * @param condition 例如 "length(countryname)="
 * @param value 例如 5
 * @param typeHandler 类型处理
 * @return
 */
public Criteria andCondition(String condition, Object value, Class<? extends TypeHandler> typeHandler) {
    criteria.add(new Criterion(condition, value, typeHandler.getCanonicalName()));
    return (Criteria) this;
}

Example新方法用法举例

Example example = new Example(Country.class);
example.createCriteria()
        .andCondition("countryname like 'C%' and id < 100")
        .andCondition("length(countryname) = ", 5)
        .andCondition("countrycode =", "CN", StringTypeHandler.class);
List<Country> countries = mapper.selectByExample(example);

输出SQL

SELECT id,countryname,countrycode
FROM Country
WHERE (
countryname like 'C%'
and id < 100
and length(countryname) = ?
and countrycode = ?
)
ORDER BY id desc

@GeneratedValue(strategy = GenerationType.IDENTITY)的一种重要用法说明:

IDENTITY除了[集成文档](http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/3.Use.md# 2--generatedvalue-strategy-=-generationtype-identity-<-code>)中的这些选项外,还可以是任意可以执行的SQL,例如MySql的select uuid(),SqlServer的select newid()等等,这种情况下需要保证主键的类型和SQL的返回值一致。

利用这一个特点,我们就可以使用可以回写的UUID值,如果想获得更特殊的主键值,可以自己写函数调用。

评论 ( 0 )

你可以在登录后,对此项目发表评论

6_float_left_people 6_float_left_close