- dynamic可以去除第一个prepend="and"中的字符(这里为and),从而可以帮助你实现一些很实用的功能。具体情况如下:
- 1.使用dynamic
- 1.1 xml
- select * from Person表
- <dynamic prepend="where">
- <isNotNull property="name" prepend="and">
- name=#name#
- </isNotNull>
- <isNotNull property="sex" prepend="and">
- sex=#sex#
- </isNotNull>
- </dynamic>
- 1.2 结果
- 当name、sex都非null时打出如下的sql语句:
- select Person表 where (and) name= ? , and sex= ?
- 显然name前的and被自动去除了,很方便吧。
- 2.不使用dynamic
- 2.1 xml
- 如果我把dynamic 去掉就会变的很恶心,如下:
- select * from Person表
- <isNotNull property="name" prepend="and">
- name=#name#
- </isNotNull>
- <isNotNull property="sex" prepend="and">
- sex=#sex#
- </isNotNull>
- 2.2 结果
- 当name、sex都非null时打出如下的sql语句:
- select Person表 where and name= ? , and sex= ?
- 显然name前多个and,sql语句错误。
- 3.总结
- dynamic 会自动去除第一个 prepend="and中的内容(这里为and),从而方便一些操作。
解決and存在問題 在开发过程 中 sql 语句后面写上where 1=1
这样就算不适用dynamic 也不需要消除and 就可以使用sql语句不会报错
SELECT * FROM (SELECT ROWS_.*, ROWNUM ROWNUM_ FROM (select user_id, user_name, status, user_type, organ_id, login_name, password, tel, email, sex from sys_user where 1 = 1 and sys_user.user_id = 114833 order by user_id) ROWS_ WHERE ROWNUM <= 10) WHERE ROWNUM_ >= 1