mapper.xml文件映射配置

一、导入约束

为全局配置文件绑定dtd约束:
    1)联网会自动绑定
    2)没网的时候【/org/apache/ibatis/builder/xml/mybatis-3-mapper.dtd】:解压mybatis 的jar包然后在eclipse中绑定

        window——preperances——XML Catalog ——Add——设置key为http://mybatis.org/dtd/mybatis-3-mapper.dtd,绑定本地文件位置location:

1 <!DOCTYPE mapper
2   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
3   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

二、mapper映射文件结构

<mapper namespace="mapper.buyrecordMapper"> 

<!--namespace 必须配置成接口的全限定名。Mybatis内部就是通过这讲接口和mapepr.xml关联起来的。接口中方法和mapper.xml 中的id对应。否则会报错-->
resultMap (自定义映射结果集) sql标签 <select id=""></select>查询标签 <insert id=""></insert>插入标签 <update id=""></update>更新标签 <delete id=""></delete>删除标签 </mapper>

三、resultMap (自定义映射结果集)

 

<!--resultMap将数据库中的列(字段名)和entity中属性的名字建立映射关联,id 这个resultMap的唯一标识,type表示要映射的实体-->
<resultMap type="Goods" id="Map">
                  column:数据库字段,property:映射属性
                  id列:主键列,result普通列
        <id column="id" property="id" />
        <result column="name" property="name" />
        <result column="flag" property="flag" />
                多表查询:
                 一对一,多对一assonciation标签,用javatype映射
                一对多,collection标签,用oftype映射
    <association property="GoodsType" javaType="GoodsType">
        <id column="id" property="id"/>
        <result column="tname" property="name"/>
        </association>
               <!--***********分割线**************-->
        <collection property="employees" ofType="employees">
            <result column="ename" property="name" />
         </collection>
</resultMap>

四、sql标签

<resultType="###">  <resultMap="###">  二选一,没配置或配置错,执行程序必报错
<select id="finduser" resultType="User">
      select * from account ;
 </select>
<insert id="adduser" parameterType="user">
        insert into
        account(name,money) values(#{name},#{money})
</insert>
<update id="updateuser" parameterType="user">
        update account set
        name=#{name},money=#{money} where id=#{id}
</update>
<delete id="deluser" parameterType="int">
        delete from account where
        id=#{id}
</delete>

五、动态sql

< where >和< if >标签

< where > : 主要用来替换sql语句中的where字段,他的作用主要是用来简化sql语句中where条件判断的书写的

< if >:条件判断标签,配置属性test=" 条件字符串 ",判断是否满足条件,满足则执行,不满足则跳过

 1 <select id="deptif" resultType="dept" parameterType="dept">
 2         select * from dept
 3         <where>
 4             <if test="dname!=null and dname.trim()!=''">
 5                 and dname like concat('%',#{dname},'%')
 6             </if>
 7             <if test="loc!=null and loc.trim()!=''">
 8                 and loc=#{loc}
 9             </if>
10         </where>
11 </select>

< set >标签

< set > : 主要用来替换sql语句中的set字段,一般在update中使用。

 1 <update id="update" parameterType="Dept">
 2         update dept
 3         <set>
 4             <if test="dname!=null">
 5                 dname=#{dname},
 6             </if>
 7             <if test="loc!=null">
 8                 loc=#{loc}
 9             </if>
10         </set>
11         where id=#{id}
12 </update>

< trim>标签

< trim > : 是一个格式化的标记,可以完成set或者是where标记的功能

  prefix:前缀      
  prefixoverride:去掉第一个and或者是or

 1 <select id="depttrim" resultType="Dept" parameterType="Dept">
 2         select * from dept
 3         <trim prefix="where" suffixOverrides="and">
 4             <if test="dname!=null and dname.trim()!=''">
 5                 dname like concat('%',#{dname},'%') and
 6             </if>
 7             <if test="loc!=null and loc.trim()!=''">
 8                 loc=#{loc}
 9             </if>
10         </trim>
11 </select>

< choose >标签

< where > : choose标签是按顺序判断其内部when标签中的test条件出否成立,如果有一个成立,则 choose 结束。

当 choose 中所有 when 的条件都不满则时,则执行 otherwise 中的sql。

类似于Java 的 switch 语句,choose 为 switch,when 为 case,otherwise 则为 default。

 1 <select id="deptchoose" resultType="Dept" parameterType="Dept">
 2         select * from dept
 3         <where>
 4             <choose>
 5                 <when test="loc!=null">
 6                     loc=#{loc}
 7                 </when>
 8                 <when test="dname!=null and dname.trim()!=''">
 9                     dname like concat('%',#{dname},'%')
10                 </when>
11                 <otherwise>
12                     id=#{id}
13                 </otherwise>
14             </choose>
15         </where>
16 </select>

<foreach>标签

foreach标签经常用于遍历集合,构建in条件语句或者批量操作语句。

 1 <select id="deptforeach" resultType="Dept">
 2         select * from dept
 3         <where>
 4             <if test="list!=null and list.size()>0">
 5                 <foreach collection="list" separator="," open="id in("
 6                     close=")" item="uid">
 7                     #{uid}
 8                 </foreach>
 9             </if>
10         </where>
11 </select>
<insert id="addProperties" parameterType="java.util.List">
        INSERT INTO tdt_sync_instance_properties (name,instance_id) VALUES
        <foreach collection="list" item="prop" separator=",">
            (#{prop.name},#{prop.instance_id})
        </foreach>
        ;
  </insert>

猜你喜欢

转载自www.cnblogs.com/tweixi/p/12573516.html