<select id="selectAllWebsite" resultType="net.biancheng.po.Website" parameterType="string"> SELECT id,NAME,url FROM website WHERE NAME LIKE CONCAT ('%',#{name},'%') </select>以上是一个 id 为 selectAllWebsite 的映射语句,参数类型为 string,返回结果类型为 Website。
#{参数名}
,相当于告诉 MyBatis 生成 PreparedStatement 参数。对于 JDBC,该参数会被标识为“?”。以上 SQL 语句可以使用 JDBC 实现,实现代码如下。String sql = "SELECT id,NAME,url FROM website WHERE NAME LIKE CONCAT ('%',?,'%')"; PreparedStatement ps = conn.prepareStatement(sql); ps.setString(1,userName);
属性名称 | 描 述 | 备注 |
---|---|---|
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(双向滚动,及时更新) | - |
<!-- 根据name和url模糊查询网站信息 --> <select id="selectWebsiteByMap" resultType="net.biancheng.po.Website" parameterType="map"> SELECT id,NAME,url FROM website WHERE name LIKE CONCAT ('%',#{name},'%') AND url LIKE CONCAT ('%',#{url},'%') </select>在 WebsiteMapper 接口中,方法如下。
public List<Website> selectWebsiteByMap(Map<String, String> params);测试代码如下。
Map<String,String> paramsMap = new HashMap<String,String>(); paramsMap.put("name","编程"); paramsMap.put("url","biancheng"); websiteMapper.selectWebsiteByMap(paramsMap);使用 Map 传递参数虽然简单易用,但是由于这样设置参数需要键值对应,业务关联性不强,开发人员需要深入到程序中看代码,造成可读性下降。
<!-- 根据name和url模糊查询网站信息 --> <select id="selectWebsiteByAn" resultType="net.biancheng.po.Website"> SELECT id,NAME,url FROM website WHERE name LIKE CONCAT ('%',#{name},'%') AND url LIKE CONCAT ('%',#{url},'%') </select>WebsiteMapper 接口中方法如下。
public List<Website> selectWebsiteByAn(@Param("name") String name, @Param("url") String url);当我们把参数传递给后台时,MyBatis 通过 @Param 提供的名称就会知道 #{name} 代表 name 参数,提高了参数可读性。但是如果这条 SQL 拥有 10 个参数的查询,就会造成可读性下降,增强了代码复杂性。
<!-- 根据name和url模糊查询网站信息 --> <select id="selectWebsiteByAn" resultType="net.biancheng.po.Website"> SELECT id,NAME,url FROM website WHERE name LIKE CONCAT ('%',#{name},'%') AND url LIKE CONCAT ('%',#{url},'%') </select>WebsiteMapper 接口中方法如下。
public List<Website> selectWebsiteByAn(Website website);这就是通过 JavaBean 传递多个参数的方式。
本文链接:http://task.lmcjl.com/news/18738.html