欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

对JPA的简单封装,JPA简单封装,对JPA做了比较简单的封

来源: javaer 分享于  点击 10814 次 点评:197

对JPA的简单封装,JPA简单封装,对JPA做了比较简单的封


对JPA做了比较简单的封装,只是简单的做了下。不知道各位是怎么做的,一起讨论一下。

[Java]代码

//------------------IBaseDao.javapackage com.zctech.eshop.dao;import java.util.List;import java.util.Map;public interface IBaseDao {    // 新增    public void save(Object obj);    // 删除    public <T> void delete(Class<T> cls, Object[] ids);    // 更新    public void update(Object obj);    // 获得所有记录    public <T> List<T> getAll(Class<T> cls);    // 按ID号查询    public <T> T getById(Class<T> cls, Object id);    // 获得总记录数    public <T> long getRowSize(Class<T> cls);    // 按精确匹配获得符合条件的记录数    public <T> long getRowSizeByEqual(Class<T> cls, Map<String, Object> map);    // 按模糊匹配获得符合条件的记录数    public <T> long getRowSizeByLike(Class<T> cls, Map<String, String> map);    // 原始查询    public <T> List<T> query(String sql);    //-----------------------------------------    // 获得分页数据    public <T> List<T> getSub(Class<T> cls, int from, int size);    // 按字段是否相等来查询    public <T> List<T> getByEqual(Class<T> cls, Map<String, Object> paramsMap);    // 按字段是否相等来查询获得分页数据    public <T> List<T> getSubByEqual(Class<T> cls, Map<String, Object> paramsMap, int from, int size);    // 按字段模糊匹配查询    public <T> List<T> getByLike(Class<T> cls, Map<String, String> map);    // 按字段模糊匹配来查询获得分页数据    public <T> List<T> getSubByLike(Class<T> cls, Map<String, String> map, int from, int size);}

[Java]代码

//------------------BaseDaoImpl.javapackage com.zctech.eshop.dao.impl;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.persistence.EntityManager;import javax.persistence.PersistenceContext;import javax.persistence.Query;import com.zctech.eshop.dao.IBaseDao;public class BaseDaoImpl implements IBaseDao {    @PersistenceContext(unitName = "myDs")    protected EntityManager em;    public void save(Object obj) {        em.persist(obj);    }    public void update(Object obj) {        em.merge(obj);    }    public <T> List<T> query(String sql) {        return em.createQuery(sql).getResultList();    }    public <T> void delete(Class<T> cls, Object[] ids) {        T obj = null;        for (Object id : ids) {            obj = em.find(cls, id);            em.remove(obj);        }    }    public <T> T getById(Class<T> cls, Object id) {        return em.find(cls, id);    }    public <T> List<T> getAll(Class<T> cls) {        return getBy(false, false, cls, null, 0, 0);    }    @Override    public <T> long getRowSize(Class<T> cls) {        return new Long(getBy(true, true, cls, null, 0, 0).get(0).toString());    }    @Override    public <T> long getRowSizeByEqual(Class<T> cls, Map<String, Object> paramsMap) {        return new Long(getBy(true, false, cls, paramsMap, 0, 0).get(0).toString());    }    @Override    public <T> long getRowSizeByLike(Class<T> cls, Map<String, String> paramsMap) {        Map<String, Object> map = toStringObjectMap(paramsMap);        return new Long(getBy(true, true, cls, map, 0, 0).get(0).toString());    }    @Override    public <T> List<T> getSub(Class<T> cls, int from, int size) {        return getBy(false, false, cls, null, from, size);    }    @Override    public <T> List<T> getSubByEqual(Class<T> cls, Map<String, Object> paramsMap, int from, int size) {        return getBy(false, false, cls, paramsMap, from, size);    }    @Override    public <T> List<T> getByEqual(Class<T> cls, Map<String, Object> paramsMap) {        return getBy(false, false, cls, paramsMap, 0, 0);    }    @Override    public <T> List<T> getSubByLike(Class<T> cls, Map<String, String> paramsMap, int from, int size) {        Map<String, Object> map = toStringObjectMap(paramsMap);        return getBy(false, true, cls, map, from, size);    }    @Override    public <T> List<T> getByLike(Class<T> cls, Map<String, String> paramsMap) {        Map<String, Object> map = toStringObjectMap(paramsMap);        return getBy(false, true, cls, map, 0, 0);    }    /**     * 可构造性的原始查询     *      * @param <T>     * @param getRowCount     *            是否计算记录条数的查询(即,select count(*))     * @param isVagou     *            是否模糊查询like(相对于精确查询equal)     * @param cls     *            对应的实体类名     * @param paramsMap     *            查询字段映射数据     * @param from     *            起始记录序号     * @param size     *            本次查询的记录数     * @return     */    private <T> List<T> getBy(boolean getRowCount, boolean isVagou, Class<T> cls, Map<String, Object> paramsMap, int from, int size) {        String paramTag = null;     // sql语句中的占位参数标记名        String paramValue = null;   // sql语句中的参数值        String entityValue = null;  // sql语句中的实体参数名        String className = cls.getSimpleName(); // 对应的类名        String preSql = getRowCount ? "select count(e) from " : "select e from ";        StringBuffer sql = new StringBuffer(preSql);        sql.append(className).append(" e where e.id!=0 and 1=1 ");        Query query = null;        if (null != paramsMap) {            // 构型            for (String key : paramsMap.keySet()) {                paramTag = ":".concat(key.replace(".", "_"));                entityValue = "lower(e.".concat(key).concat(")");                if (!isVagou) {                    sql.append(" and ").append(entityValue).append("=").append(paramTag).append(" ");                } else if(paramTag.endsWith("_id")){                    // 如果对应的是主键,则将like改为equal                    sql.append(" and ").append(entityValue).append("=").append(paramTag).append(" ");                } else {                    sql.append(" and ").append(entityValue).append(" like ").append(paramTag).append(" ");                }                System.out.println("sql== "+sql.toString()+"---"+paramsMap.get(key));            }        }        query = em.createQuery(sql.toString());        if (null != paramsMap) {            // 填值            for (String key : paramsMap.keySet()) {                paramTag = key.replace(".", "_");                paramValue = paramsMap.get(key).toString().toLowerCase();                if (!isVagou) {                    try {                        query.setParameter(paramTag, new Long(paramValue));                    } catch (Exception ex) {                        query.setParameter(paramTag, paramValue);                    }                } else {                    // 如果对应的是主键,则将like改为equal                    if(paramTag.endsWith("_id")){                        query.setParameter(paramTag, new Long(paramValue));                    } else{                        query.setParameter(paramTag, "%" + paramValue + "%");                    }                }            }        }        if (from == 0 && size == 0) {            return query.getResultList();        }        return query.setFirstResult(from).setMaxResults(size).getResultList();    }    /**     * 将<String, String>类型的映射转换为<String, Object>类型     *      * @param paramsMap     * @return     */    private Map<String, Object> toStringObjectMap(Map<String, String> paramsMap) {        Map<String, Object> map = new HashMap<String, Object>();        for (String key : paramsMap.keySet()) {            map.put(key, paramsMap.get(key));        }        return map;    }}
相关栏目:

用户点评