https://benworld.iteye.com/blog/1748886
首页 资讯 精华 论坛 问答 博客 专栏 群组
您还未登录 ! 登录
`
J2EE大鸟
最近访客 更多访客>>
NOthingAj
17865426202
qq_15946053
svgtx
博主相关
博客专栏
浙大软院考研
浏览量:12134
文章分类
社区版块
存档分类
最新评论
在项目中,使用的是mybatis3.0.5,但没有采用其提供的DAO层接口映射的策略,而且在进行多种属性联合查找时,需要底层提供通用的解决方案,所以需要mybatis直接执行sql语句,各个daoImpl均可调用,减少了在每个mybatis文件中配置符合当前对象的select查询。。
(在mybatis中,需要通过传递对象,在select中判断对象属性是否为空进行where语句的拼凑,对后期的维护工作带来不小的考验,所以采用直接执行sql策略)
先说一说配置时,遇到的异常:
Xml代码
这样配置时,会出现:there no getter sql in java.lang.String 的异常
所以考虑:用一个适配器,将sql作为属性加入其中
首先:
Xml代码
其次:
Java代码
最后:
Xml代码
注意,不要忘记在调用该select方法时,用new SqlAdapter("自己写的sql语句")作为参数哦。。。
搞定。。
String table=create table if not exists a inherits b; //创建表的语句
partitionMapper.execute(table);
void execute(@Param("sql") String sql);
${sql}
执行各种创建,删除,更新sql.
上面那个执行查询的sql
这些是mybatis的功能。
想更深入了解,请浏览 mybatis/ibatis直接执行sql语句后续
Python正确的学习路线,你一定不知道的薪资翻倍秘
如何从8K提至20K月薪,你要掌握学习那些技能
6
顶
5
踩
分享到:
MyBatis直接执行SQL查询及批量插入数据 | mybatis 主键自增 insert后返回主键
评论
29 楼 xsldlm 2012-12-20
真能折腾人的,这个直接写 value 不就可以了?
28 楼 JustDone 2012-12-19
这思路挺好
27 楼 J2EE大鸟 2012-12-18
bingoohuang 写道
我自己实现了一个Esql, 比IBatis更加简单易用,不过在产品化上还差一步。
Java代码
Sql代码
示例代码在:https://github.com/AL-WUHC2/n3r-core/blob/master/src/test/java/org/n3r/esql/demo/EsqlDemo.java
示例SQL在:https://github.com/AL-WUHC2/n3r-core/blob/master/src/test/resources/org/n3r/esql/demo/EsqlDemo.esql
好的,有空研究下。。
26 楼 J2EE大鸟 2012-12-18
kjj 写道
楼主,你还别说,你这个思路我还真觉得挺新颖的,我一直想用mybatis,但是xml里写sql还真有些蛋疼
这个问题我也是想了很久,除了必要的依赖对应关系以及查询条件不复杂的select写在了xml中,像 [where ... order by ... limit ... ] 还是自己维护比较方便。。另外,如果查询条件中有大于小于号,在xml中还得用转义符号。。
25 楼 bingoohuang 2012-12-18
我自己实现了一个Esql, 比IBatis更加简单易用,不过在产品化上还差一步。
Java代码
Sql代码
示例代码在:https://github.com/AL-WUHC2/n3r-core/blob/master/src/test/java/org/n3r/esql/demo/EsqlDemo.java
示例SQL在:https://github.com/AL-WUHC2/n3r-core/blob/master/src/test/resources/org/n3r/esql/demo/EsqlDemo.esql
24 楼 kjj 2012-12-18
楼主,你还别说,你这个思路我还真觉得挺新颖的,我一直想用mybatis,但是xml里写sql还真有些蛋疼
23 楼 J2EE大鸟 2012-12-18
jixian3204 写道
${sql} 改成#{sql}呢?
那更不行啦。。
MyBatis看到 #{}会认为你在给sql中的变量赋值,就像JDBC编程中给问号赋值一样(比如MyBatis会判断它的类型,并自动在前后加单引号)。而当MyBatis看到${}的时候会直接将之替换成变量的值而不做任何处理。
22 楼 jixian3204 2012-12-18
${sql} 改成#{sql}呢?
21 楼 J2EE大鸟 2012-12-18
jixian3204 写道
这样配置时,会出现:there no getter sql in java.lang.String 的异常
这是因为配置parameterType="String"有问题
parameterType后跟具体类名
或者是
org.apache.ibatis.type.TypeAliasRegistry中注册的类型,你应该写parameterType="string"才对。
你说的我也试过,也是不行的,同样还是抛there no getter sql in java.lang.String 的异常
20 楼 jixian3204 2012-12-18
这样配置时,会出现:there no getter sql in java.lang.String 的异常
这是因为配置parameterType="String"有问题
parameterType后跟具体类名
或者是
org.apache.ibatis.type.TypeAliasRegistry中注册的类型,你应该写parameterType="string"才对。
19 楼 J2EE大鸟 2012-12-18
jixian3204 写道
你的sql应该不会被,mybatis缓存的
你说的很可能是对的,按主键查询和外键之间的查询,还是按照mybatis的标准配置来进行,
如果查询条件很多,而且又包含order by及分页数据,自己维护应该要容易一点,因为order by的数据需要用linkedmap,而查询条件用hashmap就够了。。所以我还是写了一个父类,让每个daoImpl去继承,在父类中写一个抽象方法帮助我们拼接sql语句。。
18 楼 jixian3204 2012-12-18
你的sql应该不会被,mybatis缓存的
17 楼 J2EE大鸟 2012-12-17
longfor5 写道
楼主是怎么处理参数的?有没有sql注入问题?
sql参数是通过键值对的形式传递的,比如
servlet接受到参数后,将参数放入map中,
map.put("username","小")
map.put("address","杭州")
然后将数据传递至数据访问层,对map进行遍历,拼出where语句。。
sql注入的问题没有考虑过,但由于是自己写的sql语句,肯定有方法能够检测,这还有待研究啊。。
16 楼 J2EE大鸟 2012-12-17
hamber 写道
SQL参数,预处理如何处理先?
sql参数是通过键值对的形式传递的,比如
servlet接受到参数后,将参数放入map中,
map.put("username","小")
map.put("address","杭州")
然后将数据传递至数据访问层,对map进行遍历,拼出where语句。。
15 楼 longfor5 2012-12-17
楼主是怎么处理参数的?有没有sql注入问题?
14 楼 hamber 2012-12-17
SQL参数,预处理如何处理先?
13 楼 J2EE大鸟 2012-12-17
kevincollins 写道
比如在下面这种情况下,可能只想些一条sql。
你的这种写法没错,但是在项目中,尤其是类似于依赖对应关系(一对多,多对多)很多的情况下,这样的维护往往是令我们吃不消的。往往依靠mybatis提供的association和collection帮助我们维护。。
在进行组合条件查询时,我们一般都会将select * from table [where ... order by ... limit ... ] 中 [...]写成通用方法,供每个daoImpl去引用
12 楼 J2EE大鸟 2012-12-17
lvwenwen 写道
麻烦楼主把工程共享出来,谢谢
嗯,过几天我整理一下。。
11 楼 J2EE大鸟 2012-12-17
kevincollins 写道
作者说的 是mybatis 运行期 获取xml中定义的 sql语句吧?
拿到这个sql ,然后再动态进行各种拼接。
是我们自己写一个sql语句,直接让mybatis执行
select * from table [where ... order by ... limit ... ]
在[...]中,我们可以自己在dao层通过抽象通用方法,拼接出来符合自己业务逻辑的条件。。
10 楼 J2EE大鸟 2012-12-17
jeffsc 写道
resultType="java.util.Map",返回一个Map对象也是可以的
嗯,这要看我们写的sql语句返回的内容是什么了。。
select * from ... 用map就不合适了。。
« 上一页 1 2 下一页 »
发表评论
您还没有登录,请您登录后再发表评论
相关资源推荐
在项目中,使用的是mybatis3.0.5,但没有采用其提供的DAO层接口映射的策略,而且在进行多种属性联合查找时,需要底层提供通用的解决方案,所以需要mybatis直接执行sql语句,各个daoImpl均可调用,减少了在每个mybatis文件中配置符合当前对象的select查询。。 (在mybatis中,需要通过传递对象,在select中判断对象属性是否为空进行where语句的拼凑,对后期...
1、正常情况下,我们在xml中写sql的时候,格式是这样的(以insert语句为例)<!-- 新增实体 --> <insert id="XXX" parameterClass="com.XX.XX.XXX"> insert into tableName ( key1, key2, key3, key4) values( value1,...
有时候,为了代码灵活,便于修改,要直接向IBatis传入完整的SQL语句。ibatis map 文件如下:
#将ibatislog4j运行级别调到DEBUG可以在控制台打印出ibatis运行的sql语句log4j.rootLogger=debug,stdout,logfile ### 把日志信息输出到控制台 ### log4j.appender.stdout=org.apache.log4j.ConsoleAppender #log4j.appender.stdout.Target=Syste
mybatis如何直接 执行传入的任意sql语句 并按照顺序取出查询的结果集 需求: 1.直接执行前端传来的任何sql语句,parameterType="String", 2.对于任何sql语句,其返回值类型无法用resultMap在xml文件里配置或者返回具体的bean类型,因此设置resultType="java.util.Map",但是Map并不保证...
本人使用SpringMVC架构+ibatis
Mybatis 直接执行SQL好久不更新博客了,今天开发遇到一个问题就是如何在mybatis中直接执行sql,直接上代码:上网查了下,网上的解释是: 使用${}代
从离职的同事那里接手了一个项目开始改bug,然后就接触到了ibatis。然后有个bug是查询到的数据和预期的不一样,改来改去还是不一样。最后只能祭出杀手锏,把ibatis运行时的动态SQL打印出来,发现SQL语句压根就没刷新啊,摔。咳咳,下面讲如何获取ibatis运行时的动态SQL以及其参数。 假设我想获得这段调了ibatis接口的java代码所执行的sql语句以及其参数: n = (
mybatis如何直接 执行传入的任意sql语句 并按照顺序取出查询的结果集 需求: 1.直接执行前端传来的任何sql语句,parameterType="String", 2.对于任何sql语句,其返回值类型无法用resultMap在xml文件里配置或者返回具体的bean类型,因此设置resultType="java.util.Map",但是Map并不保证存入取出顺序一致, 因此设置resultT
在用iBatis.net与数据库打交道的过程中,发现iBatis.net拼接字符串不能直接拷贝然后在dbms里执行(获取runtime时的sql语句都是带@param1,@param2,@param3,...这样的形式)。有时候sql语句一个小小的标点(都怪自己学艺不精,呵呵)都会造成执行错误。其实,直接手写的sql字符串也可以通过iBatis来执行,而且支持select,insert,delet
转载地址:http://www.cnblogs.com/xrq730/p/6972268.html Plugins 摘一段来自MyBatis官方文档的文字。 MyBatis允许你在某一点拦截已映射语句执行的调用。默认情况下,MyBatis允许使用插件来拦截方法调用 Executor(update、query、flushStatements、commint、rol
#将ibatis log4j运行级别调到DEBUG可以在控制台打印出ibatis运行的sql语句log4j.rootLogger=debug,stdout,logfile ### 把日志信息输出到控制台 ### log4j.appender.stdout=org.apache.log4j.ConsoleAppender #log4j.appender.stdout.Target=System.er
mybatis源码学习及分析之执行过程分析(4)——映射文件中sql的获取和sql语句的执行在上一篇中分析了XXXMapper接口的获取,其实质上拿到的是一个MapperProxy。这一篇主要分析sql的执行。MapperProxy.java private final SqlSession sqlSession; //接口名字记录在这里 private final Class
执行SQL时,需要关注其执行时花费的时间,避免SQL执行过长的时间,占用数据库的资源。对于OLTP类型的系统,SQL的执行时间一般来说都是比较短的,假如某个SQL执行时间超出平均值,则需要给予特别的关注,分析下是正常情况还是代码问题。 SQL执行时间过长,会有哪些后果呢?假如查询操作频率不高,偶尔才会执行一次,那么最多只会占用一个数据库链接,并且在执行成功之后,程序打开的数据库链接对象即会被释放
【本文原创,第一次离首页如此之近。发在候选区攒攒rp,管理员看着不合适可以撤下。】 虽然只在iBatis的世界里小打小闹匆匆数月,却历经数次与领导和同事激辩,再通过不懈努力学习和开发积累,楼猪终于被它小巧而不失强大,稳定而不失灵活所折服。作为80后顽固、偏执和nc一族,楼猪一向保守认为自己是美貌与智慧并存的。仗着天资聪慧,在之前的“iBatis.net直接执行sql语句”里曾经公然抱怨i
解决方案: 1.增加sqlmap.properties 定义里面内容:全局变量 [code="java"] dbSchema1=cl4motdta. dbSchema2=pbsec6m. dbSchema3=cl4devdta.[/code] 2.修改sqlmap-config.xml [code="java"] [/code] 3.运用到sqlmap [co...
在项目开发中,需要根据具体业务逻辑动态拼接sql语句,那么我们可以将动态拼接好的sql语句传入mybatis中,这样便能最大限度将sql掌握在自己手里。
#将ibatislog4j运行级别调到DEBUG可以在控制台打印出ibatis运行的sql语句log4j.rootLogger=debug,stdout,logfile ### 把日志信息输出到控制台 ### log4j.appender.stdout=org.apache.log4j.ConsoleAppender #log4j.appender.stdout.Target=Sys
为什么要怎么做有这么一个应用场景:需要在Mybatis框架上进行多个连接池的配置,然后进行多种SQL语句的测试,因为有些SQL语句的结构比较复杂,有些会涉及到很多group by、join操作还有一些聚集函数的使用,同时数据量又较大
mybatis一次执行多条SQL语句,例如update节点
mybatis/ibatis直接执行sql语句
2012-12-17 8在项目中,使用的是mybatis3.0.5,但没有采用其提供的DAO层接口映射的策略,而且在进行多种属性联合查找时,需要底层提供通用的解决方案,所以需要mybatis直接执行sql语句,各个daoImpl均可调用,减少了在每个mybatis文件中配置符合当前对象的select查询。。 (在mybatis中,需要通过传递对象,在select中判断对象属性是否为空进行where语句的拼凑,对后期...
ibatis、mybatis—有关在xml中写sql的小技巧(持续更新中)
2018-04-09 1971、正常情况下,我们在xml中写sql的时候,格式是这样的(以insert语句为例)<!-- 新增实体 --> <insert id="XXX" parameterClass="com.XX.XX.XXX"> insert into tableName ( key1, key2, key3, key4) values( value1,...
IBatis 怎样直接执行SQL语句
2016-02-17 3023有时候,为了代码灵活,便于修改,要直接向IBatis传入完整的SQL语句。ibatis map 文件如下:
配置mybatis和ibatis控制台打印sql语句
2015-11-12 5721#将ibatislog4j运行级别调到DEBUG可以在控制台打印出ibatis运行的sql语句 log4j.rootLogger=debug,stdout,logfile ### 把日志信息输出到控制台 ### log4j.appender.stdout=org.apache.log4j.ConsoleAppender #log4j.appender.stdout.Target=Syste
mybatis如何直接 执行传入的任意sql语句 并按照顺序取出查询的结果集
2017-09-04 23mybatis如何直接 执行传入的任意sql语句 并按照顺序取出查询的结果集 需求: 1.直接执行前端传来的任何sql语句,parameterType="String", 2.对于任何sql语句,其返回值类型无法用resultMap在xml文件里配置或者返回具体的bean类型,因此设置resultType="java.util.Map",但是Map并不保证...
SQL 客户端执行快 java执行慢 ibatis
2014-08-14 3471本人使用SpringMVC架构+ibatis
Mybatis 直接执行SQL
2016-06-02 13144Mybatis 直接执行SQL好久不更新博客了,今天开发遇到一个问题就是如何在mybatis中直接执行sql,直接上代码:上网查了下,网上的解释是: 使用${}代
ibatis获取运行时的动态SQL语句及其参数
2016-09-07 3040从离职的同事那里接手了一个项目开始改bug,然后就接触到了ibatis。然后有个bug是查询到的数据和预期的不一样,改来改去还是不一样。最后只能祭出杀手锏,把ibatis运行时的动态SQL打印出来,发现SQL语句压根就没刷新啊,摔。咳咳,下面讲如何获取ibatis运行时的动态SQL以及其参数。 假设我想获得这段调了ibatis接口的java代码所执行的sql语句以及其参数: n = (
mybatis如何直接 执行传入的任意sql语句 并按照顺序取出查询的结果集
2017-09-13 2227mybatis如何直接 执行传入的任意sql语句 并按照顺序取出查询的结果集 需求: 1.直接执行前端传来的任何sql语句,parameterType="String", 2.对于任何sql语句,其返回值类型无法用resultMap在xml文件里配置或者返回具体的bean类型,因此设置resultType="java.util.Map",但是Map并不保证存入取出顺序一致, 因此设置resultT
iBATIS.net直接执行sql语句
2015-04-21 2743在用iBatis.net与数据库打交道的过程中,发现iBatis.net拼接字符串不能直接拷贝然后在dbms里执行(获取runtime时的sql语句都是带@param1,@param2,@param3,...这样的形式)。有时候sql语句一个小小的标点(都怪自己学艺不精,呵呵)都会造成执行错误。其实,直接手写的sql字符串也可以通过iBatis来执行,而且支持select,insert,delet
MyBatis插件及示例----打印每条SQL语句及其执行时间
2017-06-30 563转载地址:http://www.cnblogs.com/xrq730/p/6972268.html Plugins 摘一段来自MyBatis官方文档的文字。 MyBatis允许你在某一点拦截已映射语句执行的调用。默认情况下,MyBatis允许使用插件来拦截方法调用 Executor(update、query、flushStatements、commint、rol
如何在控制台输出mybatis所执行的SQL语句(配置LOG4J文件)
2017-08-23 431#将ibatis log4j运行级别调到DEBUG可以在控制台打印出ibatis运行的sql语句 log4j.rootLogger=debug,stdout,logfile ### 把日志信息输出到控制台 ### log4j.appender.stdout=org.apache.log4j.ConsoleAppender #log4j.appender.stdout.Target=System.er
mybatis源码学习之执行过程分析(4)——映射文件中sql的获取和sql语句的执行
2017-01-04 1572mybatis源码学习及分析之执行过程分析(4)——映射文件中sql的获取和sql语句的执行在上一篇中分析了XXXMapper接口的获取,其实质上拿到的是一个MapperProxy。这一篇主要分析sql的执行。MapperProxy.java private final SqlSession sqlSession; //接口名字记录在这里 private final Class
iBatis应用--控制执行SQL时的超时时间
2013-01-02 6458执行SQL时,需要关注其执行时花费的时间,避免SQL执行过长的时间,占用数据库的资源。对于OLTP类型的系统,SQL的执行时间一般来说都是比较短的,假如某个SQL执行时间超出平均值,则需要给予特别的关注,分析下是正常情况还是代码问题。 SQL执行时间过长,会有哪些后果呢?假如查询操作频率不高,偶尔才会执行一次,那么最多只会占用一个数据库链接,并且在执行成功之后,程序打开的数据库链接对象即会被释放
iBATIS.net获取运行时sql语句
2015-04-20 2282【本文原创,第一次离首页如此之近。发在候选区攒攒rp,管理员看着不合适可以撤下。】 虽然只在iBatis的世界里小打小闹匆匆数月,却历经数次与领导和同事激辩,再通过不懈努力学习和开发积累,楼猪终于被它小巧而不失强大,稳定而不失灵活所折服。作为80后顽固、偏执和nc一族,楼猪一向保守认为自己是美貌与智慧并存的。仗着天资聪慧,在之前的“iBatis.net直接执行sql语句”里曾经公然抱怨i
微信客服
QQ客服
客服论坛400-660-0108
工作时间 8:30-22:00
关于我们招聘广告服务 网站地图
百度提供站内搜索 京ICP证09002463号
©1999-2019 江苏乐知网络技术有限公司
江苏知之为计算机有限公司 北京创新乐知信息技术有限公司版权所有
经营性网站备案信息网络110报警服务
北京互联网违法和不良信息举报中心
中国互联网举报中心
Global site tag (gtag.js) - Google Analytics