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

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

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

首先获取Session,通过Session来调用相关的方法,进行增删改查
//加载核心配置文件
Configuration cfg = new Configuration().configure();
//创建会话工厂,用户缓存配置的信息。
SessionFactory factory = cfg.buildSessionFactory();
//获得一个session
Session session=factory.openSession();
//开启事务
Transaction tx = session.beginTransaction();

//写对数据库的操作语句

//释放资源
session.close();
//提交事务
tx.commit();
下面的语句都写在数据库的操作语句的地方。
(1)、删除语句
Customer cu = session.get(Customer.class, cust_id);//删除前要先查询,验证oid
session.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 Customer
List 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、书写SQL
String sql="select * from customer";
//2、封装SQLQuery对象
SQLQuery  query=session.createSQLQuery(sql);
//3、执行查询
List<Object[]> list=query.list();

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







  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值