这篇主要介绍在项目中,mybatis经常用到的注解,大部分在项目中都用过了。
mybatis映射sql语句问题。可以通过配置xml来添加映射,也可以在接口上面直接用注解来映射,如 @Select( “SQL语句”) 其他还有@Update,@Delete,@Insert等。
动态生成sql语句可以用@*Provider(),*为各种方法(select……)。
值得一提的是,以@SelectProvider(class,method)为例子,来动态配置sql语句,这个注解的意思是去class类中去找这个方法执行,并把参数作为map传入方法,返回类型为sql语句。
以一个模糊查找为例子。
接口
//用户组编码、用户组名称查找
@SelectProvider(type = QueryHelper.class,method = "getGroupInfo")
List<TGroup> getByCN(@Param("groupCode") String loginName, @Param("groupName") String userName, @Param("start") int limit, @Param("num") int num);
方法
public class QueryHelper {
//通过用户组编码、用户组名称模糊查询
public String getGroupInfo(Map<String, Object> parameters){
String groupCodeTag = null;
String groupNameTag = null;
Object groupCode = parameters.get("groupCode");
Object groupName = parameters.get("groupName");
String sql = "select GROUP_ID,GROUP_CODE,GROUP_NAME from T_GROUP where 1=1";
if (groupCode!=null)
groupCode = groupCode.toString();
if(groupCodeTag!=null&&groupCodeTag.length()>0)
sql +=" and GROUP_CODE LIKE CONCAT('%',#{groupCode},'%') ";
if (groupName!=null)
groupNameTag = groupName.toString();
if(groupNameTag!=null&&groupNameTag.length()>0)
sql +=" and GROUP_NAME LIKE CONCAT('%',#{garoupName},'%') ";
sql += " limit #{start},#{num}";
System.out.println(sql);
return sql;
}
}
缓存优化
@CacheNamespace(size = 100)表示开启缓存,并且缓存100个对象,读写默认是开启的,缓存内省刷新时间为默认3600000毫秒,写策略是拷贝整个对象镜像到全新堆(如同CopyOnWriteList)因此线程安全。
@Options(useCache = true, flushCache = false, timeout = 10000) : 一些查询的选项开关,比如useCache = true表示本次查询结果被缓存以提高下次查询速度,flushCache = false表示下次查询时不刷新缓存,timeout = 10000表示查询结果缓存10000秒。 当是select操作的时候可以关闭flushCash,但是会影响到数据库数据的操作,要打开flushCash,避免数据不一致。
@Results(value = {
@Result(id = true, property = “id”, column = “RID”, javaType = String.class, jdbcType = JdbcType.VARCHAR),
@Result(property = “text”, column = “TTEXT”, javaType = String.class, jdbcType = JdbcType.VARCHAR) })
可以将返回的结果与实体类的属性进行映射,假如列名和属性一致时,会自动映射。column 为数据库的列名,property为实体类的属性,id为主键,javaType 为实体类的类型,jdbcType为数据库column的类型。
@Param(“id”) 指定传入参数的映射。
@Select("select * from T_GROUP where GROUP_ID = #{gID,jdbcType=INTEGER}")
TGroup getById(@Param("gID") String groupId);
@ResultMap(value = “userMap”)
这个是把ResultMap配置在xml中,然后在同一个namespace下才能使用。
这里的注解是mybatis中常用的注解,以select的为例,其他的注解使用类似,可以类比。