首页 新闻 会员 周边 捐助

学习Mybatis时的一些疑问

0
悬赏园豆:20 [已解决问题] 解决于 2016-06-03 14:44

最近在学习Mybatis,遇到一些疑问。

表如下:student

id           name          sex

1            stu1           男

2            stu2           男

3            stu2           女

4            name1        男

5            name2        女

通过id,我会查询,比如查询 id = 3,则 userMapper.xml 里sql语句:

<select id="getStu" parameterType="int"
  resultType="com.model.Student">
  select * from users where id=#{id}
</select>

但是如果我想查询名字以“stu”开始的所有学生,也就是说模糊查询,这个该怎么做?

我这样做还是不行,如下(operator是我封装的工具类,没有问题):

java代码:

final String getSomeUsers = "com.mapper.userMapper.getSomeUsers";
final String str = "name";
final Map<String, String> parameterMap = new HashMap<String, String>();
parameterMap.put("str", str);
final List<Student> list = operator.selectSome(configPath, getSomeUsers, parameterMap);

userMapper.xml 里sql语句:

<select id="getSomeUsers" parameterType="java.util.Map" resultType="java.util.List">
select * from users where name = '${str}'
</select>

这样做查不到结果,还报异常,这也是我在网上查了一下资料写出了的,而且为什么要用${str},而不是#{str},我也不是很明白。

 

简单点的名字的主页 简单点的名字 | 初学一级 | 园豆:133
提问于:2016-05-30 14:46
< >
分享
最佳答案
0

1、使用 ${...} 代替 #{...}

   SELECT * FROM tableName WHERE name LIKE '%${text}%';  

2、   SqlMap.xml

   SELECT * FROM tableName WHERE name LIKE #{text};

简略的可有这两种。原文参考:http://blog.csdn.net/luqin1988/article/details/7865643

收获园豆:20
Ctrl` | 老鸟四级 |园豆:3317 | 2016-05-30 15:00

我看过,没用

简单点的名字 | 园豆:133 (初学一级) | 2016-05-30 15:02

@简单点的名字: 为什么

Ctrl` | 园豆:3317 (老鸟四级) | 2016-05-30 15:07

@g皓皓: 不明白,报了一个异常,如下:

### Error querying database. Cause: org.apache.ibatis.executor.ExecutorException: A query was run and no Result Maps were found for the Mapped Statement 'com.mapper.userMapper.get'. It's likely that neither a Result Type nor a Result Map was specified.
### The error may exist in com/mapper/userMapper.xml
### The error may involve com.mapper.userMapper.get-Inline
### The error occurred while setting parameters
### SQL: select * from users where name like 'name%'

简单点的名字 | 园豆:133 (初学一级) | 2016-05-30 15:18

我明白了,我的userMapper.xml文件之前写的是:

<select id="get" parameterType="hashMap" resultType="java.util.List">
  select * from users where name like '${str}%'
</select>

现在修改如下,就查询出来了:

<select id="get" parameterType="hashMap" resultType="com.model.Student">
  select * from users where name like '${str}%'
</select>

但是我还是有点不明白,返回的结果明明是list集合,为什么resultType要设置成javaBean呢?

简单点的名字 | 园豆:133 (初学一级) | 2016-05-30 15:25

我还有一个问题,那是不是每次的查询都得有一个javabean与之对应呢?那javabeen也太多了吧,比如我这样查询:

select name from student where sex='男';

假如不使用Student这个JavaBeen的话,那resultType怎么设置?

简单点的名字 | 园豆:133 (初学一级) | 2016-05-30 15:30

@简单点的名字: 好久没用了。只记大概。上面sex=“male”这个。你可以用resultType="java.Long.String"试试。

如果bean多的话、并没多麻烦。还有个resultMap的类型供参考。或者(框架允许的话)、直接parameterClass=“实体类路径”。也可直接获取实体类java.class类名

Ctrl` | 园豆:3317 (老鸟四级) | 2016-05-30 15:49

@简单点的名字: 我明白了,可以返回一个List<Map>,如下:

<select id="get" parameterType="hashMap" resultType="hashmap">
  select name from student where name like '${str}%' and sex='男'
</select>

返回的字段可以用map接收,每一条记录都是list里面的一条数据,终于懂了!

简单点的名字 | 园豆:133 (初学一级) | 2016-05-30 15:50

@简单点的名字: 对的、懂了记得结贴%>_<%

Ctrl` | 园豆:3317 (老鸟四级) | 2016-05-30 17:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册