接口实现, BaseDao
BaseDao实现,需要写, 这就需要SessionFactory。这就需要设置依赖。
1.1.1、设置父依赖
Spring 新版本注入
JSR330 @Inject
Spring 老版本注入
JSR250 @Resource
javax.inject
javax.inject
1
注意:Dao层不做任何的判断, 只操作数据库
2、显示BaseDao的各个方法 2.1.1、load方法需要加载一个泛型对象, /**
* 创建一个Class的对象来获取泛型的class
*/
private Class clz;
public Class getClz() {
if(clz==null) {
//获取泛型的Class对象
clz = ((Class)
(((ParameterizedType)(this.getClass().getGenericSuperclass())).getActualTypeArguments()[0]));
}
return clz;
}
2.1.3、四个基本增删改查的方法实现
/**
* 获取Session
* @return
*/
protected Session getSession() {
return this.sessionFactory.openSession();
}
public T add(T t) {
getSession().save(t);
return t;
}
public void delete(int id) {
getSession().delete(load(id));
}
public void update(T t) {
getSession().update(t);
}
@SuppressWarnings("unchecked")
public T load(int id) {
return (T) getSession().load(getClz(), id);
}
2.2、list的查询, 设置别名, 参数化, 返回不分页的列表对象。
/**
* 构建排序的hql
* @param hql
* @return
*/
private String initSort(String hql) {
String order = SystemContext.getOrder();//排序的方式
String sort = SystemContext.getSort();//排序的字段
if (sort != null && !"".equals(sort.trim())) {
hql += " order by " + sort;
if (order !=null && !"desc".equals(order) ) {
hql += " asc";
}else {
hql += " desc";
}
}
return hql;
}
/**
* 设置别名
* @param query
* @param alias
*/
@SuppressWarnings("rawtypes")
private void setAliasParameter(Query query, Map alias) {
//设置别名
if (alias != null) {
Set keys = alias.keySet();
for (String key : keys) {
Object val = alias.get(key);
if (val instanceof Collection) {//value是一个集合
query.setParameterList(key, (Collection)val);
}else {
query.setParameter(key, val);
}
}
}
}
/**
* 设置参数化
* @param query
* @param args
*/
@SuppressWarnings("rawtypes")
private void setParameter(Query query, Object[] args){
//设置参数化
if (args != null && args.length > 0) {
for (int i = 0; i < args.length; i++) {
query.setParameter(i, args[i]);
}
}
}
2.3、基于分页对象的查询
2.3.1、设置分页对象
/**
* 设置分页
* @param query
* @param pager
*/
private void setPages(Query query, Pager pager) {
Integer pageSize = SystemContext.getPageSize();
Integer pageOffset = SystemContext.getPageOffset();
if (pageSize == null || pageSize
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?