JEE数据库基本操作Basedao层通用接口的实现
来源:互联网 发布:手机如何禁止安装软件 编辑:程序博客网 时间:2024/06/18 06:53
问题引入:
接着上回商城系统的开发,我们知道在分层架构体系中,DAO层一般就是执行数据库操作的,随着Java代码中对应数据库的表逐渐增多,开始发现代码冗余十分严重,许多操作其实十分相似,可以选择把重复操作封装起来。
- dao层:
是用来给业务逻辑层(Service)层调用的,它的操作比较固定,有最基本的增删该查操作(CURD)、分页,我们可以把dao层通用方法抽取出来,这也符合了面向对象的思想。
首先要知道实现和继承的作用是不一样,实现强调的是方法的实现,赋予新功能。继承是对父类的延续,直接延续父类的方法。可以理解为,实现是说我改造了你的方法,继承是说我搬运了你的方法。
下面以User表为例
- BaseDao接口:
Java接口是可以继承的。- 把通用的方法写在BaseDao接口中
- 新建BaseDaoImpl实现类,实现通用方法。
- 新建UserDao继承BaseDao接口,其中通用方法已经在BaseDao中存在,直接继承即可,如果UserDao有自己的个性方法,比如登录login(),注册regist(),这时候可以自己添加在UserDao,让类UserDaoImpl去实现就可以。
- 新建实现类UserDaoImpl实现UserDao,首先UserDao已经继承了BaseDao,因此它有基本操作方法,其次它包括自己的登录注册方法,所以UserDaoImpl可以重写覆盖这些方法。
- 让UserDaoImpl继承BaseDaoImpl此时基本操作已经在父类实现,自己搬用即可。
逻辑视图如下:
- BaseDao
使用泛型接口
package com.tdd.dao;import java.util.List;import org.hibernate.criterion.DetachedCriteria;/* * 通用接口,以后所有DAO接口都要继承BaseDao接口 * 自定义泛型接口 */public interface BaseDao<T> { public void save(T t); public void delete(T t); public void update(T t); public T findById(Long id); public List<T> findAll(); public List<T> findByPage(int intPage, int number, DetachedCriteria criteria);}
- BaseDaoImpl
package com.tdd.dao;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import java.util.List;import org.hibernate.criterion.DetachedCriteria;import org.springframework.orm.hibernate5.support.HibernateDaoSupport;/* * 通用Dao实现类,所有Dao实现类直接继承BaseDaoImpl */@SuppressWarnings("all")public class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T> { //定义成员属性(待传入) private Class clazz; public BaseDaoImpl(){ System.out.println("BaseDaoImpl构造方法,在子类(待传入类对象)加载时候执行______________"); //该方法在子类加载时候执行 ,此时this表示子类 Class c = this.getClass(); Type type = c.getGenericSuperclass(); if (type instanceof ParameterizedType) { ParameterizedType pType = (ParameterizedType) type; //获取传入类对象 Type[] types = pType.getActualTypeArguments(); this.clazz = (Class) types[0]; } } public void save(T t) { this.getHibernateTemplate().save(t); } public void delete(T t) { this.getHibernateTemplate().delete(t); } public void update(T t) { this.getHibernateTemplate().update(t); } //通过主键查询 public T findById(Long id) { return (T) this.getHibernateTemplate().get(clazz, id); } //查询所有数据 public List<T> findAll() { return (List<T>) this.getHibernateTemplate().find("from "+clazz.getSimpleName()); } public List<T> findByPage(int intPage, int number, DetachedCriteria criteria) { //(Hibernate 框架提供分页)根据传入页号和页大小 计算显示list List<T> lists = (List<T>) this.getHibernateTemplate().findByCriteria(criteria, (intPage-1)*number, number); return lists; }}
- UserDao
package com.tdd.dao;import com.tdd.domain.User;public interface UserDao extends BaseDao<User>{//基本方法通通可以注释掉// void save(User user);//// List<User> findAll();//// void delete(User user);//// void update(User user);//// User findById(Long user_id);//// List<User> findByPage(int intPage, int number, DetachedCriteria criteria); //个性方法 public String login(); public String regist();}
UserDaoImpl
package com.tdd.dao;import com.tdd.domain.User;public class UserDaoImpl extends BaseDaoImpl<User> implements UserDao {// 基本方法已经实现,可以注释掉// public void save(User user) {// // 把数据,保存到数据库中// this.getHibernateTemplate().save(user);// }//// public List<User> findAll() {// return (List<User>) this.getHibernateTemplate().find("from User");// }//// public void delete(User user) {// this.getHibernateTemplate().delete(user);// }//// public void update(User user) {// this.getHibernateTemplate().update(user);// }//// public User findById(Long user_id) {// return this.getHibernateTemplate().get(User.class, user_id);// }// // //查询每页数据// public List<User> findByPage(int intPage, int number, DetachedCriteria criteria) {// //(Hibernate 框架提供分页)根据传入页号和页大小 计算显示list// List<User> lists = (List<User>) this.getHibernateTemplate().findByCriteria(criteria, // (intPage-1)*number, number);// return lists;// }//重写实现注册登录方法public String login(){ ...}public String regist(){ ...}
总结:
采用通用接口最大的好处是减少了UserDao接口以及其实现的代码,需要编写的仅仅是该类某个特殊业务需要实现的方法,那些数据库基本的增删改查等方法,如果写在通用接口,那么直接继承即可。
1 0
- JEE数据库基本操作Basedao层通用接口的实现
- java web项目DAO层通用接口BaseDao与实现类BaseDaoImpl
- java web项目DAO层通用接口BaseDao与实现类BaseDaoImpl
- Struts+hibernate通用接口BaseDAO
- Dao接口实现基本的数据库操作。增删改查
- 数据库的通用接口
- 通过泛型实现持久层 BaseDao 的写法
- springboot的通用BaseDAO写法
- BaseDao --- dao层的抽取
- 项目中三大框架整合的BaseDao接口及其实现
- java通用分页(SSH2框架下)和基于Hibernate的BaseDao接口
- java通用分页(SSH2框架下)和基于Hibernate的BaseDao接口
- hibernate 中的通用接口BaseDao 和BaseDaoImpl的制作 ,泛型制作
- mybatis-basedao的实现
- BaseDao多线程的实现
- 基于hibernate的BaseDAO接口
- 基于hibernate4的BaseDao接口
- 基于hibernate的BaseDAO接口
- gradle多渠道打包
- Debian-8.7.1 系统安装
- Fizz Buzz
- Redis zet 和 set 求差集
- nova 远程访问
- JEE数据库基本操作Basedao层通用接口的实现
- 虚拟内存到底是什么?为什么我们在C语言中看到的地址是假的?
- Object类小总结
- 用Python快速实现八皇后问题
- 博客园 首页 公告 自定义 时钟 HOME HOME CLOCK
- 常见的C++字符&字符串输入输出
- 集成墙面室内装修 四海八荒美出新高度
- Android Popupwindow使用问题
- MySQL基础查询( select , in , where , 布尔与空 , like , order by , limit )