Hibernate通用的曾删改查代码

来源:互联网 发布:淘宝 大麦专营店 编辑:程序博客网 时间:2024/05/04 06:37

package com.fjk.commonbasedao;import java.util.List;import java.util.Map;import com.fjk.util.QueryCriteria;/** * 通用操作接口 *  * @author *  */public interface CommonDao {/** * 保存对象 *  * @param * @return */public <T> Integer save(T entity);/** * 删除对象 *  * @param * @return */public <T> Integer delete(T entity);/** * 更新对象 *  * @param * @return */public <T> Integer update(T entity);/** * 保存、更新对象 *  * @param * @return */public <T> Integer saveOrUpdate(T entity);/** * 通过id来查找某一个对像 *  * @param * @param * @return */public <T> T findById(Class<T> entityClass, String id);/** * 通过HQL语句或者实体类类名查找某类对象 *  * @param * @param * @return */public <T> List<T> findByHql(Class<T> entityClass, String HQL);/** * 多条件查询 目前仅限于单表条件查询 *  * @param * @return * entity封装了查询条件 */public <T> List<T> findByObj(T entity);/** * 返回单个Object * @param CriteriaOne * @param CriteriaTow * @return */public Object findOneObject(Map<String,Object>parameter ,String HQL);/** * 查询数据返回一个集合 * @param CriteriaOne * @param CriteriaTow * @return */public <T> List<T> findMany(Map<String,Object>parameter,String HQL);/** * 返回Integer * @param CriteriaOne * @param CriteriaTow * @return */public Integer findManyInteger(Map<String,Object>parameter,String HQL);/** * 通过QueryCriteria封装的查询条件查询的 * @param criteria * @return List<T> */public <T> List<T> findManyByQueryCriteria(Map<String,Object>parameter,String HQL);}实现类package com.fjk.commonbasedaoimpl;import java.beans.IntrospectionException;import java.beans.PropertyDescriptor;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.List;import java.util.Map;import javax.annotation.Resource;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.springframework.dao.DataAccessException;import org.springframework.stereotype.Component;import com.fjk.commonbasedao.CommonDao;import com.fjk.util.QueryCriteria;/** * 通用操作实现类 *  * @author *  */@Component("commoDao")public class CommonDaoImpl implements CommonDao {@Resource(name = "sessionFactory")private SessionFactory getMySessionFactory;private Session getSession() {return getMySessionFactory.openSession();}/** * 添加 */public <T> Integer save(T entity) {try {this.getSession().save(entity);return 1;} catch (Exception e) {e.printStackTrace();return -1;}}/** * 删除 */public <T> Integer delete(T entity) {try {this.getSession().delete(entity);return 1;} catch (Exception e) {e.printStackTrace();return -1;}}/** * 更新 */public <T> Integer update(T entity) {try {this.getSession().update(entity);return 1;} catch (Exception e) {e.printStackTrace();return -1;}}/** * 保存或者更新 */public <T> Integer saveOrUpdate(T entity) {try {this.getSession().saveOrUpdate(entity);return 1;} catch (Exception e) {e.printStackTrace();return -1;}}/** * 根据Id查询某个对象 */@SuppressWarnings("unchecked")public <T> T findById(Class<T> entityClass, String id) {try {return (T) this.getSession().get(entityClass, id);} catch (Exception e) {e.printStackTrace();return null;}}/** * 根据Bean的全类名查询数据或者HQL语句查询数据据 */@SuppressWarnings("unchecked")public <T> List<T> findByHql(Class<T> entityClass, String hql) {try {if (hql == null || hql.equals("")) {return (List<T>) this.getSession().createQuery("from " + entityClass.getName()).list();}return (List<T>) this.getSession().createQuery(hql).list();} catch (DataAccessException e) {e.printStackTrace();return null;} catch (Exception e) {e.printStackTrace();return null;}}/** * 根据根据条件查询数据 */@SuppressWarnings("unchecked")public <T> List<T> findByObj(T entity) {// 保存查询条件中的属性名称List<Object> fieldName = new ArrayList<Object>();// 保存查询添加中的属性对应值List<Object> fieldValue = new ArrayList<Object>();try {Class clazz = entity.getClass(); // 获得对应Class对象Field[] fields = entity.getClass().getDeclaredFields();// 获得对应Class所声明的所有字段// 遍历所有字段属性for (Field field : fields) {// 获得对应get方法Method getMethod = null;try {// 获取不到对应get方法则跳到下个属性getMethod = new PropertyDescriptor(field.getName(), clazz).getReadMethod();} catch (IntrospectionException e) {e.getMessage();continue;}Object val = getMethod.invoke(entity, null);if (val != null) {fieldName.add(field.getName());fieldValue.add(val);}}// 根据获取到的查询条件拼接查询语句StringBuffer hql = new StringBuffer();hql.append("from ").append(clazz.getName()).append(" a where 1=1 ");for (int i = 0; i < fieldName.size(); i++) {String name = fieldName.get(i).toString();String val = fieldValue.get(i).toString();hql.append(" and a.").append(name).append("=").append("'" + val + "'");System.out.println(name + "\t" + val);}System.out.println(hql);return this.getSession().createQuery(hql.toString()).list();} catch (Exception e) {e.printStackTrace();return null;}}/** * 返回单个查询结果对象 */@Overridepublic Object findOneObject(Map<String, Object> parameter, String HQL) {Query query=this.getSession().createQuery(HQL); String[] pamarsName = query.getNamedParameters();for (int i = 0; i < pamarsName.length; i++) {query.setParameter(pamarsName[i], parameter.get(pamarsName[i]));}return query.uniqueResult();}/** * 返回多个查询结果对象 */@SuppressWarnings("unchecked")@Overridepublic <T> List<T> findMany(Map<String, Object> parameter, String HQL) {Query query=this.getSession().createQuery(HQL); String[] pamarsName = query.getNamedParameters();//获取参数列表 for (int i = 0; i < pamarsName.length; i++) {query.setParameter(pamarsName[i], parameter.get(pamarsName[i]));}return query.list();}@Overridepublic Integer findManyInteger(Map<String, Object> parameter, String HQL) {// TODO Auto-generated method stubreturn null;}/** * 多条件查询 */@Overridepublic <T> List<T> findManyByQueryCriteria(Map<String, Object> parameter,String HQL) {// TODO Auto-generated method stubreturn null;}}

Hibernate通用的增删改查代码


1 0
原创粉丝点击