MyBatis select标签的简介说明

Java-框架王 MyBatis 发布时间:2021-07-19 15:16:43 阅读数:16021 1

 在 MyBatis 中,select 标签是最常用也是功能最强大的 SQL 语言,用于执行查询操作。

select 示例

 

<select id="selectAllUserInfo" resultType="com.java265.po.UserInfo" parameterType="string">
SELECT id,NAME  FROM userInfo WHERE NAME LIKE CONCAT ('%',#{name},'%')
</select>


以上是一个 id 为 selectAllUserInfo 的映射语句,参数类型为 string,返回结果类型为 UserInfo

执行 SQL 语句时可以定义参数,
   参数可以是一个简单的参数类型,
如  String;
也可以是一个复杂的参数类型,
    如 JavaBean、Map 等。
MyBatis 提供了强大的映射规则,执行 SQL 后,MyBatis 会将结果集自动映射到 JavaBean 中

参数的传递说明:
    使用#{参数名},类似于JDBC的PreparedStatement 参数  
String sql = "SELECT id,NAME,url FROM UserInfo WHERE NAME LIKE CONCAT ('%',?,'%')";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1,userName);

​select标签常用属性

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

传递多个参数

现在需要根据 id 和 name 来模糊查询用户信息,显然这涉及到了两个参数。给映射器传递多个参数分为以下三种方法。
  1. 使用Map传递参数
  2. 使用注解传递参数
  3. 使用JavaBean传递参数

下面分别讲解这 3 种方法的具体实现。

1. 使用Map传递参数

使用 MyBatis 提供的 Map 接口作为参数实现,如下所示
 

 
 <!-- 根据name和notes模糊查询用户信息 -->
<select id="selectUserInfoByMap" resultType="com.java265.po.UserInfo" parameterType="map">
SELECT id,NAME,notes  FROM UserInfo
WHERE name LIKE CONCAT ('%',#{name},'%')
AND notes  LIKE CONCAT ('%',#{notes  },'%')
</select>

 在 UserInfoMapper 接口中,方法:
public list<UserInfo> selectUserInfoByMap(Map<String, String> params);


测试代码如下=---
Map<String,String> paramsMap = new HashMap<String,String>();
paramsMap.put("name","java");
paramsMap.put("notes  ","java265");
UserInfoMapper.selectUserInfoByMap(paramsMap);

使用 Map 传递参数对于大数据传送将非常方便,
但是设置参数需键值对,业务关联性不强,使代码可读性变的非常差,笔者不建议大家使用map传送参数 

简单易用,但是由于这样设置参数需要键值对应,业务关联性不强,开发人员需要深入到程序中看代码,造成可读性下降。

2. 使用注解传递参数

使用 MyBatis 的注解 @Param() 传递参数,如下所示。
<select id="selectUserInfoByAn" resultType="com.java265.po.UserInfo">
SELECT id,NAME,notes  FROM UserInfo
WHERE name LIKE CONCAT ('%',#{name},'%')
AND notes  LIKE CONCAT ('%',#{notes  },'%')
</select>

UserInfoMapper 接口中方法如下。
public List<UserInfo> selectUserInfoByAn(@Param("name") String name, @Param("notes") String notes);

采用此种方式处理,当参数过多时,会增加代码的复杂度及程序的可读性 

3. 使用JavaBean传递参数

在参数过多的情况下,MyBatis 允许组织一个 JavaBean,通过简单的 setter 和 getter 方法设置参数,提高可读性。如下所示。
 
<select id="selectUserInfoByAn" resultType="com.java265.po.UserInfo">
SELECT id,NAME,notes FROM UserInfo
WHERE name LIKE CONCAT ('%',#{name},'%')
AND notes LIKE CONCAT ('%',#{notes},'%')
</select>

UserInfoMapper 接口中方法如下
  public List<UserInfo> selectUserInfoByAn(UserInfo userInfo);
以上就是JavaBean的方式向MyBatis传送参数信息

  
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/MyBatis/202107/536.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者