Java Hibernate常用方法封装工具类

来源:互联网 发布:侠客风云传前传 mac 编辑:程序博客网 时间:2024/05/19 12:39

在学习Hibernate时,发现增删改查代码重复太多,归结成工具类,可以提高编码效率。

主要是增删该查功能,因此分为两大类型方法(增删改一类,查询一类),而方法又需要Session对象操作,因此,需要打开Session对象和关闭Session对象的方法。(其中增删改方法需要标识类型,因此又需创建枚举)。具体如下代码:


/***创建枚举*//** * * @Package:名称: HqlUtil * @Description:描述:创建枚举用来标识增删改的具体方法 * */public enum HqlUtil {    upd, // 标识为修改方法    del, // 标识为删除方法    add; // 标识为新增方法}/***工具类*/import java.util.*;import org.hibernate.*;import org.hibernate.cfg.*;/** * * @Package:名称: TravelUtil * @Description:类描述:工具类主要封装增删该查的方法 * @date:建时间: 2015-5-16 */public class TravelUtil {        /**     * 打开session 返回值类型为Session     */    public Session opneSession() {        return new Configuration().configure().buildSessionFactory()                .openSession();    }    /**     * 需要传入打开的Session     * 关闭session 返回值类型为void     */    public void closeSession(Session sess) {        if (sess != null) {            sess.close();        }    }    /**     * 增删改调用该方法     *     * @param object     *            :需要操作的inverse=false的对象     * @param inverse     *            =false(主动方)由主动方维护关联关系     * @param Enum control     *             这是枚举,修改就是Control.upd,删除Control.del,     *             新增Control.add;     * @调用举例  new TravelUtil().ControlHql(object, Control.add);     */    public int ControlHql(Object object, Enum control) {        Session session = opneSession();        Transaction tx = session.beginTransaction();        int flg = -1;        try {            if(control.equals(HqlUtil.upd)){                                session.update(object);            } else if (control.equals(HqlUtil.del)) {                session.delete(object);            } else if (control.equals(HqlUtil.add)) {                session.save(object);            }            flg = 1;            tx.commit();        } catch (HibernateException e) {            // TODO Auto-generated catch block            e.printStackTrace();            flg = -1;            tx.rollback();        } finally {            this.closeSession(session);        }        return flg;    }    /**     * 查询方法返回List<Object>集合     *     * @param object     *            为setProperties分装的条件     * @param hql为查询语句     * @return list<Object>集合     */    public List<Object> getReadList(String hql, Object object) {        Session session = opneSession();        Query query = session.createQuery(hql).setProperties(object);        List<Object> list = query.list();        this.closeSession(session);        return list;    }    /**     *     * @Title: getReadList     * @Description: 方法重载,实现分页     * @param @param nowPage     * @param @param pageSize     * @param @return          * @return List<Object>          * @throws     */    public List<Object> getReadList(Object object,String hql,int nowPage, int pageSize) {                 Session session=this.opneSession();                 Query query = session.createQuery(hql).setProperties(object);         query.setFirstResult(nowPage);         query.setMaxResults(pageSize);         List<Object> obje=query.list();                 return obje;    }        /**     * @Title: getCont     * @Description:得到查询sql条数     * @param @param hql     * @param @return          * @return int          * @throws     */    public int getCount(String hql){        if(hql.indexOf("count")<=0){                    System.out.println("语句不符合查询总条数的语法");                        return  -1;                };        Session session=this.opneSession();        Query query=session.createQuery(hql);        Long li=(Long)query.uniqueResult();        int flg=Integer.parseInt(li.toString());        System.out.println(flg);                this.closeSession(session);        return flg;    }        }        /**     *     * @Title: main     * @Description: 工具类调用示例     * @param @param args          * @return void          * @throws     */        public class Tests{    public static void main(String[] args) {                //调用---------------------得到总条数方法         //1.调用方法得到总条数                int flg=new TravelUtil().getCount("select count(*) from Userinfo");                //2.测试得到的总条数            System.out.println(flg);                        System.out.println("这是调用--分页--查询方法得到所有数据,只举了用户名");        //调用----------------------分页查询        //1.调用方法getReadList         List<Object> object= new TravelUtil().getReadList(new Object(),"from Userinfo",1, 15);         //2.得到数据并便利         for (Object object2 : object) {            //拆箱             Userinfo userinfo=(Userinfo)object2;             //得到用户名             System.out.println(userinfo.getUsname());        }                         System.out.println("这是调用查询方法得到所有数据,只举了用户名");        //调用---------------------查询得到所有数据         List<Object> object3= new TravelUtil().getReadList("from Userinfo",new Object());         for (Object object2 : object3) {            //拆箱             Userinfo userinfo=(Userinfo)object2;             //得到用户名和用户             System.out.println(userinfo.getUsname());        }                 System.out.println("------调用增删改成方法,只举例用户表-------");         //调用增删改查方法                 //1.创建对象  保存新增数据                 Userinfo uid=new Userinfo();         //给属性赋值         uid.setUsname("张三");         uid.setUspass("1faf3aff");                        //2.调用封装好的controlHql方法执行新增(add)并保持结果        int flgAdd= new TravelUtil().ControlHql(uid, HqlUtil.add);               //3.根据结果判断是否执行成功!        System.out.println(flgAdd>0?"新增成功!":"新增失败!");    }}




0 0
原创粉丝点击