有的时候只对一个表作个简单的查询,不想去配置整个实体表的映射关系。
就想写个通用的不用每个实体表都要配置个<sqlMap resource="com/xxx/yyy.xml" />的方案;
以下为实现步骤,目前仅支持查询8个字段(可扩展),整个查询sql封装在sqlQuery属性中,要查询的表名、列名可随意。
比如只想查name、password两个字段,则其它字段可按以下写法,主要为了与xml配置文件中的resultMap="CommonBeanResult字段对应。
select name col1,password col2,'' col3,'' col4,'' col5,'' col6,'' col7,'' col8,'' sqlQuery from tableXX where id = 30000
1.加个CommonBean.java
public class CommonBean implements Serializable { private String sqlQuery; private String col1; private String col2; private String col3; private String col4; private String col5; private String col6; private String col7; private String col8;
2.加个commonQuery.xml配置如下(因为每次查询的列不固定,设置remapResults="true"为了不让缓存)
<resultMap id="CommonBeanResult" class="CommonBean"> <result property="col1" column="col1" /> <result property="col2" column="col2" /> <result property="col3" column="col3" /> <result property="col4" column="col4" /> <result property="col5" column="col5" /> <result property="col6" column="col6" /> <result property="col7" column="col7" /> <result property="col8" column="col8" /> <result property="sqlQuery" column="sqlQuery" /> </resultMap> <select id="CommonBean.queryByArgs" resultMap="CommonBeanResult" remapResults="true"> <![CDATA[ $sqlQuery$ ]]> </select>
3.调用时把整个sql封装在sqlQuery属性里面
CommonQuery param= new CommonQuery(); param.setSqlQuery("select name col1,password col2,'' col3,'' col4,'' col5,'' col6,'' col7,'' col8,'' sqlQuery from tableXX where id = 30000"); List<CommonBean> list = commonQueryMgr.queryByArgs(param);
用ibatis一段时间,只是在别人塔好的框架上进行简单肤浅的复制,没专门研究过,发现问题时上网找下,把看到的拼凑。
参考资料:http://blog.csdn.net/Yanyuxieyang/article/details/5361140
http://www.iteye.com/topic/39367
顺便在这边记下ibatis配置示例 =.=
(在Ibatis里,#val#,除了替换值,它都会加上一个单引号',所以sql中不需要加引号的话直接用$val$):
t.OPERATOR_ID = #operatorId#
t.OPERATOR_NAME like '%$operatorName$%'
t.OPERATOR_NAME like '%'||#operatorName#||'%'
t.DRAFTE_START_DATE>=trunc(#startDate#, 'dd')
以上只是个人开发经验小结,写不好的地方还请指教~