Mybatis的各个标签详解

        目前比较流行的持久层框架,hibernate,mybatis,Spring Data等,hibernate一般还是比较老的项目会使用,spring Data还不是很广泛,只有mybatis是目前使用比较多,也是被经常问的,如果你说你用过mybatis,最喜欢被问两个问题:1.mybatis有哪些标签,2.#{}和${}有什么区别;

     首先说下最最常用的<insert>,<delete>,<select>,<update>(增删查改),四种标签之间分别放四种增删查改的语句,不过除了标签的使用,还会用到这些标签的属性,先拿最最最常用的<select>来说:(官方文档在这里)

图1-1

虽然比较多,但实际上常用的只有前四个,

id:在命名空间唯一的标识,可以被用来引用这条语句(实际使用时保证id的值与mapper.java 中方法名一致)

parameterType:不是必须的,用来表示传入的参数类型,可以是Integer,String等java的数据类型,也可以是自定义的Person,User等数据类型,还可以是List,Map集合等

resultType:这个和parameterType相对,这个表示返回的数据类型,同样不是必须的,也同样可以是Integer,String,还可以是自定义类型Person,User或者是List和Map集合,

resultMap:这个就比较独特了,一般在自定义映射的时候会用到,与<resultMap>标签合用,如果你返回的数据不是Integer,也不是自定义的Person,也不是List集合,这里就可以使用<resultMap>自定义返回的类型,并将resultMap的值设置为<resultMap>标签的id,(此属性不能和resultType同时存在)

例如:(不过这里最终映射的还是自定义类,只是显示下用法)

图1-2

下面说说另外三个增删改:

增删改比起select更加简单些,因为它默认返回结果类型是Integer,意思就是返回操作了几行数据。具体参数如下:

常用的只有id和parameterType,表示的意思也和select中两个参数值意义相同。

下面说说一些辅助类型的标签,包括<sql>,<resultMap>,<id>,<result>,

从上面的例子中可以很容易看出<sql>标签的作用,代替一小段sql,经常用在select查询的字段上:查询的方法很多,用<sql>标签可以很容易的简化多次要查询写的sql字段名;

<resultMap>,<id>,<sql>三种标签一般都是一起出现的的。

图1-2已经展示<resultMap>的用法,其中id与result区别是:id 元素表示的结果将是对象的标识属性,这会在比较对象实例时用到。 这样可以提高整体的性能,尤其是进行缓存和嵌套结果映射(也就是连接映射)的时候。如果你不理解这段话,那就直接记住,id的时候使用id标签,其他使用result标签。

下面直接来说说foreach标签,他是个循环标签

foreach元素的属性主要有 item,index,collection,open,separator,close。

item表示集合中每一个元素进行迭代时的别名,

index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,

collection表示传入的集合

open表示该语句以什么开始,

separator表示在每次进行迭代之间以什么符号作为分隔 符,

close表示以什么结束。

不过要注意的是:

1. 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list
2. 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
3. 如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可
举例:

单参数List的类型:

 <select id="dynamicForeachTest" parameterType="java.util.List" resultType="Blog">
           select * from t_blog where id in
        <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
                #{item}       
        </foreach>    
    </select>

单参数array数组的类型:

  <select id="dynamicForeach2Test" parameterType="java.util.ArrayList" resultType="Blog">
     select * from t_blog where id in
     <foreach collection="array" index="index" item="item" open="(" separator="," close=")">
          #{item}
     </foreach>
 </select>    

把参数封装成Map的类型:

 <select id="dynamicForeach3Test" parameterType="java.util.HashMap" resultType="Blog">
         select * from t_blog where title like "%"#{title}"%" and id in
          <foreach collection="ids" index="index" item="item" open="(" separator="," close=")">
               #{item}
          </foreach>
 </select>

 


版权声明:本文为qq_26881073原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。