一、导入约束
为全局配置文件绑定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>