映射器

映射器的主要元素有八种:

元素名称

描述

select

查询语句,可自定义参数

insert

插入语句,执行后返回插入的条数

update

更新语句,执行后返回更新的条数

delete

删除语句,执行后返回删除的条数

sql

定义一部分的sql,被各处引用

resultMap

描述从数据库中得到的结果,提供映射规则

cache

给定命名空间的缓存配置

cache-ref

其他命名空间缓存配置的引用

 

select元素

①   简单地应用查询的select元素

<select id =”selectPerson” parameterType=”int” resultType=”hashmap”>

         SELECT * FROM PERSON WHERE ID=”#{id}”

</select>

在<select>标签中定义了,这个操作的标识id为”selectPerson”,而这个操作的接受的是int(Integer)类型的参数,并返回一个HashMap类型的对象。

其中的参数符号:

#{id}

就跟JDBC里面的SQL语句中的一个预处理语句参数“?”是一样的效果。

String selectPerson = “SELECT * FROM PERSON WHERE ID=?”;

而<select>标签中的标识属性id,需要与映射的Mapper类中的方法名一致。

public HashMap selectperson(int id);

这样就可以使用Mybatis调用SQL了。

②   自动映射

在Mybatis的配置文件(mybatis-config.xml)中的settings下的参数autoMappingBehavior,当它不设置为NONE的时候,Mybatis就会提供自动映射的功能------只要返回的SQL列名和POJO的属性一致,Mybatis就会回填这些字段而不需要任何设置。

在实际中,大部分的数据库规范都是要求每个单词用下划线分隔,而Java则是用驼峰命名法来命名,于是使用列的别名就可以使Mybatis自动映射,或者直接在配置文件中开启驼峰命名的方式

a)       使用列的别名

package com.entity

public class User{

         private int id;

         private String userName;

         public int getId(){

                   return id;

}

public void setId(int id){

         this.id = id;

}

public String getUserName(){

         return userName;

}

public void setUserName(String userName){

         this.userName = userName;

}

}

而数据库表(user_info)的字段(简略)如下:

字段

类型

说明

id

int(20)

角色编号,主键,递增

user_name

varchar(60)

角色名称

此时Mapper的映射语句是:

<select parameterType=”int” id=”getUser” resultType=”com.entity.User”>

         select id,user_name as username from user_info where id=#{id}

</select>

对于UserDao接口,提供的方法是:

public User getUser(int id);

b)       在配置文件中启用驼峰命名法

设置settings属性下的mapUnderscoreToCamelCase参数为true,这样就可以实现从数据库到POJO的自动映射了。

自动映射可以在settings元素中配置autoMappingBehavior属性值来设定。

说明

NONE

取消自动映射

PARTIAL

只会自动映射,没有定义嵌套结果集映射的结果集(默认值)

FULL

会自动映射任意复杂的结果集

 

③   传递多个参数:

a)         使用Map传递参数

我们可以使用Mybatis提供的Map接口作为参数来实现:

<select id=”findUserByMap” parameterType=”map” resultMap=”userMap”>

         select id,user_name from user_info where user_name like concat(‘%’,#{userName},'%')

</select>

对于UserDao接口:

public List<User> findUserByMap(Map<int, String> params);

传递参数:

Map<int, String> paramsMap = new HashMap<int, String>();

paramsMap.put(“id”,1);

paramsMap.put(“username”,”tom”);

userMapper.findUserByMap(paramsMap);

使用Map传递参数。因为Map导致业务可读性丧失,从而导致后续扩展和维护的困难,所以这个方法废弃掉。

b)         使用注解方式传递参数

UserDao接口如下:

public List<User> findUserByAnnotation(@Param(“id”) int id, @Param(“userName”)String userName);

把映射器的XML修改为无需定义参数类型:

<select id=”findUserByAnnotation” parameterType=”map” resultMap=”userMap”>

select id,user_name from user_info where user_name like concat(‘%’,#{userName},’%’)

</select>

使用@Param注解传递多个参数,这种方式的使用受到参数个数(n)的影响。当n<=5时,它是最佳的传参方式;当n>5的时候,多个参数将给调用带来困难。

c)         使用JavaBean传递参数。

首先先定义一个UserParams的JavaBean:

package com.params;

public class UserParam{

         private String userName;

         public String getUserName(){

         return userName;

}

public void setUserName(String userName){

         this.userName = userName;

}

}

JavaBean传递参数:

