在hibernate中,对数据库的增删改操作以及HQL查询与QBC查询的语句的编写语法

来源:互联网 发布:淘宝正品运动鞋货源 编辑:程序博客网 时间:2024/05/17 22:40

在hibernate中,对数据库的增删改操作以及HQL查询与QBC查询的语句的编写语法

Hibernate框架是当今主流的持久层框架之一,它的灵活性比较好,可以减少程序的代码量。Hibernate是开放源码的orm(object  relation mapping对象关系映射),它对JDBC进行了轻量级的封装,hibernate可以自动生成SQL语句,自动执行,使得java程序员可以随心所欲的使用对象变成思维来操作数据库。

首先获取Session,通过Session来调用相关的方法,进行增删改查
//加载核心配置文件Configuration cfg = new Configuration().configure();//创建会话工厂,用户缓存配置的信息。SessionFactory factory = cfg.buildSessionFactory();//获得一个sessionSession session=factory.openSession();//开启事务Transaction tx = session.beginTransaction();//写对数据库的操作语句//释放资源session.close();//提交事务tx.commit();
下面的语句都写在数据库的操作语句的地方。
(1)、删除语句
Customer cu = session.get(Customer.class, cust_id);//删除前要先查询,验证oidsession.delete(cu);
(2)、修改语句
Customer cu=new Customer();cu.setCid(1);cu.setCname("哈哈");session.update(cu);//修改cid为1的用户,把他的名字改为哈哈
(3)、添加语句
Customer cu=new Customer();//cid为自动递增,所以不用设置值cu.setCname("哈哈");cu.setAge(18);session.save(cu);
(4)、hql查询语句

query有两个方法list()(查询多条记录)或uniqueResult()(查询一条记录)方法执行查询。

//基本查询:  这里面的Customer对象实体类的名称,cid为实体类的属性Query  query=session.createQuery("from Customer");List<Customer>  cList=query.list();//条件查询:Query  query=session.createQuery("from Customer  where cid=?");query.setParameter(0,2);Customer  cu=query.uniqueResult();//分页查询:Query  query=session.createQuery("from Customer");query.setFirstResult(2);//开始索引query.setMaxResults(2);//一页的记录数List<Customer>  cList=query.list();//排序查询:Query  query=session.createQuery("from Customer  order by  cid   desc");List<Customer>  cList=query.list();//统计查询:Query  query=session.createQuery(" select count(*) from Customer");Object  count=query.uniqueResult();//返回的真实类型为long//投影查询Query  query=session.createQuery("select cid,cname from Customer ");List<Object[] >  cList=query.list();
(5)、QBC查询语句

Criteria比hql语句查询更加的面向对象。

//普通查询:Criteria  c=Session.createCriteria(Customer.class)//它就相当于hql中的from CustomerList list=c.list();//条件查询:Criteria  c=Session.createCriteria(Customer.class);c.add(Restriction.eq(“cid”,1));Customer customer=(Customer)c.uniqueResult();//分页查询:Criteria  c=Session.createCriteria(Customer.class);c.setFirstResult(0);c.setMaxResult(2);List list=c.list();//排序查询Criteria  c=Session.createCriteria(Customer.class);c.addOrder(Order.desc(“cid”));//降序//c.addOrder(Order.asc(“cid”));//升序List  list=c.list();//统计查询Criteria  c=Session.createCriteria(Customer.class);c.setProjection(Projections.count(“cid”));Long total=(Long) c.uniqueResult();
离线查询

它是和在线对应的。Criteria对象是一个在线对象,它是由一个可用的(活动的)Session对象获取的出来的。当Session失效后就无法获取该对象,有一个对象,它也可以用于设置条件,但是获取的时候并不需要Session对象。

DetachedCriteria dCriteria = DetachedCriteria.forClass(Customer.class);//设置查询条件与Criteria一样。//添加条件dCriteria.add(Restriction.eq(“cid”,1));Customer customer=(Customer)c.uniqueResult();

(6)、原生的SQL查询

查询结果使用数组封装
//1、书写SQLString sql="select * from customer";//2、封装SQLQuery对象SQLQuery  query=session.createSQLQuery(sql);//3、执行查询List<Object[]> list=query.list();

查询结果使用指定对象封装
//1、书写SQLString sql="select * from customer";//2、封装SQLQuery查询对象SQLQuery  query=session.createSQLQuery(sql);//3、指定将结果封装到Customer对象中query.addEntity(Customer.class);//4、执行查询List<Customer> list=query.list();







原创粉丝点击