映射器是MyBatis最强大的工具,也是我们使用MyBatis时用的最多的工具,映射器中主要有增删改查四大元素,来满足不同场景的需要;
下面是主要元素的介绍;
        select:查询语句,insert:插入语句,update:更新语句;delete:删除语句;sql:允许定义一部分的SQL,然后在各个地方引用他;
        resultMap:用来描述从数据库结果集中来加载对象,他是最复杂,最强大的元素;
        select元素;作为查询语句,我们需要的就有一个传入参数,一个结果集,而且要做好相应的映射;下面是select元素的配置;
        id,简单地说,就是用来标识select元素的配置;
        parameterType,这个就是传入参数的配置,可以是单元素,javabean,Map等复杂的参数类型传递;
        resultType,resultMap,他是映射集的引用,可以自定义映射规则,映射javaBean,定义int,double,float等参数,不能同时使用。
        下面简易数据类型的例子;
<select id = "countFirstName" parameterType = "string" resultType = "int">
select count(*) as total from t_user where name like concat(#{firstName},'%')
</select>
        其中id标出了这条SQL;
        parameterType定义了参数类型;
        resultType定义返回值类型;
        下面是以javabeanl类型来映射结果集;
public class Role{
private Long id;
private String roleName;
private String note;
public Long getId(){
return id;
}
public void setId(Long id){
this.id = id;
}
public String getRoleName(){
return roleName;
}
public void setRoleName(String roleName){
this.roleName = roleName;
}
public String getNote(){
return note;
}
public void setNote(String note){
this.note = note;
}
}

  结果集映射的javabean已经写好了,接下来就是自动映射的语句;

<select parameterType = "id" id = "getRole" resultType = "com.learn.chapter4.pojo.Role">
select id, role_name as roleName, note from t_note
where id = #{id}
</select>

  再提供一个方法;

public Role getRole(Long id);

  接下来是关于传递参数的映射,首先,如何传递多个参数呢?这里有三个方法,是根据你的参数的个数来决定的,map方法,注解方法和javabean方法,其中,map方法因为可读性较差,在这里就不列举了,下面是注解的方式来传递;

public List<Role> findRoleByAnnotation(@Param("roleName") String rolename,@Param("note") String note);

  我们把映射器的xml修改为无需定义参数类型,

<select id = "findRoleByAnnotation" resultMap = "roleMap">
select id ,role_name,note from t_role
where role_name like concat ('%',#{roleName},'%')
and note like concat('%',#{note},'%')
</select>
这里说无需定义参数类型也就是说不用写parameterType
使用javabean传递参数的方式跟上面结果集的映射是一样的; 需要指出,当参数的个数<=5个的时候,可以考虑用注解传参,而当参数的个数大于5个的时候,可以考虑用javabean方式;
还有一种是使用resultMap映射结果集,这样的话,我们在映射器中定义resultMap;

<resultMap id = "roleResultMap" type = "com.learn.chapter4.pojo.Role">
<id property = "id" column = "id">
<result property = "roleName" column = "role_name">
<result property = "note" column = "note"/>
</resultMap>
<select parameterType = "long" id = "getRole" resultMap = "roleResultMap">
select id,role_name,note from t_role where id = #{id}
</select>
解释一下,id是设置代表着使用哪个属性作为其主键,result元素定义普通列的映射关系;这样的话,select语句就不再需要自动映射的规则,直接用resultMap属性指定roleResultMap即可,下面还会讲到这个属性;
        insert增加语句,这个语句相比之下,少了一个结果集返回的影射,但是多了一个主键的设置,
下面是代码;

<insert parameterType = "role" id = "insertRole">
insert into t_role(role_name,note) values (#{roleName},#{note})
</insert>

  有时候我们还需要声名主键 ,在声明的时候,我们传入的参数模型是不需要传入id这个属性的,因为我们会另外拿出来声明,使用keyProperty指定哪个是主键字段,用useGeneratedKeys属性告诉MyBatis这个主键是否使用数据库内置策略生成;

<insert id = "insertRole" parameterType = "role"
useGeneratedKeys = "true" keyProperty = "id">
insert into t_role (role_name,note) values (#{roleName},#{note})
</insert>
所以,我们传入的rolejavabean对象是不需要设置id的值的,
update元素和delete元素,这两个都是只有传入参数类型,而没有结果集映射类型;

<update parameterType = "role" id = "updateRole">
update t_role set
role_name = #{roleName},
note = #{note}
where id = #{id}
</update>
<delete id = "delete" parameterType = "long"
delete from t_role where id = #{id}
</delete>
提一点就是我们可以替换掉特殊字符串,也就是灵活地传入参数;
    select ${columns} from t_tablenname;
sql元素;
    sql元素的功能在于我们可以将我们常用的参数给封装在sql语句中,下次要用的时候直接用<include>标签;

<sql id = "role_columns">
id,role_name,note
</sql>
<select parameterType = "long" id = "getRole" resultMap = "roleMap">
select <include refid = "role_columns"/> from t_note where id = #{id}
</select>
<select parameterType = "map" id = "findRoles">
select id, role_name,note from t_role
where role_name like concat('%',#{roleName},'%')
and note like concat('%',#{note,'%'})
</select>

  

MyBatis映射器元素的更多相关文章

  1. MyBatis映射器(转载)

    什么是MyBatis映射器? MyBatis框架包括两种类型的XML文件,一类是配置文件,即mybatis-config.xml,另外一类是映射文件,例如XXXMapper.xml等.在MyBatis ...

  2. MyBatis映射器(一)--多参数传递方式

    在mybatis映射器的接口中,一般在查询时需要传递一些参数作为查询条件,有时候是一个,有时候是多个.当只有一个参数时,我们只要在sql中使用接口中的参数名称即可,但是如果是多个呢,就不能直接用参数名 ...

  3. mybatis映射器配置细则

    前面三篇博客我们已经多次涉及到映射器的使用了,增删查基本上都用过一遍了,但是之前我们只是介绍了基本用法,实际上mybatis中映射器可以配置的地方还是非常多,今天我们就先来看看映射器还有哪些需要配置的 ...

  4. mybatis 映射器(mappers) 配置说明 加载映射文件方式

    映射器(mappers) 既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要定义 SQL 映射语句了.但是首先我们需要告诉 MyBatis 到哪里去找到这些语句. Java 在自动查找这 ...

  5. 【长文】Spring学习笔记(七):Mybatis映射器+动态SQL

    1 概述 本文主要讲述了如何使用MyBatis中的映射器以及动态SQL的配置. 2 MyBatis配置文件概览 MyBatis配置文件主要属性如下: <settings>:相关设置,键值对 ...

  6. mybatis 映射器

    1 映射器 Mapper 是由java接口和 XML 文件共同组成.它的作用如下 1)定义参数类型 2)描述缓存 3)描述 SQL 语句 4)定义查询结果和POJO的映射关系 2 SqlSession ...

  7. Mybatis映射器接口代理对象的方式 运行过程

    查询一张表的所有数据. 环境: 使用工具IntelliJ IDEA 2018.2版本. 创建Maven工程不用骨架 1.pom.xml <?xml version="1.0" ...

  8. Mybatis 映射器接口实现类的方式 运行过程debug分析

    查询一张表的所有数据. 环境: 使用工具IntelliJ IDEA 2018.2版本. 创建Maven工程不用骨架 <?xml version="1.0" encoding= ...

  9. Mybatis映射器(一)

    XML查询参数: parameterType:可以给出类别名,全名等. resultType:查询结果,可以为 int,float,map等不可以与resultMap同时使用. resultMap: ...

随机推荐

  1. python学习:设计一个算法将缺失的数字找出来。

    算法题   已知整型数值 a[99], 包含的所有99个元素都是从1-100中随机取值,并且这99个数两两互不相等,也就是说从1到100这100个数字有99个在数值内,有一个缺失.请设计一个算法将缺失 ...

  2. css中的关于margin-top,position和z-index的一些bug解决方案

    这两天在写一个demo的时候,就碰到一些css的问题,不知道能不能算bug,很有可能是因为我写的代码太少,孤陋寡闻了_(:зゝ∠)_.记录一下,以防下次遇到同样问题. 进入正题: 1.问题描述:div ...

  3. Bootstrap表单验证

    主要用过两个: jqBootstrapValidation: https://github.com/ReactiveRaven/jqBootstrapValidation bootstrapValid ...

  4. Flask從入門到入土(四)——登錄實現

    表單介紹 1.表單標籤 聲明表單的範圍,位於表單標籤中的元素將被提交 語法: <form>  </form> 屬性: Method(提交方式get,post) , Enctyp ...

  5. 五子棋的斜对角方向上的规则 -- java编程(简单粗暴版)

    五子棋判断输赢规则 --- 斜对角线方向上 一.左上右下方向上 1.分析图 2.代码 /**判断左上右下方向上是否有连续五颗相同颜色的棋子 * 全部遍历法 */ int loop = 0; boole ...

  6. php 网络爬虫2种方法

    1,通过curl进行抓取再进行写入文件当中: $curlobj = curl_init(); // 初始化curl_setopt($curlobj, CURLOPT_URL, "https: ...

  7. 《android开发艺术探索》读书笔记(十)--Android的消息机制

    接上篇<android开发艺术探索>读书笔记(九)--四大组件 No1: 消息队列MessageQueue的内部存储结构并不是真正的队列,而是采用单链表的数据结构来存储消息列表,因为单链表 ...

  8. 最长周长三角形 O(nlogn)

    题意   有根棍子,棍子的长度为.想要从中选出三根棍子组成周长尽可能长的三角形.请输出最大的周长,若无法组成三角形输出0. 思路   很容易想到采用三重循环来枚举所有三角形,复杂度为.   更好的办法 ...

  9. UVA - 12186 Another Crisis (树形DP)

    思路:dp[i]表示让上司i签字至少需要多少工人签字.       转移方程:将i的所有节点根据所需工人数量升序排序,设i需要k个下属签字,dp[i] = sum{dp[v]| 0 <= v & ...

  10. easywechat--在thinkPHP5中的使用

    1. 安装 1.1 v-4.0 版本要求 PHP版本在7.0以上 1.2 在项目目录下运行以下命令 若未安装composer,则先安装composer -> http://docs.phpcom ...