ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Mybatis--select标签传递多个参数(Map方式、JavaBean方式)

2019-10-27 17:02:23  阅读:255  来源: 互联网

标签:语句 Map sex 参数 select SQL Mybatis JavaBean


SELECT标签

在 SQL 映射文件中 元素用于映射 SQL 的 select 语句,其示例代码如下

<!--根据uid查询一个用户信息 -->
<select id="selectUserById" parameterType="Integer" resultType="com.mybatis.po.MyUser">
    select * from user where uid = #{uid}
</select>

在上述示例代码中,id 的值是唯一标识符,它接收一个 Integer 类型的参数,返回一个 MyUser 类型的对象,结果集自动映射到 MyUser 属性。

元素除了有上述示例代码中的几个属性以外,还有一些常用的属性,如下表所示:

属性名称 描述
id 它和 Mapper 的命名空间组合起来使用,是唯一标识符,供 MyBatis 调用
parameterType 表示传入 SQL 语句的参数类型的全限定名或别名。它是一个可选属性,MyBatis 能推断出具体传入语句的参数
resultType SQL 语句执行后返回的类型(全限定名或者别名)。如果是集合类型,返回的是集合元素的类型,返回时可以使用 resultType 或 resultMap 之一
resultMap 它是映射集的引用,与 元素一起使用,返回时可以使用 resultType 或 resultMap 之一
flushCache 用于设置在调用 SQL 语句后是否要求 MyBatis 清空之前查询的本地缓存和二级缓存,默认值为 false,如果设置为 true,则任何时候只要 SQL 语句被调用都将清空本地缓存和二级缓存
useCache 启动二级缓存的开关,默认值为 true,表示将査询结果存入二级缓存中
timeout 用于设置超时参数,单位是秒(s),超时将抛出异常
fetchSize 获取记录的总条数设定
statementType 告诉 MyBatis 使用哪个 JDBC 的 Statement 工作,取值为 STATEMENT(Statement)、 PREPARED(PreparedStatement)、CALLABLE(CallableStatement)
resultSetType 这是针对 JDBC 的 ResultSet 接口而言,其值可设置为 FORWARD_ONLY(只允许向前访问)、SCROLL_SENSITIVE(双向滚动,但不及时更新)、SCROLLJNSENSITIVE(双向滚动,及时更新)

使用 Map 接口传递多个参数

在实际开发中,查询 SQL 语句经常需要多个参数,例如多条件查询。当传递多个参数时, 元素的 parameterType 属性值的类型是什么呢?在 MyBatis 中允许 Map 接口通过键值对传递多个参数。

假设数据操作接口中有个实现查询陈姓男性用户信息功能的方法:

public List<MyUser> selectAllUser(Map<String,Object> param);

此时,传递给映射器的是一个 Map 对象,使用它在 SQL 文件中设置对应的参数,对应 SQL 文件的代码如下:

<!-- 查询陈姓男性用户信息 -->
<select id="selectAllUser" resultType="com.mybatis.po.MyUser">
    select * from user
    where uname like concat('%',#{u_name},'%')
    and usex = #{u_sex}
</select>

在上述 SQL 文件中,参数名 u_name 和 u_sex 是 Map 的 key。

使用 Java Bean 传递多个参数

创建一个pojo:SeletUserParam

package com.pojo;

public class SeletUserParam {
    private String u_name;
    private String u_sex;
    // 此处省略setter和getter方法
}

Dao 接口中的 selectAllUser 方法如下:

public List<MyUser> selectAllUser(SelectUserParam param);

SQL 映射文件 UserMapper.xml 中的“代码如下:

<select id="selectAllUser" resultType="com.po.MyUser" parameterType="com.pojo.SeletUserParam">
   select * from user
   where uname like concat('%',#{u_name},'%')
   and usex=#{u_sex}
</select>

UserController 的“查询多个用户”的代码如下:

SeletUserParam su = new SelectUserParam();
su.setU_name("陈");
su.setU_sex("男");
List<MyUser> list = userDao.selectAllUser(su);
for (MyUser myUser : list) {
   System.out.println(myUser);
}

在实际应用中是选择 Map 还是选择 Java Bean 传递多个参数应根据实际情况而定,如果参数较少,建议选择 Map;如果参数较多,建议选择 Java Bean。

标签:语句,Map,sex,参数,select,SQL,Mybatis,JavaBean
来源: https://blog.csdn.net/cold___play/article/details/102768355

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有