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);
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);
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
除了集成文档中的这些选项外,还可以是任意可以执行的SQL,例如MySql的select uuid()
,SqlServer的select newid()
等等,这种情况下需要保证主键的类型和SQL的返回值一致。
利用这一个特点,我们就可以使用可以回写的UUID值,如果想获得更特殊的主键值,可以自己写函数调用。