最近在学习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},我也不是很明白。
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
我看过,没用
@简单点的名字: 为什么
@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%'
我明白了,我的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呢?
我还有一个问题,那是不是每次的查询都得有一个javabean与之对应呢?那javabeen也太多了吧,比如我这样查询:
select name from student where sex='男';
假如不使用Student这个JavaBeen的话,那resultType怎么设置?
@简单点的名字: 好久没用了。只记大概。上面sex=“male”这个。你可以用resultType="java.Long.String"试试。
如果bean多的话、并没多麻烦。还有个resultMap的类型供参考。或者(框架允许的话)、直接parameterClass=“实体类路径”。也可直接获取实体类java.class类名
@简单点的名字: 我明白了,可以返回一个List<Map>,如下:
<select id="get" parameterType="hashMap" resultType="hashmap">
select name from student where name like '${str}%' and sex='男'
</select>
返回的字段可以用map接收,每一条记录都是list里面的一条数据,终于懂了!
@简单点的名字: 对的、懂了记得结贴%>_<%