一、导入约束

为全局配置文件绑定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映射文件结构

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

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

  1. <!--resultMap将数据库中的列(字段名)和entity中属性的名字建立映射关联,id 这个resultMap的唯一标识,type表示要映射的实体-->
  2. <resultMap type="Goods" id="Map">
  3. column:数据库字段,property:映射属性
  4. id列:主键列,result普通列
  5. <id column="id" property="id" />
  6. <result column="name" property="name" />
  7. <result column="flag" property="flag" />
  8. 多表查询:
  9. 一对一,多对一assonciation标签,用javatype映射
  10. 一对多,collection标签,用oftype映射
  11. <association property="GoodsType" javaType="GoodsType">
  12. <id column="id" property="id"/>
  13. <result column="tname" property="name"/>
  14. </association>
  15. <!--***********分割线**************-->
  16. <collection property="employees" ofType="employees">
  17. <result column="ename" property="name" />
  18. </collection>
  19. </resultMap>

四、sql标签

  1. <resultType="###"> <resultMap="###"> 二选一,没配置或配置错,执行程序必报错
  1. <select id="finduser" resultType="User">
  2. select * from account ;
  3. </select>
  4. <insert id="adduser" parameterType="user">
  5. insert into
  6. account(name,money) values(#{name},#{money})
  7. </insert>
  8. <update id="updateuser" parameterType="user">
  9. update account set
  10. name=#{name},money=#{money} where id=#{id}
  11. </update>
  12. <delete id="deluser" parameterType="int">
  13. delete from account where
  14. id=#{id}
  15. </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>
  1. <insert id="addProperties" parameterType="java.util.List">
  2. INSERT INTO tdt_sync_instance_properties (name,instance_id) VALUES
  3. <foreach collection="list" item="prop" separator=",">
  4. (#{prop.name},#{prop.instance_id})
  5. </foreach>
  6. ;
  7. </insert>

mapper.xml文件映射配置的更多相关文章

  1. MyBatis的mapper.xml文件的参数问题:org.apache.ibatis.builder.IncompleteElementException: Could not find parameter map

    配置参数类型有两种选择,即:parameterType和parameterMap 不管参数是否是基本数据类型还是map类型,都是使用parameterType. 版权声明:本文为博主原创文章,未经博主 ...

  2. (转)MyBatis框架的学习(四)——Mapper.xml文件中的输入和输出映射以及动态sql

    http://blog.csdn.net/yerenyuan_pku/article/details/71893689 前面对MyBatis框架的学习中,我们对Mapper.xml映射文件多少有些了解 ...

  3. mybatis mapper xml文件配置resultmap时,id行和result行有什么区别?

    mybatis mapper xml文件配置resultmap时,id行和result行有什么区别? <resultMap id = "CashInvoiceMap" typ ...

  4. Java数据持久层框架 MyBatis之API学习六(Mapper XML 文件详解)

    对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...

  5. Java数据持久层框架 MyBatis之API学习五(Mapper XML 文件)

    对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...

  6. 【MyBatis】Mapper XML 文件

    Mapper XML文件 MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立 ...

  7. MyBatis——Mapper XML 文件

    Mapper XML 文件 MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会 ...

  8. Mybatis学习笔记(五) —— Mapper.xml(输入映射和输出映射)

    一.parameterType(输入类型) 1.1 传递简单类型 <!-- 根据用户id查询用户 --> <select id="queryUserById" p ...

  9. 解决使用intellij idea开发MAVEN项目在target目录下不存在mapper.xml文件

    原 解决使用intellij idea开发MAVEN项目在target目录下不存在mapper.xml文件 原文章链接:https://blog.csdn.net/beauxie/article/de ...

随机推荐

  1. Cypress系列(2)- Cypress 框架的详细介绍

    如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html Cypress 简介 基于 JavaSc ...

  2. nginx: [error] invalid PID number "" in ...

    1.查看进程 ps -ef|grep nginx 2.进入nginx安装目录sbin下,执行命令: ./nginx -t 如下显示: syntax is ok test is successful 3 ...

  3. TensorFlow的checkpoint文件转换为pb文件

    由于项目需要,需要将TensorFlow保存的模型从ckpt文件转换为pb文件. import os from tensorflow.python import pywrap_tensorflow f ...

  4. C# 基础之参数修饰符

    参数传参的时候一共有四种传递方式: 一.无修饰符传参 也就是说没有传参修饰符,这种情况传过去的是一个副本,本体是不会被改变的 二.out传参修饰符 在传参的参数全面加一个out: public voi ...

  5. 一文彻底搞懂BERT

    一.什么是BERT? 没错下图中的小黄人就是文本的主角Bert ,而红色的小红人你应该也听过,他就是ELMo.2018年发布的BERT 是一个 NLP 任务的里程碑式模型,它的发布势必会带来一个 NL ...

  6. MySql轻松入门系列————第一站 从源码角度轻松认识mysql整体框架图

    一:背景 1. 讲故事 最近看各大技术社区,不管是知乎,掘金,博客园,csdn基本上看不到有小伙伴分享sqlserver类的文章,看样子这些年sqlserver没落了,已经后继无人了,再写sqlser ...

  7. Java-语言基础梳理

    1.java命名规范 包名:全小写 类名,接口名:首字母大写 变量名,方法名:第一个单词皆字母小写,后面单词首字母大写 常量名:所有字母都大写 2.变量 2.1 注意事项 作用域:一对{}之间有用 必 ...

  8. markdown的简易使用方法

    markdown 的使用方法 标题的使用: 以#号开头,后面跟上空格键. 一级标题用一个#号, 二级标题用两个##.以此类推,总共六级. 段落的编写 至少使用一个空行来分割段落 :即按两次enter键 ...

  9. Redis 的原理与应用场景及数据库关系

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一. Redis 是什么? Redis是一个开源的使用ANSIC语言编写.支持网络.单进程单线程.可基于 ...

  10. Java实现 蓝桥杯 算法提高 01背包

    算法提高 01背包 时间限制:1.0s 内存限制:256.0MB 问题描述 给定N个物品,每个物品有一个重量W和一个价值V.你有一个能装M重量的背包.问怎么装使得所装价值最大.每个物品只有一个. 输入 ...