ibatis 多个参数的查询

转载自:http://yhjhappy234.blog.163.com/blog/static/31632832200982785927250/
作者:一线天色
作者博客:http://yhjhappy234.blog.163.com/

在ibatis中,会发现其输入参数只能有一个,于是当出现需要进行多个输入参数的时候,就要想点办法了,我看到的有以下两种比较好的方法能够解决这个问题
1) 用String代替
<select id="checkLogin" parameterClass="java.lang.String" resultClass="java.lang.Integer">
SELECT count(*) AS value FROM userinfo WHERE $sql$
</select>
比如如上的map statement代码中,将输入的参数设置为String类型,而在select语句中直接使用该String,于是用户可以在Java程序代码中手工植入需要匹配的参数。

String sql = "uid = '" + username + "' and pwd='" + password + "'";
Integer r = (Integer) sqlMap.queryForObject("checkLogin", sql);

这个方法很简单,但是弊端也很多。首先得需要用户自己手动写sql语句代码在java中,这与ibatis的本质要将数据层的操作和业务逻辑操作分隔开来是违背的。其次,这个办法可能会被利用造成sql injection的问题。比如在sql语句的最后加上一句;drop some table。这样的结果显而易见,就是灾难性的。

2)[color=red]用 Map [/color]<select id="checkLogin2" parameterClass="java.util.Map" resultClass="java.lang.Integer">
SELECT count(*) AS value FROM userinfo WHERE uid=#uid# and pwd=#pwd#
</select>

[color=red]这种办法显得要清楚的很多,也不需要自己手动编写sql到java之中[/color]。
Map map=new HashMap();
map.put("uid", username);
map.put("pwd", password);
Integer r = (Integer) sqlMap.queryForObject("checkLogin2", map);

[color=red]在java中首先生成需要的map,然后作为输入参数传入即可[/color]。这个方法应该是比较好的,值得推荐。

3)也有人采用根据需要编写javaBean的方法,但是这个方法的弊病在于如果你的逻辑操作涉及到很多的不同的属性的组合,你就会浪费很多资源去生成各种各样的bean。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iBatis 中,可以使用注解方式执行 SQL 查询并返回多个实体类。首先,需要在需要返回的实体类中使用 `@Alias` 注解指定别名,以便在 SQL 查询中引用。 接下来,在执行 SQL 查询的方法上使用 `@Select` 注解指定 SQL 语句,并通过 `resultMap` 属性指定返回结果的映射关系。在 `resultMap` 中,可以通过 `@Result` 注解指定每个属性的映射关系。 以下是一个示例代码: ```java public interface MyMapper { @Select("SELECT a.id AS id, a.name AS name, b.email AS email FROM table_a a JOIN table_b b ON a.id = b.a_id WHERE a.id = #{id}") @Results(id = "myResultMap", value = { @Result(property = "id", column = "id"), @Result(property = "name", column = "name"), @Result(property = "email", column = "email") }) List<MyEntity> getEntitiesById(@Param("id") int id); } public class MyEntity { @Alias("id") private int id; @Alias("name") private String name; @Alias("email") private String email; // Getters and setters } ``` 在这个例子中,`MyMapper` 接口定义了一个方法 `getEntitiesById`,使用 `@Select` 注解指定了 SQL 查询语句,并使用 `@Results` 注解通过 `@Result` 注解指定了结果映射关系。`MyEntity` 类中的属性使用 `@Alias` 注解指定了别名,以与 SQL 查询语句中的列名相匹配。 当需要执行该查询并返回多个实体类时,只需要调用 `getEntitiesById` 方法并传入相应的参数即可。返回的结果将会是一个包含多个 `MyEntity` 对象的列表。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值