浏览 4393 次
锁定老帖子 主题:关于jdk5范型写的dao的疑问
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-09-25
import java.io.IOException; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import com.ibatis.sqlmap.client.SqlMapClient; import com.ibatis.sqlmap.client.SqlMapSession; public class Dao<E extends java.io.Serializable> { /** * 添加一个po * @param optionId * @param obj * @throws IOException * @throws SQLException */ public void add(String optionId, E obj) throws IOException, SQLException { SqlMapClient sqlMap = SqlMapUtil.getInstance().buildSqlMap(); sqlMap.startTransaction(); sqlMap.insert("insertUser", obj); sqlMap.commitTransaction(); sqlMap.endTransaction(); } /** * 根据id,删除一个po * @param optionId * @param id * @throws IOException * @throws SQLException */ public void removeById(String optionId, int id) throws IOException, SQLException { SqlMapClient sqlMap = SqlMapUtil.getInstance().buildSqlMap(); SqlMapSession session = sqlMap.openSession(); session.startTransaction(); session.delete("deleteUserById", id); session.commitTransaction(); try { session.endTransaction(); } catch (Exception e) { } finally { session.close(); } } /** * 修改po * @param optionId * @param obj * @throws IOException * @throws SQLException */ public void modify(String optionId, E obj) throws IOException, SQLException { SqlMapClient sqlMap = SqlMapUtil.getInstance().buildSqlMap(); SqlMapSession session = sqlMap.openSession(); session.startTransaction(); session.update("updateUser", obj); session.commitTransaction(); try { session.endTransaction(); } catch (Exception e) { } finally { session.close(); } } /** * 查询所有po * @param optionId * @return * @throws IOException * @throws SQLException */ @SuppressWarnings("unchecked") public List<E> findAll(String optionId) throws IOException, SQLException { List<E> result = new ArrayList<E>(); SqlMapClient sqlMap = SqlMapUtil.getInstance().buildSqlMap(); result = sqlMap.queryForList(optionId, null); return result; } /** * 根据id查询po * @param optionId * @param id * @return * @throws IOException * @throws SQLException */ @SuppressWarnings("unchecked") public E findById(String optionId, int id) throws IOException, SQLException { SqlMapClient sqlMap = SqlMapUtil.getInstance().buildSqlMap(); return (E) sqlMap.queryForObject(optionId, id); } } 采用了ibatis做数据库操作。测试倒是通过了。当然也仅仅是一个简单的测试而已。 对于以前,我可能是一个Dao接口,然后针对每个不同的po有不同的 PoDao 类。 public Dao {...} public UserDao implements Da {...} ... 现在采用了范型,觉得代码量是少了。但是不知道这种写法有没有什么问题。或者有没有什么更好的建议。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-09-26
sqlMap.insert("insertUser", obj);
insertUser 这样的写死了,这个Dao怎么通用啊? |
|
返回顶楼 | |
发表时间:2006-09-26
在代码的add方法里面的
sqlMap.insert("insertUser", obj); 应该改为 sqlMap.insert(optionId, obj); removeById方法里面的 session.delete("deleteUserById", id); 应该改为 session.delete(optionId, id); modify方法里面的 session.update("updateUser", obj); session.update(optionId, obj); 这个是写错了。但是,在运行的时候确实是通过了。没有出错。 顺便把SqlMapUtil的代码贴上 import java.io.IOException; import java.io.Reader; import com.ibatis.common.resources.Resources; import com.ibatis.sqlmap.client.SqlMapClient; import com.ibatis.sqlmap.client.SqlMapClientBuilder; public class SqlMapUtil { private static SqlMapUtil smUtil = null; public static SqlMapUtil getInstance() { if (smUtil == null) smUtil = new SqlMapUtil(); return smUtil; } public SqlMapClient buildSqlMap() throws IOException { String resource = "../SqlMapConfig.xml"; Reader reader = Resources.getResourceAsReader(resource); return SqlMapClientBuilder.buildSqlMapClient(reader); } } 上面代码的resource是配置文件的路径 |
|
返回顶楼 | |
发表时间:2006-09-26
如果能够根据对象的类名和操作找到要使用的sql语句,那就不需要optionId参数了。
|
|
返回顶楼 | |
发表时间:2006-09-26
BirdGu 写道 如果能够根据对象的类名和操作找到要使用的sql语句,那就不需要optionId参数了。 说的有道理.我想是行得通的.
|
|
返回顶楼 | |
发表时间:2006-09-27
可以参考springside项目中的那个范型dao的设计.基本上copy过来就用了.不过要说声谢谢.呵呵
|
|
返回顶楼 | |
发表时间:2006-09-27
iBatis似乎没有显式的关闭数据连接的方法,那么什么时候会关闭连接呢?
|
|
返回顶楼 | |
发表时间:2006-10-10
其实有没有必要想这么多
现在做通用的dao,也只能完成数据基本的增删改查操作,其中查询操作几乎只能支持PK查询(为了通用),其实完成这部分的功能,自己稍微抽象一下就可以了 就这点而言,我觉得JDK5的唯一的优势就是用户在继承dao的时候可以看到操作的po的类型,除此以外我确实没有看到比jdk14好的地方(至于是真的泛型我不关心) 其实,我们做应用对于对象的操作远远不止这些,更多的时候是各种复杂的查询,这种至少我没有想到有1个比较通用的东西可以代劳的(当然如果可以做到的话,那么应用开发估计比VB、Delphi的开发更简洁了,:))。 |
|
返回顶楼 | |