jsp,ssh框架学习日志3,dao层_第1页
jsp,ssh框架学习日志3,dao层_第2页
jsp,ssh框架学习日志3,dao层_第3页
jsp,ssh框架学习日志3,dao层_第4页
jsp,ssh框架学习日志3,dao层_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JSP,SSH 框架学习日志 3,DAO 层 model 层完成之后应该写 DAO 层了,DAO 层的主要功能就是对数据的操作。 其实 DAO 层也可以由 Hibernate 的反向工程生成,不过生成的方法不够完善,我们需要自 己再添加进去。不过这样每一张表都要写重复一样的话很麻烦。我是不会告诉你我以前是 用反向工程一个一个生成,然后把要添加的方法写一遍用复制粘贴然后再去一个一个改的。 上课的时候赖老师教给我一个简单的方法 继承。 好吧,继承这个我也会用,不过有个问题就是 Hibernate 的操作是对 Model 的对象进行操 作的,而不是直接对数据库进行操作,如果写一个公用类来继承的话,但是每个表的操作 类的类型是不一样的,我们定义他传进来的参数类型总不能有几张表就写几次吧 所以说老师是万能的,他又给了我一个方法详情请看 /wiki/GenericDataAccessObjects DAO 需要一个接口和一个接口的实现类。因为 Spring 注入的时候只能用接口注入。 我给 DAO 层写一个公用类和接口放在了公用层里,名字分别为 CommonDAO 和 ICommonDAO。 以下是 ICommonDAO 的代码 package com.ksxt.sys; import java.io.Serializable; import java.util.List; public interface ICommonDAO public void save(T transientInstance) throws Exception; public void delete(T persistentInstance) throws Exception; public void update(T instance) throws Exception; public int updateByQuery(String hql); public T findById(ID id); public List findByqQuery(String hql); public List findAll(); public List queryForPage(String hql, int offset,int length); 以下是 CommonDAO 的代码 package com.ksxt.sys; import java.io.Serializable; import java.lang.reflect.ParameterizedType; import java.util.List; import org.hibernate.Criteria; import org.hibernate.SessionFactory; import org.hibernate.criterion.Criterion; public abstract class CommonDAO implements ICommonDAO private SessionFactory sessionFactory;/加载数据库连接(使用 spring 实现加载) private Class persistentClass; /sessionFactory 的 get 和 set 方法。 public SessionFactory getSessionFactory() return sessionFactory; public void setSessionFactory(SessionFactory sessionFactory) this.sessionFactory = sessionFactory; /用构造方法处理 Class以下为固定模式 public CommonDAO() this.persistentClass = (Class) (ParameterizedType) getClass() .getGenericSuperclass().getActualTypeArguments()0; public Class getPersistentClass() return persistentClass; /对表的操作(增删改查) /保存 public void save(T transientInstance) throws Exception try sessionFactory.getCurrentSession().save(transientInstance); catch (RuntimeException e) throw e; /删除 public void delete(T persistentInstance) throws Exception try sessionFactory.getCurrentSession().delete(persistentInstance); catch (RuntimeException e) throw e; /更新 public void update(T instance) throws Exception try sessionFactory.getCurrentSession().saveOrUpdate(instance); catch (RuntimeException e) / TODO: handle exception throw e; /根据传进来的 HQL 语句更新,返回受影响行数 public int updateByQuery(String hql) int k=0; try k=sessionFactory.getCurrentSession().createQuery(hql).executeUpdate (); catch (RuntimeException e) / TODO: handle exception throw e; return k; /根据传进来的 ID 进行查询 public T findById(ID id) try T instance = (T) sessionFactory.getCurrentSession().get(getPersistentClass(), id); return instance; catch (RuntimeException e) / TODO: handle exception throw e; /根据传进来的 hql 查询 public List findByqQuery(String hql) try return sessionFactory.getCurrentSession().createQuery(hql).list(); catch (RuntimeException e) / TODO: handle exception throw e; /查找所有表里的所有内容 public List findAll() try return findByCriteria();/调用下面的 findByCriteria 方法 catch (RuntimeException e) / TODO: handle exception throw e; /查找表里的所有内容并返回 protected List findByCriteria(Criterion. criterion) Criteria crit = sessionFactory.getCurrentSession().createCriteria( getPersistentClass(); for (Criterion c : criterion) crit.add(c); return crit.list(); /jQuery Easyui Datagrid 需要的方法,根据传进来的 hql,当前页数,页面长度返 回数据列 public List queryForPage(String hql, int offset, int length) try List results=sessionFactory.getCurrentSession().createQuery(hql) .setFirstResult(offset) .setMaxResults(length) .list(); return results; catch (RuntimeException re) throw re; 这里面的方法还不是很完全,可根据需要自行添加或删除。公用的类和接口写完了之后就 是写 DAO 层了,有这个公用类和接口接下来要写就很简单了 首先因为 DAO 层需要一个接口和实现类,我在多建了一个包 com.ksxt.dao.impl 这个包来 放它的实现类,而 com.ksxt.dao 这个包来放它的接口 接下来开工,开始写 DAO 层的代码,先写接口,再写实现类。当然,你要先写实现类再抽 象出接口我也没意见。 我这里以 tbnews 表为例 先在你要建接口的名右击选择 newInterface(有时候你要的包名在 src 下面没显示出来, 可以刷新一下,要是还没有的话可以随便选一个包进去创建的时候再改包名) 之后会出现在面的界面选择生成接口的位置,包名,接口名(我的命名方式是表名后面加 上层名接口的话前面加个 I,如果前面在 src 没看见包名的话在这就可以改了点击 Package 后面的 Browse.)点击在 Extended interface:的右边的 Add 添加接口继承的接口 接下来会弹出这样的窗口,我之前做的公用接口名为 ICommonDAO,输入时 Matching items 里会有提示,双击选择(名字是不会跳到上面的输入框的)点击 OK 确定 转回刚才的界面在 Extended interface 界面会有一个接口,把Class 会出现如下界面,选择 Superclass 后面的 Browse 选择继承的类 刚才我写的公用类名是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论