dao层一般是放一些关于对数据库的操作的内容,那么开session,开事务和事务提交,关闭session之类的也是放在 dao层吗??
解决方案 »
- 请问有自行开发过JMS服务器端的吗?
- Hibernate 二级缓存 无法启动 跪求高手!
- JAVA实现发送邮件功能
- 求救!!!我用jbuilder2006+weblogic8.1,配置完连接池后,测试连接出现如下错误!!!
- 并发测试EJB的问题,请高手帮忙,发我MAIL( [email protected] )或回复,万分感谢
- 困惑中,应该如何学习Struct?
- 急!关于log4j配置的问题,请高手进来帮忙解决一下!
- 主要是散分,深入说明rmi或jndi。或可说明在j2ee中的作用!本人满意给30-50分,顶给2-4分!!
- J2EE和Web Services关系密切吗?
- 项目mysql导Oracle无法连接,求大佬解答
- 求助,jQuery拿不到返回值。。
- java写一段程序,验证生成的触发器是否可用?
例如 session.save()这样的方法,没session怎么用?
import java.util.*;public final class UserDAO {
public static int chkUserName(String name) throws HibernateException
{
Session hsession=HibernateUtil.currentSession();
Transaction tx = hsession.beginTransaction();
int n=-1;
int id=-2;
String q = "from User as user where user.name='"+name+"'"; Query query2 = hsession.createQuery (q);try{
List list=query2.list();
n=list.size();
for(int i=0;i<list.size();i++)
{
User g2=(User)list.get(i);
id=g2.getId(); }
}catch (Exception e) {
System.out.println(e.getMessage());
}finally{ tx.commit();
HibernateUtil.closeSession();
}return n;
}
public void saveName(String name) throws HibernateException
{
Session hsession=HibernateUtil.currentSession();
Transaction tx = hsession.beginTransaction();
User user=new User();
try{
user.setName(name);
hsession.save(user);
hsession.flush();
}catch (Exception e) {
System.out.println(e.getMessage());
}finally{ tx.commit();
HibernateUtil.closeSession();
}
}
public List getGbooks() throws HibernateException{
Session session=HibernateUtil.currentSession();
Transaction tx = null;
List list=null;
try {
tx = session.beginTransaction();
Query query = session.createQuery ("select user from User as user ");
list = query.list();
tx.commit();
}catch (HibernateException e) {
if (tx != null) {
tx.rollback();
}
System.err.println("getGbook:"+e.getMessage());
} finally {
//session.close();
}
return list;
}
}
Session hsession=HibernateUtil.currentSession();
Transaction tx = hsession.beginTransaction(); 这2句代码是不是 放在dao层~
public int saveModuleList(Mod...mods ) {
return moduleDao.save(mods);
}
应该是想法问题吧!一直没放入Dao里。
回答LZ的问题,将你的那两句加入到DAO层完全可以,但是要看你具体的环境了,比如你开发的是一套业务系统,那么一个业务可能是处于一个事物当中,这种情况需要将事物拿到DAO外面控制,但是这样比较麻烦了就,还有就是操作太多,没准会引起一些数据库死锁问题。放到DAO层可以,但是遇到长事务就不行了,而且短事物多了还会影响性能。
找点j2ee patterns之类的书,会对你有帮助的。
DAO -- 数据库访问对象
它的职责就是专门和数据库打交道,应该说开始事务、提交事务、关闭连接是在DAO层
至于开启时session、关闭session那不一定,因为你用了hibernate框架,而hibernate
它是通过session来管理与数据库的操作,既然你的事务是加在DAO层了,那session的操作
也就再这一层了,项目中如果你不抽取一个DAO层来,就直接一个业务逻辑层(manager/service)
那么这时候session
就是业务逻辑这一层了
顾名思意,只管访问数据,如从数据库。
无论你使用不使用框架,都最好抽象出一个service层,将事务加到Serviece层,这样方便事务的回滚,如果加到Dao层,那么业务和数据库操作掺到了一起将很难维护。这个也是MVC模式最基本的思想。
事务一般都是放在service层中的 ,因为service中 可能会执行多个操作
SSE-JAVA 招聘中。。
上海/北京/武汉
? Be responsible for application design, technical design
? Be responsible for application development, unit testing and system integration testing and implementation
? Maintain and design project related documentation
? Troubleshooting critical bugs, critical issues
? Lead junior developers to finish tasks on time
? Bachelor degree or higher with a major in computer engineering or related
? 7+ years experience in solution design and software development
? Proficiency in Java/J2EE related design, development, testing, debugging skills
? Strong developing experience on Oracle or SQL Server
? Good verbal and written communication in Chinese and English
? Airline industry background is a plus 有意向者
请联系QQ635844351
MSN:[email protected]
那么在dao层里 如果对数据库进行操作
例如 session.save()这样的方法。这个地方的session怎么来呢? 因为session是在service里open的~
在dao里 还要再开一个? 那不是开了2个session了~
用spring来管理吧
建议不要混在一起因为势必会影响的