• hibernate对单表的增删改查


    ORM: 对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping)

    实现对单表的增删改查

    向区域表中增加数据:

    第一步:

    新建一个Dao(实现add方法):

    public void add(Emp emp){
            Session session=HibernateSessionFactory.getSession();
         Transaction t=session.beginTransaction();
    try{ session.save(emp); t.commit(); }catch (Exception e) { t.rollback();
             }finally { HibernateSessionFactory.closeSession(); } }

    第二步

    新建一个类TestUi:

    public static void main(String[] args) {     
            {
                EmployeeDao dao=new EmployeeDao();
                Emp emp=new Emp();
                emp.setId(4);
                emp.setUsername("留言");
                emp.setPassword("78fd55");
                dao.add(emp);
            }
        }

    设置了事务的自动提交功能

     

    Hibernate.cfg.xml文件,会自动增加一条自动提交的代码

    <property name="connection.autocommit">true</property>

    当设置了事务的自动提交功能后,上面的dao层的代码就得修改:

    public void add(Emp emp) throws Exception{
            Session session=HibernateSessionFactory.getSession();
            try{
                session.save(emp);
                session.flush();    
            }catch (Exception e) {
                // TODO: handle exception
                throw Exception;
            }finally {
                HibernateSessionFactory.closeSession();
            }    
    }

    把区域表中删除数据:

    第一步:

    新建一个Dao:

     session.save(emp);改成 session.delete(emp);

    删除还有第二种方式:此种方式虽然官方不推荐,但此种方式更灵活一些。

    public void delete(Emp emp){
            String sql="delete from emp where username=?";
            Session session=HibernateSessionFactory.getSession();
            
            try{
                SQLQuery S=session.createSQLQuery(sql);
                S.setString(0, emp.getUsername());
                S.executeUpdate();    
            }catch (Exception e) {
                // TODO: handle exception
                
            }finally {
                HibernateSessionFactory.closeSession();
            }
    }

    第二步:新建一个TestUi:

        public static void main(String[] args) {
            
            {
                EmployeeDao dao=new EmployeeDao();
                Emp emp=new Emp();
                emp.setUsername("留言");
                dao.delete(emp);
            }
        }

    在区域表中更新数据:

    第一步:

    新建一个Dao:

    把session.save(emp);改成 session.update(emp);

    还有第二种方式:

    更改sql语句即可。

    第二步:

    新建一个类TestUi:

    在区域表中查询数据:

    第一步:

    新建一个Dao:

    public List<Emp> select(){
            String sql="from Emp where username=?";       //此处为hql语句,Emp为对象名,区分大小写
            Session session=HibernateSessionFactory.getSession();
            List<Emp> list=null;
            try{
                Query q=session.createQuery(sql);
                q.setString(0, "大概");
                list=q.list();
            }catch (Exception e) {
                // TODO: handle exception
                
            }finally {
                HibernateSessionFactory.closeSession();
            }
    }

    查询是不需要flush()的。

    sql方式查询:

    public List<Emp> sel(){
            Session session=HibernateSessionFactory.getSession();
            List<Emp> list=new ArrayList();
            try {
                String sql="select * from emp";
                SQLQuery q=session.createSQLQuery(sql);
                Iterator its=q.list().iterator();
                while(its.hasNext()){
                    Emp emp=new Emp();
                    Object[] obj=(Object[])its.next();
                    emp.setUsername(obj[0].toString());
                    emp.setPassword(obj[1].toString());
                    list.add(emp);
                }
            } catch (Exception e) {
                // TODO: handle exception
            }finally {
                HibernateSessionFactory.closeSession();
            }
            return list;
    }

    第二步:

    新建一个类TestUi:

    for循环取值即可,不做演示。

    get方法查询:

    Dao中查询方法中使用:

    Emp emp=(Emp)session.get(Emp.class,"按主键查询,这里写要查询的数据主键的值")

    查找的另一个方法load方法

    把get改成load,其余部分语法相同。

    总结:

    getload的区别:

      1load先去找缓存, 如果缓存中没有数据,那就去数据库中查。

      2get是先去找数据库,不过load不可控,最好用get

  • 相关阅读:
    递归判断字符串是否为回文
    原码,补码,反码
    Java语言程序设计2019.9.16
    四则运算---根据用户要求输出计算题源代码
    学生成绩管理系统-JAVA语言测试
    暑假生活第八周
    暑假生活第七周
    暑假生活第六周
    POJ 2400 Supervisor, Supervisee(KM二分图最大权值匹配)题解
    POJ 2226 Muddy Fields(最小点覆盖)题解
  • 原文地址:https://www.cnblogs.com/lm970585581/p/7269908.html
Copyright © 2020-2023  润新知