最近做的一个项目,自己搭建ORM层采用的是Ibatis框架,使用中遇到些理解出错之处。
记录自己使用的一些心得。
1 用MAP向ibatis配置文件传参问题
通常我们通过DAO调用配置文件时,加如下参数parameterClass="java.util.Map",在Dao中,我们调用map.put(key,value)方法,如下:
Map parms = new HashMap();
parms.put("startDate", example.getDatatime());
parms.put("endDate", getLastDayOfMonth(example.getDatatime()));
<select id="selectCountStatusByDate" resultClass="int" parameterClass="java.util.Map">
select count(*) from s_upload_log l where l.datatime between #startDate:VARCHAR# and #endDate:VARCHAR#
</select>
Map parms = new HashMap();
parms.put("startDate", example.getDatatime());
parms.put("endDate", getLastDayOfMonth(example.getDatatime()));
<select id="selectCountStatusByDate" resultClass="int" parameterClass="java.util.Map">
select count(*) from s_upload_log l where l.datatime between #startDate:VARCHAR# and #endDate:VARCHAR#
</select>
或者也可以用parameterClass="某个对象类型",Ibatis配置文件直接可以获取对象get方法的各个字段。
但如果我们不用parameterClass="某个对象类型"的话,将该对象put到Map中,那对应的Ibatis配置文件用到的对象中的各个值,可以获取的到吗?答案是肯定的,用法是将map的key作为配置文件的前缀,同时不指名parameterClass,就OK了,代码如下:
SUploadLog record = new SUploadLog();
Map map = new HashMap();
map.put("upload", record);
<update id="updateLogByTemplateId">
update S_UPLOAD_LOG
<dynamic prepend="set">
<isNotNull prepend="," property="upload.sname">
SNAME = #upload.sname:VARCHAR#
</isNotNull>
<isNotNull prepend="," property="upload.status">
STATUS = #upload.status:CHAR#
</isNotNull>
</dynamic>
where TEMPLATEID = #upload.templateid# and DATATIME=#upload.datatime#
</update>
SUploadLog record = new SUploadLog();
Map map = new HashMap();
map.put("upload", record);
<update id="updateLogByTemplateId">
update S_UPLOAD_LOG
<dynamic prepend="set">
<isNotNull prepend="," property="upload.sname">
SNAME = #upload.sname:VARCHAR#
</isNotNull>
<isNotNull prepend="," property="upload.status">
STATUS = #upload.status:CHAR#
</isNotNull>
</dynamic>
where TEMPLATEID = #upload.templateid# and DATATIME=#upload.datatime#
</update>
2 ##参数和$$参数的区别
Ibatis的配置XML中,#parm#和$parm$ 是有区别的,例如:
<select id="SELECT-MENU" parameterClass="java.util.Map" resultMap="Result4Menu">
select * from S_FUNCTION where SPARENT=#id#
</select>
<select id="SELECT-MENU" parameterClass="java.util.Map" resultMap="Result4Menu">
select * from S_FUNCTION where SPARENT=$id$
</select>
<select id="SELECT-MENU" parameterClass="java.util.Map" resultMap="Result4Menu">
select * from S_FUNCTION where SPARENT=#id#
</select>
<select id="SELECT-MENU" parameterClass="java.util.Map" resultMap="Result4Menu">
select * from S_FUNCTION where SPARENT=$id$
</select>
前者会做类型检查,而后者不会。
分享到:
相关推荐
废话连篇形容讲话冗长且充斥着不必要或无关紧要的内容。 示例:有些人在会议上废话连篇,往往让人感到厌烦。 5. **妙语双关**: 拼音:miao yu shuang guan 解释:双关,指一语双关,一个词语或句子同时含有两...
7. 对C语言书籍的评价与期望:作者在前言中表达了对现有C语言书籍的一些看法,认为多数书籍过于厚重且废话连篇,而他希望自己的作品能够精炼且直击要害。 8. 关于编程与实践教学的思想:作者提出了一种教学理念,即...
组织材料不当主要体现在三个方面:流水账式叙述、平分秋色、构思老套以及废话连篇。为避免这些问题,学生需要学会聚焦主题,突出重点。写作前,多观察生活,积累素材,记录下新颖的想法和观察,寻找与众不同的角度。...
培训中应避免含糊不清、废话连篇、照本宣科、私下交谈、责怪教具、说教、忽视问题、语速不稳定等问题,以确保培训的有效性和专业性。 以上内容详细阐述了培训的策略、方法和注意事项,旨在帮助培训师打造高效、实用...
此外,文档还提到了在沟通时说些模棱两可、废话连篇的话语,这种沟通方式使员工始终处于一种模糊的状态,难以推动问题的有效解决。而那些被称为“电话线”式的中层干部,他们只是简单地传递上级指示,缺乏独立思考和...
- **忌日记体叙事**:不要把文章写成日常琐事的流水账,应有明确的观点和逻辑,避免口语化的表达和废话连篇。 - **忌简单罗列**:文章需包含个人观点,不能仅仅是事实的堆砌。应有深度分析和结论,让读者看到作者...
3. **过长或过短**:文章长度不符合要求,过长可能导致废话连篇,过短则可能遗漏必要的信息。 4. **语法错误**:常见的语法错误,如时态、主谓一致、冠词使用不当等。 5. **拼写错误**:简单的拼写错误会严重影响...
### 常用英文口语日常生活口语表达 #### I am speechless. 我无语了。 - **知识点**:这句话表达了一种强烈的惊讶或无言以对的情绪。通常用于当某人遇到令人震惊、意外或者非常难以置信的情况时。...
(1)拒绝废话连篇 拒绝讲了半天唧唧哇哇式讲解, 该课直接上干货.(2)拒绝DEMO式讲解, 不是写几个demo,叫学生下来做, 项目就讲完了.(3)拒绝一堆空理论,不落地技术实战.(4)拒绝 没有做个真实项目的讲师讲解. ...