SSH下,普通类调用 dao操作数据库

wygxz 发布于 2012/08/17 15:41
阅读 3K+
收藏 0

ssh2 框架下。 我有一个普通类(非action) 调用dao下的方法。实现操作数据库。可是一进dao中。 session值就获取不到。 而是用action类就可以。 这是为什么?

用什么方式可以实现普通类调用dao?

加载中
1
苏叶晚晚
苏叶晚晚
List<Contents> contents=this.hibernateTemplate.executeFind(new HibernateCallback() {
@Override
public Object doInHibernate(Session session) throws HibernateException,
SQLException {
String hql="from Contents c where (c.users.User_id in (select ur.fusers.User_id from User_relation ur where ur.users.User_id=?)  ";
if(flag) hql+=" or c.users.User_id="+user.getUser_id();
hql+=") and c.Reply_id=0 order by c.Content_time desc";
Query query=session.createQuery(hql);
query.setInteger(0, user.getUser_id());
query.setFirstResult(begin).setMaxResults(size);
List<Contents> lists=query.list();
return lists;
}
}); 

=========
这上面是我曾经在hibernate中获取session的方法,就用到了这个内部类。
不知道你用了hibernateTemplate没有。希望能对你有所帮助。
0
情天大圣
情天大圣
为什么要去DAO里获取session呢,而不是将你需要的session里的值当参数传进DAO里呢?
0
w
wygxz

引用来自“情天大圣”的答案

为什么要去DAO里获取session呢,而不是将你需要的session里的值当参数传进DAO里呢?
    public boolean executeSQL(String preparedSql,String[] param) {
     boolean flag = false;
     Session session = getSession();
        /*  处理SQL,执行SQL  */
        try {
         SQLQuery sqlQuery = session.createSQLQuery(preparedSql);
            if( param != null ) {
                for( int i = 0; i < param.length; i++ ) {
                 sqlQuery.setString(i, param[i]);         // 为预编译sql设置参数
                }
            }
            sqlQuery.executeUpdate();    // 执行SQL语句
            flag = true;
        } catch (Exception e) {
         System.out.println("错误信息:" + e.getMessage());
   e.printStackTrace();
  } finally {
   session.flush();
   session.clear();
         session.close();                     // 释放资源
        }
        return flag;
    }
0
loki_lan
loki_lan
你这样做,还要SSH来做什么
loki_lan
loki_lan
回复 @wygxz : 亲,SessionFactory.getCurrentSession在commit之后Session就自动关闭了!用openSession吧
w
wygxz
回复 @loki_lan : public Session getSession() { return sessionFactory.getCurrentSession(); } 不是传递session值。 亲。 我以为你懂..
loki_lan
loki_lan
回复 @wygxz : 既然是调用DAO,Session的值怎么可能会在DAO里面不见了呢,调用最多算个值传递吧~不理解你为什么在DAO还可以对Session操作
w
wygxz
就是自己写个类。然后发现获取不到。想获取到罢了。
0
w
wygxz

引用来自“xiaojia2008”的答案

SSH 真是害人不浅。。。

随便个开发人员就会依葫芦画瓢 SSH  : DAO -> SERVICE -> ACTION 

哎。。。

要是不会就不要说风凉话好么?
0
DanielTo
DanielTo
有些东西不一定非要写,比如什么DAO,service,等你真正发现他们有用的时候再写吧,先实现功能再说,,,
0
jason-st
jason-st

把这个普通类定义在applicationContext.xml里,然后把Dao注入进去。

jason-st
jason-st
哦你使用的注解?
w
wygxz
我都是自动扫描dao的。可是不知道为什么这个类扫描不到。 <context:annotation-config/> <context:component-scan base-package="dl.cd.*"/>
0
beidao-ai
beidao-ai

引用来自“苏叶晚晚”的答案

List<Contents> contents=this.hibernateTemplate.executeFind(new HibernateCallback() {
@Override
public Object doInHibernate(Session session) throws HibernateException,
SQLException {
String hql="from Contents c where (c.users.User_id in (select ur.fusers.User_id from User_relation ur where ur.users.User_id=?)  ";
if(flag) hql+=" or c.users.User_id="+user.getUser_id();
hql+=") and c.Reply_id=0 order by c.Content_time desc";
Query query=session.createQuery(hql);
query.setInteger(0, user.getUser_id());
query.setFirstResult(begin).setMaxResults(size);
List<Contents> lists=query.list();
return lists;
}
}); 

=========
这上面是我曾经在hibernate中获取session的方法,就用到了这个内部类。
不知道你用了hibernateTemplate没有。希望能对你有所帮助。
确实如此啊,在ssh2中,不知道楼主是不是使用了hibernatetemplate来简化数据库操作,如果使用了hibernatetemplate,这个方法就可以获取到session,想executeFind方法传入一个callback回调,在这个匿名内部类中完全可以使用hibernate的api来做了。
0
你懂得
你懂得

引用来自“xiaojia2008”的答案

SSH 真是害人不浅。。。

随便个开发人员就会依葫芦画瓢 SSH  : DAO -> SERVICE -> ACTION 

哎。。。

你懂SSH吗???你真的了解吗???
0
w
wygxz

引用来自“苏叶晚晚”的答案

List<Contents> contents=this.hibernateTemplate.executeFind(new HibernateCallback() {
@Override
public Object doInHibernate(Session session) throws HibernateException,
SQLException {
String hql="from Contents c where (c.users.User_id in (select ur.fusers.User_id from User_relation ur where ur.users.User_id=?)  ";
if(flag) hql+=" or c.users.User_id="+user.getUser_id();
hql+=") and c.Reply_id=0 order by c.Content_time desc";
Query query=session.createQuery(hql);
query.setInteger(0, user.getUser_id());
query.setFirstResult(begin).setMaxResults(size);
List<Contents> lists=query.list();
return lists;
}
}); 

=========
这上面是我曾经在hibernate中获取session的方法,就用到了这个内部类。
不知道你用了hibernateTemplate没有。希望能对你有所帮助。

确实可以。

后来我采用了SpringContextPublisher 继承ApplicationContextAware

实现getBean()方法来获取所有注入类。

谢谢你!

返回顶部
顶部