mybatis sqlmap能否、如何直接使用IN + 字符串

来源:本网整理

不会报错吧!mybatis只管取值,根本就不会关心你的map里都有什么类型的数据。报错可能的情况是key对应的值与数据库的类型不匹配www.zgxue.com防采集请勿采集本网。

先上示例代码(还是以总出来露面的学生为例吧):

user和LawerCheckImg是吗?这个list用collection映射。xml version=\"1.0\"encoding=\"UTF-8?DOCTYPE mapper PUBLIC\"-/mybatis.org/DTD Mapper 3.0/EN\"

<select id="getStudentList" resultMap="StudentResultMap" parameterType="java.lang.String">

这个区别不是很大,最主要的区别就是mybatis简化了编码的过程,不需要去写dao的实现类,直接写一个dao的接口,再写一个xml配置文件,整个mybatis就配置好了,也就是数据库就连接好了,然后在

    SELECT STUDENT_ID, STUDENT_NAME

直接传个实体对象进去,在service层 JavaBean bean=new JavaBean();bean.setId(id);bean.setName(name);dao.insert(bean);上面的id,name等是service方法的各个参数 然后在myBatis 中的sql语句中

    FROM TB_STUDENT

翻了一下mybatis源码, 1、当你的传的参数类型是map的时候,sql入参的时候根据你写的key去找value,如果找不到mybatis并不会报异常,而是直接返回一个null作为value 2、如果传入的是bean参数,此时mybatis

    WHERE STUDENT_ID IN (#{ids})

mybatis只管取值,根本就不会关心你的map里都有什么类型的数据。报错可能的情况是key对应的值与数据库的类型不匹配

</select>

STUDENT_ID为NUMBER类型时,如果传入的ID有多个的话这样写肯定会有问题(比如ids为"701,702,703",会报ORA-01722: 无效数字),请问有没有高级点的写法能达到这种目的?

这个问题的情景是:比如我从MQ、文件或其他媒介中获取到一个字符串,里面包含了一系列的ID,它原本的值就可以作为查询条件,可是如何配置能够支持这种写法呢?

我知道把ID字符串分解成List或者Array然后使用foreach就可以实现,虽然这对执行时间和性能的几乎没有影响,但这毕竟绕了两步,如果能有更好的解决方式,我非常不愿意这样做。

使用框架就这点很不爽,拼个SQL都要被各种检查……之前直接用JDBC哪遇到过这些鸟问题。

我觉得这应该是很多人会遇到的一种情况,但求助于百度和身边的同事都没有结果,求osc上的同志指点。

完全可以啊,只不过你的#改成$ 前者是自动加'',后者原样输出,我通常都这么干的!一点问题都没有!

=======================其他用户的看法====================

<select id="selectBlogs" parameterType="map">SELECT * FROM blog WHERE user_id = #{user_id} AND blog_id IN<foreach item="tempId" collection="blogIdList" open="(" separator="," close=")">#{tempId}</foreach></select>

拿走  不谢

===========================================

就是你设置的那个parameterType="int这个xml对应的mapper里有个public void deleteById(int no);的方法,方法名和id="deleteById"对应,参数类型也要对应,然后传入的参数就赋值给了#{no}内容来自www.zgxue.com请勿采集。

免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
Copyright © 2017 www.zgxue.com All Rights Reserved