<select id=”findUserByParams” parameterType=”com.params.UserParam” resultMap=”userMap”>

         select id,user_name from user_info where user_name like concat(‘%’,#{userName},’%’)

</select>

同样在RoleDao接口提供一个方法:

public List<User> findUserByParams(UserParam params);

当参数个数多于5个时,建议使用JavaBean方式。


参考文章:http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html

(十一)mybatis之映射器(select)的更多相关文章

  1. 深入浅出mybatis之映射器

    目录 概述 XML映射器 定义xml映射器 配置xml映射器 使用xml映射器 接口映射器 定义接口映射器 配置接口映射器 使用接口映射器 总结与对比 概述 映射器是MyBatis中最核心的组件之一, ...

  2. MyBatis中映射器Mapper概述

    MyBatis真正强大之处在于它的映射器.因为它异常强大并且编写相对简单,不仅比传统编写SQL语句做的更好并且能节省将近95%的代码量 XML中顶级元素汇总 cache: 给定命名空间的缓存配置 ca ...

  3. (八)mybatis之映射器

    映射器 映射器是由Java接口和XML文件(或注解)共同组成的,作用如下: ①   定义参数类型. ②   描述缓存. ③   描述SQL语句. ④   定义查询结果和POJO的映射关系. 以下用两种 ...

  4. Mybatis中映射器实现方式总结

    一种是通过XML文件方式(由一个java接口和一个XML文件构成) RoleMapper rm = session.getMapper(RoleMapper.class); List<Role& ...

  5. 第六章 mybatis注入映射器

    为了代替手工使用 SqlSessionDaoSupport 或 SqlSessionTemplate 编写数据访问对象 (DAO)的代码,MyBatis-Spring 提供了一个动态代理的实现:Map ...

  6. mybatis学习——映射器(mappers)

    在定义 SQL 映射语句之前,我们需要告诉 MyBatis 到哪里去找到这些语句. 在自动查找资源方面,Java 并没有提供一个很好的解决方案,所以最好的办法是直接告诉 MyBatis 到哪里去找映射 ...

  7. Mybatis结果映射器resultMap的基本用法

    <mapper namespace="全局唯一的名称空间"> <resultMap id="本namespace下唯一" type=" ...

  8. mybatis映射器配置细则

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

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

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

随机推荐

  1. JAVA通过信号量避免死锁

    死锁是这样一种情形:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放.由于线程被无限期地阻塞,因此程序不可能正常终止. 导致死锁的根源在于不适当地运用"synchronized ...

  2. Flutter实战视频-移动电商-26.列表页_使用Provide控制子类-2

    26.列表页_使用Provide控制子类-2 主要实现功能,点击一级分类,二级分类跟着变.这里主要用哦我们的provide 新建provide provide文件夹下创建:child_category ...

  3. Flutter实战视频-移动电商-64.会员中心_顶部头像UI布局

    64.会员中心_顶部头像UI布局 会员中心的样式 member.dart 清除原来的代码生成一个基本的结构 默认返回一个scaffold脚手架工具,body里面布局使用ListView,这样不会出现纵 ...

  4. __doPostBack方法解析 __VIEWSTATE __EVENTTARGET __doPostBack __EVENTARGUMENT

    关于这个的另一篇博客:http://www.cnblogs.com/Silicon-Fado/archive/2009/04/21/1440437.html __VIEWSTATE:页面状态信息在客户 ...

  5. Node.js 内置模块fs(文件系统)

    fs模块的三个常用方法 1.fs.readFile() -- 读文件 2.fs.writeFile() -- 写文件 3.fa.stat() -- 查看文件信息 fs模块不同于其它模块的地方是它有异步 ...

  6. Sql Server2008R2与IDEA的连接

    数据库的连接笔者搞了一天,参阅了众多连接方案,大部分都是Eclipse和My sql,笔者一遍一遍的调试,终于皇天不负有心人,成绩先摆出来 为了让更多的新手能少走弯路,话不多说,上干货 首先,我们需要 ...

  7. assembly x86(nasm)串比较

    预留字符串口令,输入口令串与预留密码串比较.若匹配则显示“MATCH!CONGRATULATION”,否则显示“NOMATCH!”,并让用户重新输入,程序能对口令进行测试,但测试次数最多3次,若3次输 ...

  8. 002-tomcat安装与配置

    1.创建目录 [root@bogon tomcat]#mkdir /usr/local/java/tomcat 2.上传压缩包并解压 [root@bogon tomcat]# tar xvf apac ...

  9. shell 截取字符串(转)

    linux中对字符串的处理: 1.字符串分割例如  AAAAA-BBBBBB  按-分割去前后两部分 cut : [rich@localhost ~]$ str=AAAAA-BBBBBB[rich@l ...

  10. [Noip模拟题]统计方案​

    题目并不难,想一下就会了,我真的智商持续下降,取模情况下做除法我都没想到逆元. 总之想到逆元就好写了,还是\(meet\ in\ the\ middle\)裸题,数组开不下用\(hash/map\)存 ...