映射器是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. Docker Centos7 下建立 Docker 桥接网络

    为什么要让docker桥接物理网络? docker默认提供了一个隔离的内网环境,启动时会建立一个docker0的虚拟网卡,每个容器都是连接到docker0网卡上的.而docker0的ip段为172.1 ...

  2. 【收藏】8段JQuery处理表单的代码片段,很实用

    1 只接受数字输入 $("#uAge").keydown(function(event) { // 允许退格和删除键 if ( event.keyCode == 46 || eve ...

  3. linux下卸载已安装的软件

    1.先查询该软件是否安装,是否存在 rpm -qa | grep -i teamview 2.根据一中的结果(软件包名称),执行如下命令 rpm -e [软件包名]

  4. shell 颜色控制系列

    shell脚本里,经常用的颜色控制,如下 格式:echo -e "\033[字背景颜色:文字颜色m字符串\033[0m" eg:echo -e "\033[41;36m ...

  5. C语言_指针和数组的几种访问形式

    敲几行代码来看看几种访问的形式~ #include <stdio.h>;int main() { ] = {, , , , , }; //初始化5个元素的一维数组 int *p = arr ...

  6. 【推荐】开源项目minapp-重新定义微信小程序的开发

    minapp 重新定义微信小程序的开发 官网:https://qiu8310.github.io/minapp/ 作者:Mora minapp 重新定义微信小程序的开发 使用 用 npm 安装命令行工 ...

  7. Appium疑难杂症

    坑之初体验 在Appium的初体验中,遇到了一些坑坑洼洼.将他们记录下来,以后方便查阅. 1. session大于60秒没接收到命令自动关闭 通过Appium-Python-Client连接到appi ...

  8. javascript模块化编程库require.js的用法

    随着javascript的兴起,越来越多的公司开始将JS模块化,以增加开发的效率和减少重复编写代码的.更是为了能更加容易的维护日后的代码,因为现在的随着人们对交互效果的越来越强烈的需求,我们的JS代码 ...

  9. redis的密码设置(windows与linux相同)

    接着我们昨天的说,昨天redis的启动已经了解,今天来说说redis的密码设置.(不管怎么说redis也是数据库,也需要密码) 修改密码可以2种行径.第一种,直接修改配置文件,打开redis.conf ...

  10. Android视频播放的两种方式介绍

    1.在Android 中播放视频的方式有两种: 第一种方式是使用MediaPlayer 结合SurfaceView 来播放,通过MediaPlayer来控制视频的播放.暂停.进度等: 通过Surfac ...