首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 100分!有写过DAO的,一分钟 就能解决!求助!!! [已结贴,结贴人:a82740373]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • a82740373
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    发表于:2008-08-22 10:51:47 楼主
    Java code
    public interface DAO { public boolean add() throws DAOException;//添加一个 public List queryAll() throws DAOException;//查询全部 public Object query() throws DAOException;//查询一个或多个符合条件的 public boolean update() throws DAOException;//修改一个或多个符合条件的 public boolean delete() throws DAOException;//删除一个或多个符合条件的 }


    大家看看上面的DAO接口。。。现在是个有问题的接口,希望大家指点迷津,我看别人写的有的是传个sql语句做参数,有的是传个主键值去操作。。。但是我觉得那样好想不太好。小弟迷糊在不知道怎么给参数,才能针对各种基本需要。。。
    比如我有一些实现类。如去操作oracle自带的emp dept 表。有删除符合条件的,修改符合条件的,查询符合条件的。。。
    小弟的面向对象思维暂时还不行。。。
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • coflich
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-22 10:54:481楼 得分:4
    传一个flag和entity。flag来区分操作,entity包装了参数。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • daisi2008
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-22 11:15:112楼 得分:4

    public interface DAO {
       
        public boolean add() throws DAOException;//添加一个
       
        public List queryAll() throws DAOException;//查询全部
         
            public List <DAOClass> query(List <条件类型>ist) throws DAOException;//查询一个或多个符合条件的
    或者你在SERVICE里面多次调用符合条件的就OK了
    下面的也差不多修改下就可以

            public boolean update() throws DAOException;//修改一个或多个符合条件的

            public boolean delete() throws DAOException;//删除一个或多个符合条件的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jiangkaixun
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-22 11:19:263楼 得分:4
    Java code
    public interface DAO { public boolean add(Object bean) throws DAOException;//添加一个 public List queryAll() throws DAOException;//查询全部 可以没有参数,或传入定制的sql字符串 public Object query(Object bean) throws DAOException;//查询一个或多个符合条件的 一般是bean对象,在函数里面组合成条件查询 public boolean update(List list<Bean>) throws DAOException;//修改一个或多个符合条件的 public boolean delete(List List<Bean>) throws DAOException;//删除一个或多个符合条件的 }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • nieliqiang84
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-22 11:20:464楼 得分:4
    你可以先写一个通用的DAO接口 暂时取名 baseDao,然后为其他的对象操作都去定义一个DAO接口, 比如你要对user对象去操作,
    那么你去定义一个 userDao接口, 这个userDao要继承baseDao,如果你的userDao还要实现其他的方法,那么你直接在userDao中添加就可以了
    然后再期写一个userDao的实现类,取名userDaoImpl ,这样虽然麻烦了些,但这个在开发时层次清晰,维护时也方便
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • a82740373
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-22 11:21:295楼 得分:0
    有web小例子的最好。。。比如留言板什么的。。。要mvc模式的  谢谢啦
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zhangkai08111
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-22 11:21:456楼 得分:4
    ls的已经很好了,传对象。。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jingulang
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-22 11:22:157楼 得分:4
    要对谁进行操作,就传个对象进去啊 

    进去后就调用Object.getXXXX()拿到属性(前提是写个bean) ,然后加到一条String sql里去进行操作就完了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zhangkai08111
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-22 11:24:378楼 得分:4
    引用 5 楼 a82740373 的回复:
    有web小例子的最好。。。比如留言板什么的。。。要mvc模式的  谢谢啦

    我有个关于学生选课的,是用mvc的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • znhbj
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-22 11:25:439楼 得分:4
    比如你往数据库里写的值对象定义为
    public User{
    private int userId;
    private String userName;
    get***()
    set***()
    }
    写法如下:
    接口
    import User;
    public interface DAO {
       
        public boolean add(User data) throws DAOException;//添加一个User
       
        public List queryAll() throws DAOException;//查询全部User
         
            public Object query(String userName,Integer userId) throws DAOException;//查询一个或多个符合条件的

            public boolean update(User data) throws DAOException;//修改一个或多个符合条件的

            public boolean delete(String userName,Integer userId) throws DAOException;//删除一个或多个符合条件的
       
    }

    import User;
    import java.sql.Connection;
    *****(省略)

    public class DAOImp implements DAO{
        public boolean add(User data) throws DAOException{    
        Connection con;//定义连接
        try{
        。。。。。
        //获取连接,插入数据库
        }
        catch (RuntimeException re){
        re.printStack();
        throw new DAOException("插入数据出错");
        }
        }
        //以下写法参考add
        public List queryAll() throws DAOException;//查询全部User
         
            public Object query(String userName,Integer userId) throws DAOException;//查询一个或多个符合条件的

            public boolean update(User data) throws DAOException;//修改一个或多个符合条件的

            public boolean delete(String userName,Integer userId) throws DAOException;//删除一个或多个符合条件的
       
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zhangkai08111
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-22 11:27:2010楼 得分:4
    引用 9 楼 znhbj 的回复:

    public List queryAll() throws DAOException;//查询全部User

    public Object query(String userName,Integer userId) throws DAOException;//查询一个或多个符合条…

    传对象,到方法然后bean.getXXX();
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • nieliqiang84
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-22 11:27:4111楼 得分:4
    引用楼主 a82740373 的帖子:Java code
    public interfaceDAO {
    publicbooleanadd(id)throwsDAOException;//添加一个
    publicList queryAll()throwsDAOException;//查询全部
    publicObject query(Stirng sqlStr)throwsDAOException;//查询一个或多个符合条件的
    publicbooleanupdate(String updateStr)throwsDAOException;//修改一个或多个符合条件的
    publicbooleandelete(Stirng []ids)throwsDAOException;//删除一个或多个符合条件的
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • znhbj
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-22 11:31:2112楼 得分:4
    打算使用框架吗
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • getdate
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-22 11:33:0413楼 得分:4

    public interface CardInfoDao extends Dao {

        public List getCardInfos(CardInfo cardInfo);

        public CardInfo getCardInfo(final Integer id);

     
        public void saveCardInfo(CardInfo cardInfo);


        public void removeCardInfo(final Integer id);
       
        public List getUsedCardInfo(String cardId);
        public List getCardInfoList(String beginDate,String endDate);
       
        public List getCardInfoByCardNo(String cardNo);
    }
    // cardInfo 为modle ,此仅作参考。其实参数是由你来定的,可以根据需求做不同的变化。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • znhbj
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-22 11:33:5614楼 得分:4
    有这方面的例子,是使用struts框架来做的,我刚才列的是M层方面的代码,C层用的是action,V层直接写jsp就可以
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • caiwujia
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-22 11:46:0815楼 得分:4
    1.有用过Hibernate吗?把数据库表用面向对象的方法操作.
    2.下面是修改建议:(其中Serializable是vo实现的接口,使用这个便于扩展,这样的方法可以供所有实现这个接口的实体使用)
    public interface DAO {
       
        public void add(Serializable vo) throws DAOException;//添加一个,
       
        public List <Serializable> queryAll() throws DAOException;//查询全部
         
        public List <Serializable> query(Class clazz,String key,String value) throws DAOException;
    //查询一个某个表中某个字段符合某个值的结果集,clazz值可以传入具体vo的class属性(如果没有用hibernate可以把Class clazz改成String table,用表名查询)

        public void update(Serializable vo) throws DAOException;//修改一个或多个符合条件的

        public void delete(Serializable vo) throws DAOException;//删除一个或多个符合条件的
       
    }
    说明:使用void而不接受返回值,因为如果没有抛异常出来就证明操作成功!采用异常机制。
    希望有所帮助!^_^
    caiwujia@tom.com
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • a82740373
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-22 11:49:2916楼 得分:0
    谢谢大家的回答。我主要的意思是说难道不是写一个大家都老实现的DAO接口吗?因为后面应用的时候也是作为DAO接口类型用的。这样的话肯定有不同的表,比如学生信息表,课程设置表等。。。
    public interface DAO {
       
        public boolean add(User data) throws DAOException;//添加一个User
       
        public List queryAll() throws DAOException;//查询全部User
         
            public Object query(String userName,Integer userId) throws DAOException;//查询一个或多个符合条件的

            public boolean update(User data) throws DAOException;//修改一个或多个符合条件的

            public boolean delete(String userName,Integer userId) throws DAOException;//删除一个或多个符合条件的
       
    }
    这样的话不就写死了吗? 所以我还是迷惑
    三楼的这个好像接近我的意思
    public interface DAO {
       
        public boolean add(Object bean) throws DAOException;//添加一个
       
        public List queryAll() throws DAOException;//查询全部 可以没有参数,或传入定制的sql字符串
         
            public Object query(Object bean) throws DAOException;//查询一个或多个符合条件的  一般是bean对象,在函数里面组合成条件查询

            public boolean update(List list <Bean>) throws DAOException;//修改一个或多个符合条件的

            public boolean delete(List List <Bean>) throws DAOException;//删除一个或多个符合条件的
       
    }
    大家再给小弟弟启发下吧!!!加分,顶上!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • a82740373
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-22 11:50:5217楼 得分:0
    十五楼的也接近了。。。
    1.有用过Hibernate吗?把数据库表用面向对象的方法操作.
    2.下面是修改建议:(其中Serializable是vo实现的接口,使用这个便于扩展,这样的方法可以供所有实现这个接口的实体使用)
    public interface DAO {
       
        public void add(Serializable vo) throws DAOException;//添加一个,
       
        public List <Serializable> queryAll() throws DAOException;//查询全部
         
        public List <Serializable> query(Class clazz,String key,String value) throws DAOException;
    //查询一个某个表中某个字段符合某个值的结果集,clazz值可以传入具体vo的class属性(如果没有用hibernate可以把Class clazz改成String table,用表名查询)

        public void update(Serializable vo) throws DAOException;//修改一个或多个符合条件的

        public void delete(Serializable vo) throws DAOException;//删除一个或多个符合条件的
       
    }
    说明:使用void而不接受返回值,因为如果没有抛异常出来就证明操作成功!采用异常机制。
    希望有所帮助!^_^
    caiwujia@tom.com
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • znhbj
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-22 11:56:3718楼 得分:8
    这只是一个例子,实际上,我是按Object来传递的,以下是我们正在使用的代码,用SSH实现

    public interface Dao {

    public void save(Object data) throws RuntimeException;

    public void delete(Object data) throws RuntimeException;

    public void update(Object data) throws RuntimeException;

    public Object findById(Integer id) throws RuntimeException;

    public List findAll{Map map)  throws RuntimeException;
    }
    抽象实现
    import org.apache.log4j.Logger;
    import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

    public abstract class AbstractDao extends HibernateDaoSupport implements Dao{
    private static Logger logger = Logger.getLogger(AbstractDao.class.getName());

    public AbstractDao(){
    }

    public void save(Object data) throws RuntimeException{
    try{
    this.getHibernateTemplate().save(data);
    }
    catch (RuntimeException re){
    re.printStackTrace();
    throw new RuntimeException("数据添加失败");
    }
    }

    public void delete(Object data) throws RuntimeException{
    try{
    this.getHibernateTemplate().delete(data);
    }
    catch (RuntimeException re){
    re.printStackTrace();
    throw new RuntimeException("数据删除失败");
    }
    }

    public void update(Object data) throws RuntimeException{
    try{
    this.getHibernateTemplate().update(data);
    }
    catch (RuntimeException re){
    re.printStackTrace();
    throw new RuntimeException("数据更新失败");
    }
    }
    }

    具体dao实现类,只要继承即可
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.ResourceBundle;
    import org.hibernate.Query;
    import org.hibernate.Session;
    import org.springframework.orm.hibernate3.HibernateCallback;

    import org.nercita.base.dao.*;
    import org.nercita.base.util.page.Page;
    import org.nercita.cymh.info.po.InfoDoc;
    import org.nercita.cymh.resource.ResourceReader;

    public class InfoDaoImpl extends AbstractDao implements InfoDao {
    //具体代码略,save delete update都不用写,只要实现find就可以
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • znhbj
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-22 11:57:0719楼 得分:4
    还有问题的话,下午再联系,吃饭了先
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • maodie007
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-22 12:02:4620楼 得分:4
    友情一顶
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • a82740373
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-22 12:07:2321楼 得分:0
    谢谢你啊  我就是你那个意思  只是我还没学到Hibernate
    所以这里就有点不明白了  //具体代码略,save delete update都不用写,只要实现find就可以
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • whatisjava_open
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-22 12:59:1722楼 得分:4
    JAVA阵营    QQ群  68575630
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zgycsmb
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-22 13:39:3723楼 得分:4
            public boolean update(List list <Bean>) throws DAOException;//修改一个或多个符合条件的

            public boolean delete(List List <Bean>) throws DAOException;//删除一个或多个符合条件的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • serryzhao
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-22 13:57:3024楼 得分:4
    关于什么样的参数要根据具体的情况而定,有时候传参数方便 有时候传个封装好的对象方便。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • znhbj
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-22 14:20:3025楼 得分:4
    我这里使用Object作为父类来统一代表各种实际对象,例如学生信息,课程信息,用户信息等等,由于结合了Hibernate,抽象实现就可以用调用hibernate的具体接口统一实现,形如this.getHibernateTemplate().save(Object)等等,而查找语句需要自己写hql语句,因此具体的dao实现还需要自己写,举一个例子
    public List findAll() throws RuntimeException {
    String hql = "from InfoDoc order by docDate desc";
    try{
    return this.getHibernateTemplate().find(hql);
    }
    catch (RuntimeException re){
    re.printStackTrace();
    throw new RuntimeException(re.getMessage);
    }
    }
    如果对hibernate不熟悉也没关系,仔细琢磨一下这个思路
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • shelei007
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-22 14:49:5226楼 得分:4
    比较好的做法是传对象
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fulianglove
    • 等级:
    • 可用分等级:
    • 总技术专家分: