映射器是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. ss-redir 的 iptables 配置(透明代理)

    透明代理指对客户端透明,客户端不需要进行任何设置就使用了网管设置的代理规则 创建 /etc/ss-redir.json 本地监听 7777 运行ss-redir -v -c /etc/ss-redir ...

  2. Redis 持久化和配置文件

    Reids 持久化 Redis提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File).   RDB,简而言之,就是在不同的时间点,将redis ...

  3. ajax上传图片chrome报错net::ERR_CONNECTION_RESET/net::ERR_CONNECTION_ABORTED

    网上搜了一下,base64图片太大,tomcat对post请求大小有默认限制,要在tomcat配置文件server.xml 加一个:maxPostSize="0",0表示无限制 & ...

  4. c中有序表的简单定义

    #include <iostream> using namespace std; #define MaxSize 50 typedef int ElemType; //定义变量int的别名 ...

  5. 使用C#开发C/S框架高级版添加新项目实例

    操作步骤: 1.新建一个项目CSFramework3.test,在CSFramework3.test项目下新建一个FormMan窗口(此时不需要继承). 2.按F7打开类,替换一下引用 using S ...

  6. Springdata mongodb 版本兼容 引起 Error [The 'cursor' option is required, except for aggregate with the explain argument

    在Spring data mongodb 中使用聚合抛出异常 mongodb版本 为 3.6 org.springframework.dao.InvalidDataAccessApiUsageExce ...

  7. 【天坑】ASP.net WebAPI跨域调用问题

    最近在做一个项目,前端是VUE,后端是WebAPI,业务也就是一些实体的增删改查.在项目开始的时候我就预计到有跨域的问题,所以也找了一下资料,在Web.Config里面加上了配置信息: <htt ...

  8. 实战DeviceIoControl 之五:列举已安装的存储设备

    Q 前几次我们讨论的都是设备名比较清楚的情况,有了设备名(路径),就可以直接调用CreateFile打开设备,进行它所支持的I/O操作了.如果事先并不能确切知道设备名,如何去访问设备呢? A 访问设备 ...

  9. FusionCharts封装-dataset和categories

    Chart.java: /** * @Title:Chart.java * @Package:com.fusionchart.model * @Description:FusionCharts 封装d ...

  10. vxWorks/BootROM Imageq启动顺序详解

    vxWorks/BootROM Imageq启动顺序详解 VxWorks image     分为在ROM中运行和在RAM中运行两种,两者启动顺序的区别在于sysInit()函数的调用,该函数在RAM ...