IBATIS的动态操作表笔记
来源:互联网 发布:tourex源码 编辑:程序博客网 时间:2024/06/07 01:28
·java代码:
package com.oa.common.table.dao;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.beanutils.PropertyUtils;
import org.springframework.orm.ibatis.SqlMapClientTemplate;
/**
* ZSGCAction.java
* <p>[类说明:增删改差的公共类]</p>
* @author: wangsheng
* @create: Mar 17, 2012 8:38:07 AM
*/
public class CommonProcessTableDaoImpl extends SqlMapClientTemplate implements ICommonProcessTableDao {
/**
* <p>[动态查看传入的表名是否存在]</p>
* @param tablename
* @return
* @return: Boolean true:表存在;false:表不存在。
* @author: wangsheng
* @update: [Mar 18, 2012 8:29:19 AM] [更改人姓名][变更描述]
*/
public Boolean confirmTableExists(String tablename)
{
if(null==tablename) return false;
Map map = new HashMap();
map.put("tablename", tablename);
Integer tablecount = (Integer)queryForObject("dynamic.select.table.exists",map);
return (null!=tablecount&&1==tablecount)?true:false;
}
/**
* <p>[动态获取表中的最大行标识]</p>
* @param tablename
* @return
* @return: Integer
* @author: wangsheng
* @update: [Mar 18, 2012 9:15:13 AM] [更改人姓名][变更描述]
*/
public synchronized Integer getMaxHangBiaoShiDynamic(String tablename) {
if(!confirmTableExists(tablename)) return null;
HashMap<String,String> map = new HashMap<String,String>();
map.put("hangbiaoshi", "hangbiaoshi");
map.put("tablename", tablename);
Integer value = (Integer)queryForObject("dynamic.select.table.maxhangbiaoshi",map);
return value;
}
/**
* <p>[动态批量根据行标识删除数据]</p>
* @param tablename
* @param hangbiaoshis
* @return
* @return: Integer
* @author: wangsheng
* @update: [Mar 18, 2012 9:15:32 AM] [更改人姓名][变更描述]
*/
public Integer deleteTableDynamic(String tablename, List<Integer> hangbiaoshis)
{
if(!confirmTableExists(tablename) || null==hangbiaoshis) return null;
Map map = new HashMap();
map.put("tablename", tablename);
map.put("hangbiaoshis",hangbiaoshis);
Integer row = this.delete("dynamic.delete.table.batch.byhangbiaoshi",map);
return row;
}
/**
* <p>[动态普通方法功能中文描述]</p>
* @param tableDTO
* @param tablename
* @return
* @return: Integer
* @author: wangsheng
* @update: [Mar 18, 2012 9:15:51 AM] [更改人姓名][变更描述]
*/
public Integer updatTableDynamic(Object tableDTO,String tablename)
{
try {
if(!confirmTableExists(tablename)) return null;
Map<String,Object> map = PropertyUtils.describe(tableDTO);
Iterator<String> key = map.keySet().iterator();
List fieldlist = new ArrayList();
Integer hangbiaoshi = null;
while(key.hasNext()){
String keyProperty = key.next();
Object valueProperty = PropertyUtils.getProperty(tableDTO,keyProperty);
if(keyProperty.equals("hangbiaoshi")||keyProperty.equals("hangBiaoShi"))
hangbiaoshi = (Integer)valueProperty;
UpdateTableParameterDTO dto = new UpdateTableParameterDTO();
dto.setTableKey(keyProperty);
dto.setTableValue(valueProperty);
if(dto.getTableValue()!=null && !dto.getTableKey().equals("class"))
fieldlist.add(dto);
}
Map tableMap = new HashMap();
tableMap.put("tablename", tablename);
tableMap.put("hangbiaoshi",hangbiaoshi); //更新条件
tableMap.put("fieldlist", fieldlist);
Integer updatecount = this.update("dynamic.update.table.hangbiaoshi",tableMap);
return updatecount;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* <p>[动态插入表信息]</p>
* @param tableDTO
* @param tablename
* @return
* @return: Integer
* @author: wangsheng
* @update: [Mar 18, 2012 9:16:03 AM] [更改人姓名][变更描述]
*/
public Integer insertTableDynamic(Object tableDTO,String tablename)
{
try {
if(!confirmTableExists(tablename)) return null;
Map<String,Object> map = PropertyUtils.describe(tableDTO);
Iterator<String> key = map.keySet().iterator();
List fieldlist = new ArrayList();
while(key.hasNext()){
String keyProperty = key.next();
Object valueProperty = PropertyUtils.getProperty(tableDTO,keyProperty);
if(keyProperty.equals("hangbiaoshi")||keyProperty.equals("hangBiaoShi"))
{
Integer maxhangbiaoshi = getMaxHangBiaoShiDynamic(tablename);
if(null==maxhangbiaoshi) return null;
valueProperty = maxhangbiaoshi;
}
UpdateTableParameterDTO dto = new UpdateTableParameterDTO();
dto.setTableKey(keyProperty);
dto.setTableValue(valueProperty);
if(dto.getTableValue()!=null && !dto.getTableKey().equals("class"))
fieldlist.add(dto);
}
Map tableMap = new HashMap();
tableMap.put("tablename", tablename);
tableMap.put("fieldlist", fieldlist);
Integer insertcount = this.update("dynamic.insert.table",tableMap);
return insertcount;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
/**
* CommonProcessTableDaoImpl.java
* <p>[类说明:]</p>
* @author: wangsheng
* @create: Mar 18, 2012 8:07:59 AM
*/
class UpdateTableParameterDTO
{
/**
* <p>[要更新的字段]</p>
*@author wangsheng
*@update: Mar 18, 2012 8:00:40 AM
*/
public String tableKey;
/**
* <p>[要更新的值]</p>
*@author wangsheng
*@update: Mar 18, 2012 8:05:07 AM
*/
public Object tableValue;
public String getTableKey() {
return tableKey;
}
public void setTableKey(String tableKey) {
this.tableKey = tableKey;
}
public Object getTableValue() {
return tableValue;
}
public void setTableValue(Object tableValue) {
this.tableValue = tableValue;
}
}
·ibatis代码:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd" >
<sqlMap namespace="GZW">
<select id="dynamic.select.table.exists" parameterClass="java.util.Map" resultClass="int">
select count(*) from gzwdb.dbo.sysobjects WHERE NAME=#tablename# AND TYPE='U'
</select>
<select id="dynamic.select.table.maxhangbiaoshi" parameterClass="java.util.Map" resultClass="int">
select max(hangbiaoshi)+1 from $tablename$
</select>
<delete id="dynamic.delete.table.batch.byhangbiaoshi" parameterClass="java.util.Map">
DELETE FROM $tablename$ WHERE HANGBIAOSHI IN
<iterate property="hangbiaoshis" open="(" close=")" conjunction=",">
#hangbiaoshis[]#
</iterate>
</delete>
<insert id="dynamic.insert.table" parameterClass="java.util.Map">
INSERT INTO $tablename$
<iterate property="fieldlist" open="(" close=")" conjunction=",">
$fieldlist[].tableKey$
</iterate>
VALUES
<iterate property="fieldlist" open="(" close=")" conjunction=",">
'$fieldlist[].tableValue$'
</iterate>
</insert>
<update id="dynamic.update.table.hangbiaoshi" parameterClass="java.util.Map">
update $tablename$ set
<iterate property="fieldlist" conjunction=",">
$fieldlist[].tableKey$ = '$fieldlist[].tableValue$'
</iterate>
where hangbiaoshi = #hangbiaoshi#
</update>
</sqlMap>
- IBATIS的动态操作表笔记
- 【ibatis】ibatis动态操作sql数据
- ibatis的动态查询
- ibatis 的动态SQL
- ibatis的动态sql
- ibatis的动态sql
- ibatis 的动态查询
- ibatis的自学笔记
- iBatis动态SQL的编写
- ibatIS学习笔记---Ibatis的基本使用方法
- ibatis使用-动态创建表
- ibatis应对的批量操作
- ibatis批量操作的实现
- ibatis学习笔记(二) 基本操作
- 关于iBATIS的联表查询的操作
- IBatis.Net学习笔记九--动态选择Dao的设计分析
- iBATIS动态查询的实现浅析
- iBATIS动态查询的实现浅析
- Linux设备模型(热插拔、mdev 与 firmware)
- mj评-《异星战场》-8.5分
- 关于芯片 ,处理器,内核,以及内存外存,外设等之间的关系小结
- Linux编程注意问题
- Linux下C++类的线程函数
- IBATIS的动态操作表笔记
- jQuery中wrap和wrapAll用法以及区别
- 信号量sem_t,互斥锁pthread_mutex_t的使用
- 数字图像处理专业英语词汇
- C#实现打开文件或文件夹及选中文件
- 关于在iOS设备上探测WIFI,3G,GPRS使用情况的细节
- yaffs2文件系统移植
- 计算机视觉专业词汇
- 讲一下容器list和set的区别