Mybatis提供了两种方式实现查询、更新、删除、增加:
第一种是xml的形式。
第二种是注解的形式。
第一种的缺点就是只要数据库字段发生变化,所要改的地方都很多,极容易因为缺少字段而出错,好处就是可以自动生成很多可以直接使用的方法,第二种的好处就是无论数据库字段怎么变化只需要修改注解一个地方就可以。
我之前都是用xml的形式来实现交互的,看到同事好多都用注解的形式实现,我也换成用注解的实现方式,发现的确挺方便的,因为我们的项目都是从最新的开发,从数据库设计到开发完成一套流程都是我们来做,不免中途数据库字段会发生改变,用注解后就不用担心这方面了。
好了, 啰嗦了这么多,现在就讲一个昨天我用到的在mybatis中@Select中实现in的用法,直接贴代码(代码一),与别的写法稍有不同的就是需要用到<script>,其余的到没什么不同,再贴一个用别的xml实现的mysql中in的用法(代码三)
代码一:
@Select("<script> " +
"select id, resource_name as resourceName, resource_type as resourceType from t_resource_dic where dic_type = #{ditType} and resource_type " +
"in <foreach item='item' index='index' collection='resources' open='(' separator=',' close=')'> #{item} </foreach> " +
"</script>")
List<ResourceDicVo> getResourceDics(@Param("resources")List<Integer> resources, @Param("ditType")Integer ditType);
进到@Select注解里面,知道是 Clinton Begin这个牛人写的(mybatis这个持久层框架就是他写的), 可以看到这是Apache基金会下面的项目,因为Mybatis目前已经托管到GitHub下(图一)
代码二:
package org.apache.ibatis.annotations;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @author Clinton Begin
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Select {
String[] value();
}
代码三:
<foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
#{listItem}
</foreach>
图一: