Hibernate用法:查询,更新,删除!

合集下载

hibernate之增删查改总结

hibernate之增删查改总结

使用Hibernate实现数据的增删查改操作:////////////////////////////////////////////////////////1、加载(即根据主键将一条数据查询出来)import org.hibernate.*;//导入包import org.hibernate.cfg.*;public class HibernateTest {private Session session=null;public HibernateTest(){//构造函数Configuration config=new Configuration().configure()//第一步:得到配置对象SessionFactory sf = config.buildSessionFactory(); //第二步:得到会话工厂session=sf.openSession();//第三步:打开会话}public void close(){session.close();}public static void main(String[] args) {HibernateTest test=new HibernateTest();this.close();}//加载,即根据主键查询数据的方法public Customer get(String id){//实质上在Hibernate中就只需下面这一句话Customer cust = (Customer)session.get(Customer.class, id);return cust;}//测试加载的方法public void testLoad(){Customer cust = this.get("209");System.out.println(cust.getCustomerId()+":"+cust.getPassword());}}从上可得,使用Hibernate加载数据只需一行代码,不再需要繁琐的从ResultSet中取数据封装到实体的代码注意:load方法与get方法的用法一样,但是如果在load方法调用得到cust对象后,其他任何地方要使用cust对象,则不能在使用cust对象之前出现session.close()方法,否则会报no session的异常。

Hibernate增删查改语句

Hibernate增删查改语句

Hibernate增删查改语句我⽤的数据库是MySQL,实体类叫Productcreate table Product ( proId integer not null auto_increment, proName varchar(50) not null, proPrice float not null, proCount integer not null, proDesc varchar(250) not null, primary key (proId))1.Hibernate添加数据操作Product product=new Product();product.setProName("空调");product.setProPrice("1888");product.setProCount("50");product.setProDesc("变频空调");Transaction trans = session.beginTransaction();session.save(product);mit(); //任何有关数据库更新的操作都是commit后进数据库的2.Hibernate删除数据操作对象删除Transaction trans = session.beginTransaction();Product pro=new Product();pro.setProId(8); //⽤下⾯那句注释的语句效果也是⼀样的// Product pro = (Product)session.get(Product.class, 8);session.delete(pro);mit();注意,只能通过id来删除数据,不能通过title或content来删除,会报缺少标⽰符错误。

hql语句删除String hql="from Product where ProId=:id";Query<Product> query=session.createQuery(hql,Product.class);query.setParameter("id", 8); //赋值给id主键List<Product> list=query.getResultList(); //先把数据查出来pro=list.get(0);Transaction trans = session.beginTransaction();session.delete(pro); //执⾏删除语句mit();3.Hibernate查询数据操作hql查询String hql="from Product";Query<Product> query=session.createQuery(hql,Product.class);List<Product> list=query.getResultList();HQL是Hibernate主推的查询⽅式,和普通SQL语句也⽐较接近,但很重要⼀点不同就是HQL中from后⾯的是JAVA类名,不是库表名,切忌!!!如果查询全字段 "select *" 可以省略不写。

使用Hibernate实现数据的增删改查

使用Hibernate实现数据的增删改查
11
12.2
基于Annotation注解实现数据的增删改查
12
12.2 基于Annotation注解实现数据的增删改查
从JDK 1.5开始,Java增加了Annotation注解技术解决方案 ,将原来通过XML配置文件管理的信息改为通过Annotation 进行管理,从而实现Hibernate的零配置。 Hibernate 的 Annotation 方 案 是 以 Java 持 久 化 (Java Persistence API,简称JPA)为基础,进一步扩展而来。 使用Annotation注解实现数据的CRUD步骤如下: (1) 先将项目 hibernate-1 复制并命名为“ hibernate-2 ”, 再导入到MyEclipse开发环境中。 (2) 修改实体类User.java,通过Annotation注解将数据表与 实体类之间的映射在实体类中完成,无需使用映射文件,因此 需要先将项目hibernate-2的com.hibernate.entity包中的映射文 件User.hbm.xml删除,然后修改实体类User.java。 (3) 修改Hibernate配置文件。
6
Hibernate的对象3种状态转变
Hibernate以面向对象的方式实现对数据库的操作,即将对 数据表和字段的操作转变为对实体类和属性的操作。在这 一过程中,Hibernate对象经历了状态的变迁。 Hibernate的对象有3种状态,分别为:瞬时态(Transient)、 持久态 (Persistent) 、脱管态 (Detached) 。处于持久态的对 象也称为PO(Persistence Object),瞬时对象和脱管对象也 称为VO(Value Object)。 Hibernate的对象3种状态转变关系如图所示。

Hibernate中使用HQL语句进行增,删,改,查

Hibernate中使用HQL语句进行增,删,改,查

Hibernate中使⽤HQL语句进⾏增,删,改,查Hibernate的所有的操作都是通过Session完成的.基本步骤如下:1:通过配置⽂件得到SessionFactory: ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); SessionFactory sessionFactory = (SessionFactory)applicationContext.getBean("sessionFactory"); //以上配置基于spring主配置⽂件配置的⽅式2:通过SessionFactory 得到⼀个SessionSession session=sessionFactory.openSession();3:通过session进⾏插⼊,删除,修改以及查询.插⼊例⼦:(1)声明⼀个事务;(2)Session执⾏save()操作;(3)事务提交;(4)关闭Session,可选.public void insert(Person p){ Transaction tran=session.beginTransaction(); session.save(p);mit(); //session.close();}修改例⼦:(1)声明⼀个事务;(2)Session执⾏update()操作;(3)事务提交;(4)关闭Session,可选.public void update(Person p){ Transaction tran=session.beginTransaction(); session.update(p); mit(); // session.close(); }通过瞬时对象修改数据JobBean aJob=new JobBean();aJob.setJobId(17);aJob.setJobDesc("编辑⼯作1");aJob.setMaxLvl(10);aJob.setMinLvl(10);s.update(aJob);mit();通过持久对象修改数据JobBean aJob=(JobBean)s.get(JobBean.class, 17);aJob.setJobDesc("编辑⼯作2");mit();持久对象 脱管对象JobBean aJob=(JobBean)s.get(JobBean.class, 17);s.evict(aJob);aJob.setJobDesc("编辑⼯作3");//这个修改不会反应到数据库mit();删除例⼦(主键删除,推荐使⽤):(1) 声明删除的SQl语句;(2)创建session的Query对象;(3)设置Query对象的参数;(4)执⾏Query的executeUpdate()操作;(5)Session事务提交public void delete(int id){ String hql="delete Person as p where p.id=?"; //此处使⽤标准语句同样适⽤:"delete from Person where id=?"; //同样select和update都适⽤ Query query=session.createQuery(hql); query.setInteger(0,id); query.executeUpdate(); session.beginTransaction().commit();}删除例⼦(对象删除):(1)声明⼀个事务;(2)Session执⾏delete()操作;(3)事务提交;(4)关闭Session,可选. public void delete(Person p){ Transaction tran = session.beginTransaction(); //Person p = new Person(); //p.setid = id;(如果传⼊的只有部分数据) session.delete(p); mit(); session.close();}删除例字(持久对象->瞬时对象):JobBean aJob=(JobBean)s.get(JobBean.class, 17);s.delete(aJob);mit();查询例⼦: 查询语句不需要事务提交(1) 声明删除的SQl语句;(2)创建session的Query对象;(3)设置Query对象的参数;public Persion queryById(int id){ String hql="from Person as p where p.id=?"; Query query=session.createQuery(hql); query.setInteger(0,id); List rsList=query.list(); iterator it=rsList.iterator(); Person person=null; while(it.haseNext()){ person=(Person)it.next(); return person;}session.delete()- -session.delete(obj)将obj的状态变为transient。

如何使用Hibernate实现记录的增、删、改和查功能(精)

如何使用Hibernate实现记录的增、删、改和查功能(精)

如何使用Hibernate实现记录的增、删、改和查功能1 查询在Hibernate中使用查询时,一般使用Hql查询语句。

HQL(Hibernate Query Language),即Hibernate的查询语言跟SQL非常相像。

不过HQL与SQL 的最根本的区别,就是它是面向对象的。

使用HQL时需要注意以下几点:大小写敏感因为HQL是面向对象的,而对象类的名称和属性都是大小写敏感的,所以HQL是大小写敏感的。

Eg.HQL语句:from Cat as cat where cat.id > 1;与from Cat as cat where cat.ID > 1;是不一样的,这点与SQL不同。

from子句Eg. from Cat,该句返回Cat对象实例,开发人员也可以给其加上别名,eg. from Cat as cat,对于多表查询的情况,可参考如下:from Cat as cat, Dog as dog其它方面都与SQL类似,在此不再赘述。

接下来讲一个在Hibernate中查询的例子。

1.1简单查询List list = session.createQuery("from User as user order by user.loginName".list(;1.2带单个参数的查询List list = session.find("from User as user where user.loginName=?",loginName,Hibernate.STRING;1.3多个参数的查询Eg1. 此例采用“?”占位符的方式String hql = "from User as user where user.loginName=? and Id=? ";Query query = session.createQuery(hql;query.setParameter(1, 'amigo';query.setParameter(2, new Long(1 ;List list = query .list(;Eg2. 此例采用“:paramName”的方式String hql = "from User as user where user.loginName=:loginName and Id=:orgId ";Query query = session.createQuery(hql;query.setParameter('loginName', 'amigo';query.setParameter('orgId', new Long(1 ;List list = query .list(;1.4查询数量int count = (Integer session.createQuery("select count(* fromUser".uniqueResult(.intValue(;1.5限制查询起始值和数量的查询这种一般是在记录需要分页的时候需要用到,例如,在如下的代码中,限制查询的开始记录的位置为50,最大查询条数为50。

Hibernate操作数据库的方法

Hibernate操作数据库的方法
//开始事务
Transaction tx = session.beginTransaction();
//创建UserTable类实例
UserTable userTable=new UserTable();
//设置userName属性
userTable.setUserName("张三");
//设置password属性
//取得SessionFactory实例
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
//打开一个Session实例
Session session = sessionFactory.openSession();
//开始事务
sessionFactory = new Configuration().configure(file)
.buildSessionFactory();
} catch (Throwable ex) {
//创建SessionFactory失败信息
System.err.println("Initial SessionFactory creation failed." + ex);
//开始事务
Transaction tx = session.beginTransaction();
//创建UserTable类实例
UserTable userTable=new UserTable();
//设置userName属性
userTable.setUserName("张三");
//设置password属性
userTable.setPassword("123456");

Hibernate中各种增删改查方法的总结

t.addOrder(Order.desc("age"));//排序
List users = t.list();
for(Iterator it = user.iterator();it.hasnext())
{
User user = (User)it.next();
System.out.println(user.getUsername()+"\t"+user.getPassword()+"\t"+etParameter(0, "SMITH");
Query q = session.createQuery("update Userinfo set ename='AAA' WHERE ename like ?");
q.setParameter(0, "%M%");
<column name="DEPTNO" precision="2" scale="0" />
</many-to-one>
一对多:
<set name="emps" inverse="true" cascade="all">
<key>
Hibernate中各种增删改查方法的总结:
查询总结:
1. 使用HQL语句
Query q = session.createQuery("select e from com.sun.demo.Emp e");

hibernate的增删改查详解!

hibernate的增删改查详解!Hibernate 中对增删改查的小结 mysql 中库表 News, 字段如下title | int | auto_irement | primary key | varchar | varchar content | varchar 1:Hibernate 的 insert 操作: Session session =HibernateSessionFactory.getSession(); News news = new News(); news.Content( my content news.setTitle( mytitle news.setDate( my date //news 是 VOTransaction ans = session.beginTransaction();session.save(news); //news 是 PO mit(); //任何有关数据库更新的操作都是 commit 后进数据库的HibernateSessionFactory.closeSession(); 2:Hibernate 的update 操作: Session session =HibernateSessionFactory.getSession(); News news = new News(); news.setId(103); //id 不行少,Hibernate 只通过id 来查找数据库 news.setContent( update content news.setTitle( update title Transaction trans = session.beginTransaction(); session.update(news);mit(); HibernateSessionFactory.closeSession();注重这里我们更新数据不想对 date 举行更新,所以没写setDate ,但 Hibernate 会认为我们是想把 date 设置为null,所以假如要更新表中一些字段,最好用下面的办法。

Hibernate笔记(八)增删改查

从这里可以看出,查询结果被默认按照查询对象存放一个数组里面。

还有一种类似的方法createSQLQuery(),它执行的是sql语句。

String sql="from User u,User2 u2 where u.id=u2.id";Query query = sess1.createSQLQuery(sql).addEntity(User.class).addEntity(User2.class);List list = query.list();User u = (User)((Object[])list.get(0))[0];User2 u2 = (User2)((Object[])list.get(0))[1];上面两种方法效果一样,只是一个使用HQL,一个使用SQL。

如果碰到复杂查询应该怎么解决呢,比如我们需要获得一个部门及其下面的所有员工,我们只需在设计部门对象的时候为其增加一个一对多关联,然后通过单表查询部门表,在每个部门值对象的员工属性中就有其所有的员工了。

当然,在你不需要查询员工信息,而只需要部门信息的时候,你不去取员工的值,那么Hibernate就不会去数据库查询员工的信息(即延迟查询)。

在比如,我们需要在查询员工的时候显示各个员工所在部门的部门名称,只需要在员工值对象中建立员工到部门的多对一关系,在单表查询员工的时候,每个员工值对象中都有部门属性,对应的是部门值对象,包含了其所在部门的全部信息。

再比如员工与部门形成多对一、与项目形成多对多、与住址形成一对一,同时员工与工作计划、工作计划与绩效考核、绩效考核与考核工资等多表形成链状关联,都可以通过员工进行单表查询。

就是说我们可以用单表查询以及值对象关系来处理一些多表查询(使用hibernate提供的一对一、多对多、3种继承关系)。

如果碰到报表这种复杂的查询的时候,那就建议使用JDBC了。

下面说说JDBC查询的一个例子。

Hibernate对数据库的增删改查的操作

Criteria本身只是一个查询器,具体的查询条件需要通过Criteria.add方法添加到Criteria实例中。
如前面的例子所示,Expression对象具体描述了查询条件。针对SQL语法,Expression提供了对应的查询限定机制。
方法
描述
Expression.eq
对应SQL”field=value”表达式
Tuser exampleUser =newTUser();
exampleUser.setName(“Erica”);
criteria.add(Example.create(exampleUser));
List list = criteria.list();
for(inti = 0; i < list.size(); i++){
Expression.like
对应SQL”field like value”表达式
Expression.in
对应SQL”field in…”表达式
Expression.eqProperty
用于比较两个属性之间的值,对应SQL中的”field=field”。如:
Expression.eqProperty(“TUser.groupID”,”TGrpup.id”);
criteria.add(Expression.lt(“age”,newInteger(30)));
2.示例查询
Example类实现了Criterion接口,同样,它也可以用作Criteria的查询条件。Example的作用是:根据已有对象,查找属性与之相符的其他对象。
先看一个简单的例子:
Criteria criteria = session.createCriteria(TUser.class);
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Hibernate用法:查询,更新,删除!
本文介绍了基本数据查询(使用一种类似SQL的HQL来设定查询的条件)以及更新和删除数据,给出了程序源代码和运行中需要注意的事项以及结果代码,供网友参考!Hibernate对于数据的更新、删除等动作,是依赖id值来判定,如果您已知id值,则可以使用load()方法来加载资料。

一、基本数据查询
使用Hibernate进行数据查询是一件简单的事,Java程序设计人员可以使用对象操作的方式来进行数据查询,查询时使用一种类似SQL的HQL(Hibernate Query Language)来设定查询的条件,与SQL不同的是,HQL是具备对象导向的继承、多型等特性的语言。

直接使用范例来看看如何使用Hibernate进行数据库查询,在这之前,请先照之前介绍过的主题在数据库中新增几笔数据:
查询数据时,我们所使用的是Session的find()方法,并在当中指定HQL设定查询条件,查询的结果会装载在List对象中传回,您所需要的是将它们一一取出,一个最简单的例子如下:
HibernateTest.java
import onlyfun.caterpillar.*;
import net.sf.hibernate.*;
import net.sf.hibernate.cfg.*;
import java.util.*;
public class HibernateTest {
public static void main(String[] args) throws HibernateException {
SessionFactory sessionFactory =
new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
List users = session.find("from User");
session.close();
sessionFactory.close();
for (ListIterator iterator = users.listIterator();
iterator.hasNext(); ) {
User user = (User) iterator.next();
System.out.println(user.getName() +
"\n\tAge: " + user.getAge() +
"\n\tSex: " + user.getSex());
}
}
}
find()中的“from User”即HQL,User指的是User类别,藉由映射文件,它将会查询USER表格中的数据,相当于SQL中的SELECT * FROM USER,实际上我们的User类别是位于onlyfun.caterpillar下,Hibernate会自动看看import中的package名称与类别名称是否符合,您也可以直接指定package名称,例如:session.find("from er");
这个程序的运行结果可能是这样的:
上面所介绍的查询是最简单的,只是从数据表中查询所有的数据,Hibernate所查询得回的数据,是以对象的方式传回,以符合程序中操作的需要,我们也可以限定一些查询条件,并只传回我们指定的字段,例如:
在find()中的HQL示范了条件限定的查询,User as user为User类别取了别名,所以我们就可以使用来指定表格传回字段,where相当于SQL中的WHERE子句,我们限定查询age等于25的数据,这次查询的数据只有一个字段,而型态是String,所以传回的List内容都是String对象,一个运行的例子如下:
如果要传回两个以上的字段,也不是什么问题,直接来看个例子:
从上面的程序中不难看出,传回两个以上字段时,每一次ListIterator会以Object数组的方式传回一笔数据,我们只要指定数组索引,并转换为适当的型态,即可取得数据,一个查询的结果如下:
您也可以在HQL中使用一些函数来进行结果统计,例如:
一个查询的结果如下所示:
二、更新和删除数据
如果您是在同一个Session中取出数据并想要马上进行更新,则只要先查询并取出对象,透过setXXX()方法设定好新的值,然后呼叫session.flush()即可在同一个Session中更新指定的数据,例如:
HibernateTest.java
这个程序会显示数据表中的所有数据,并将数据表中的第一笔数据更新,一个执行的结果如下:
如果您开启了一个Session,从数据表中取出数据显示到使用者接口上,之后关闭Session,当使用者在接口上操作完毕并按下储存时,这时您要重新开启一个Session,使用update()方法将对象中的数据更新至对应的数据表中,一个例子如下:
HibernateTest.java
这个程序执行的结果范例如下,您可以看看实际上执行了哪些SQL:
Hibernate提供了一个saveOrUpdate()方法,为数据的储存或更新提供了一个统一的操作接口,藉由定义映像文件时,设定标签的unsaved-value来决定什么是新的值必需,什么是已有的值必须更新:
User.hbm.xml
unsaved-value
可以设定的值包括:
◆any - 总是储存
◆none - 总是更新
◆null - id为null时储存(预设)
◆valid - id为null或是指定值时储存
这样设定之后,您可以使用session.saveOrUpdate(updated);来取代上一个程序的session.update(updated);方法。

如果要删除数据,只要使用delete()方法即可,直接看个例子。

HibernateTest.java
一个执行的结果范例如下:
Hibernate对于数据的更新、删除等动作,是依赖id值来判定,如果您已知id 值,则可以使用load()方法来加载资料。

这边我们先介绍的是一些简单的查询动作,将来有机会的话,再介绍一些进阶的查询,如果您想要先认识一些HQL,可以看看参考手册的第11章,当中对于HQL有详细的说明。

相关文档
最新文档