代码:
1.Hibernate框架配置文件
hibernate.cfg.xml(连接数据库和实体类对应数据库表的配置文件)
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <!-- Generated by MyEclipse Hibernate Tools. --> <hibernate-configuration> <session-factory> <property name="show_sql">true</property> <property name="myeclipse.connection.profile">bookshop</property> <property name="connection.url"> jdbc:MysqL://localhost:3306/bookshop </property> <property name="connection.username">root</property> <property name="connection.password">1234</property> <property name="connection.driver_class"> com.MysqL.jdbc.Driver </property> <property name="dialect"> org.hibernate.dialect.MysqLDialect </property> <mapping resource="com/hibtest2/entity/Users.hbm.xml" /> <mapping resource="com/hibtest2/entity/Books.hbm.xml" /> <mapping resource="com/hibtest2/entity/Publishers.hbm.xml" /> <mapping resource="com/hibtest2/entity/Student.hbm.xml" /> <mapping resource="com/hibtest2/entity/Course.hbm.xml" /> </session-factory> </hibernate-configuration>
2.基类
BaseHibernateDAO.java
package com.hibtest2.dao; import java.io.Serializable; import java.util.List; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.criterion.Example; import com.hibtest2.HibernateSessionFactory; public abstract class BaseHibernateDAO { /* * 添加数据 */ protected void add(Object object){ Transaction tran=null; //获取session Session session=HibernateSessionFactory.getSession(); try{ //开始事务 tran=session.beginTransaction(); //持久化操作 session.save(object); //提交事务 tran.commit(); }catch (Exception e) { if(tran!=null){ //事务回滚 tran.rollback(); } e.printStackTrace(); }finally{ //关闭session session.close(); } } /* * 加载数据 */ protected Object get(Class cla,Serializable id){ Object object=null; Session session=HibernateSessionFactory.getSession(); try { object=session.get(cla,id); } catch (HibernateException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { session.close(); } return object; } /* * 删除数据 */ protected void delete(Object object){ Transaction tran=null; Session session=HibernateSessionFactory.getSession(); try { tran=session.beginTransaction(); session.delete(object); tran.commit(); } catch (HibernateException e) { // TODO Auto-generated catch block if(tran!=null){ tran.rollback(); } e.printStackTrace(); } finally { session.close(); } } /* * 修改数据 */ protected void update(Object object){ Transaction tran=null; Session session=HibernateSessionFactory.getSession(); try { tran=session.beginTransaction(); session.update(object); tran.commit(); } catch (HibernateException e) { // TODO Auto-generated catch block if(tran!=null){ tran.rollback(); } e.printStackTrace(); } finally { session.close(); } } /* * 查询数据 */ protected List search(Class cla,Object condition){ Session session=null; List list=null; try { session=HibernateSessionFactory.getSession(); list=session.createCriteria(cla).add(Example.create(condition)).list(); } catch (Exception e) { // TODO: handle exception } finally{ session.close(); } return list; } }
3.实体类
Users.java
package com.hibtest2.entity;
/**
* Users entity. @author MyEclipse Persistence Tools
*/
public class Users implements java.io.Serializable {
// Fields
private Integer id;
private String loginName;
private String loginPwd;
// Constructors
/** default constructor */
public Users() {
}
/** full constructor */
public Users(String loginName,String loginPwd) {
this.loginName = loginName;
this.loginPwd = loginPwd;
}
// Property accessors
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getLoginName() {
return this.loginName;
}
public void setLoginName(String loginName) {
this.loginName = loginName;
}
public String getLoginPwd() {
return this.loginPwd;
}
public void setLoginPwd(String loginPwd) {
this.loginPwd = loginPwd;
}
}
Student.java
package com.hibtest2.entity;
import java.util.HashSet;
import java.util.Set;
/**
* Student entity. @author MyEclipse Persistence Tools
*/
public class Student implements java.io.Serializable {
// Fields
private Integer studentId;
private String studentName;
private Set courses=new HashSet();
// Constructors
public Set getCourses() {
return courses;
}
public void setCourses(Set courses) {
this.courses = courses;
}
/** default constructor */
public Student() {
}
/** full constructor */
public Student(String studentName) {
this.studentName = studentName;
}
// Property accessors
public Integer getStudentId() {
return this.studentId;
}
public void setStudentId(Integer studentId) {
this.studentId = studentId;
}
public String getStudentName() {
return this.studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
}
Publishers.java
package com.hibtest2.entity;
import java.util.HashSet;
import java.util.Set;
/**
* Publishers entity. @author MyEclipse Persistence Tools
*/
public class Publishers implements java.io.Serializable {
// Fields
private Integer id;
private String name;
private Set bks=new HashSet();
// Constructors
public Set getBks() {
return bks;
}
public void setBks(Set bks) {
this.bks = bks;
}
/** default constructor */
public Publishers() {
}
/** full constructor */
public Publishers(String name) {
this.name = name;
}
// Property accessors
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
Course.java
package com.hibtest2.entity;
import java.util.HashSet;
import java.util.Set;
/**
* Course entity. @author MyEclipse Persistence Tools
*/
public class Course implements java.io.Serializable {
// Fields
private Integer courseId;
private String courseName;
private Set students=new HashSet();
// Constructors
public Set getStudents() {
return students;
}
public void setStudents(Set students) {
this.students = students;
}
/** default constructor */
public Course() {
}
/** full constructor */
public Course(String courseName) {
this.courseName = courseName;
}
// Property accessors
public Integer getCourseId() {
return this.courseId;
}
public void setCourseId(Integer courseId) {
this.courseId = courseId;
}
public String getCourseName() {
return this.courseName;
}
public void setCourseName(String courseName) {
this.courseName = courseName;
}
}
Books.java
package com.hibtest2.entity;
/**
* Books entity. @author MyEclipse Persistence Tools
*/
public class Books implements java.io.Serializable {
// Fields
private Integer id;
private String title;
private String author;
//private Integer publisherId;
private Publishers publishers;
public Publishers getPublishers() {
return publishers;
}
public void setPublishers(Publishers publishers) {
this.publishers = publishers;
}
private Integer publisherDate;
private String isbn;
private Integer wordsCount;
private Integer unitPrice;
private String contentDescription;
// Constructors
/** default constructor */
public Books() {
}
/** minimal constructor */
public Books(String title,String author,Integer publisherId) {
this.title = title;
this.author = author;
//this.publisherId = publisherId;
}
/** full constructor */
public Books(String title,Integer publisherId,Integer publisherDate,String isbn,Integer wordsCount,Integer unitPrice,String contentDescription) {
this.title = title;
this.author = author;
//this.publisherId = publisherId;
this.publisherDate = publisherDate;
this.isbn = isbn;
this.wordsCount = wordsCount;
this.unitPrice = unitPrice;
this.contentDescription = contentDescription;
}
// Property accessors
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTitle() {
return this.title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return this.author;
}
public void setAuthor(String author) {
this.author = author;
}
/*public Integer getPublisherId() {
return this.publisherId;
}
public void setPublisherId(Integer publisherId) {
this.publisherId = publisherId;
}*/
public Integer getPublisherDate() {
return this.publisherDate;
}
public void setPublisherDate(Integer publisherDate) {
this.publisherDate = publisherDate;
}
public String getIsbn() {
return this.isbn;
}
public void setIsbn(String isbn) {
this.isbn = isbn;
}
public Integer getWordsCount() {
return this.wordsCount;
}
public void setWordsCount(Integer wordsCount) {
this.wordsCount = wordsCount;
}
public Integer getUnitPrice() {
return this.unitPrice;
}
public void setUnitPrice(Integer unitPrice) {
this.unitPrice = unitPrice;
}
public String getContentDescription() {
return this.contentDescription;
}
public void setContentDescription(String contentDescription) {
this.contentDescription = contentDescription;
}
}
4.实体类映射文件
Users.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.hibtest2.entity.Users" table="users" catalog="bookshop">
<id name="id" type="java.lang.Integer">
<column name="Id" />
<generator class="native"></generator>
</id>
<property name="loginName" type="java.lang.String">
<column name="LoginName" length="50" />
</property>
<property name="loginPwd" type="java.lang.String">
<column name="LoginPwd" length="16" />
</property>
</class>
</hibernate-mapping>
Student.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.hibtest2.entity.Student" table="student" catalog="bookshop">
<id name="studentId" type="java.lang.Integer">
<column name="StudentId" />
<generator class="native"></generator>
</id>
<property name="studentName" type="java.lang.String">
<column name="StudentName" length="16" />
</property>
<set name="courses" table="sc" lazy="false" inverse="false">
<key column="Sid" not-null="true" />
<many-to-many column="Cid" class="com.hibtest2.entity.Course" />
</set>
</class>
</hibernate-mapping>
Publishers.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.hibtest2.entity.Publishers" table="publishers" catalog="bookshop">
<id name="id" type="java.lang.Integer">
<column name="Id" />
<generator class="native"></generator>
</id>
<property name="name" type="java.lang.String">
<column name="Name" length="16" not-null="true" />
</property>
<set name="bks" lazy="false" cascade="all" inverse="true">
<key column="PublisherId" not-null="true"/>
<one-to-many class="com.hibtest2.entity.Books"/>
</set>
</class>
</hibernate-mapping>
Course.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.hibtest2.entity.Course" table="course" catalog="bookshop">
<id name="courseId" type="java.lang.Integer">
<column name="CourseId" />
<generator class="native"></generator>
</id>
<property name="courseName" type="java.lang.String">
<column name="CourseName" length="16" />
</property>
<set name="students" table="sc" lazy="false" inverse="true">
<key column="Cid" not-null="true" />
<many-to-many column="Sid" class="com.hibtest2.entity.Student" />
</set>
</class>
</hibernate-mapping>
Books.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.hibtest2.entity.Books" table="books" catalog="bookshop">
<id name="id" type="java.lang.Integer">
<column name="Id" />
<generator class="native"></generator>
</id>
<property name="title" type="java.lang.String">
<column name="Title" length="16" not-null="true" />
</property>
<property name="author" type="java.lang.String">
<column name="Author" length="16" not-null="true" />
</property>
<!--
<property name="publisherId" type="java.lang.Integer">
<column name="PublisherId" not-null="true" />
</property>
-->
<many-to-one name="publishers" column="PublisherId" class="com.hibtest2.entity.Publishers" insert="true" update="true" lazy="false"/>
<property name="publisherDate" type="java.lang.Integer">
<column name="PublisherDate" />
</property>
<property name="isbn" type="java.lang.String">
<column name="ISBN" length="16" />
</property>
<property name="wordsCount" type="java.lang.Integer">
<column name="WordsCount" />
</property>
<property name="unitPrice" type="java.lang.Integer">
<column name="UnitPrice" precision="8" scale="0" />
</property>
<property name="contentDescription" type="java.lang.String">
<column name="ContentDescription" length="16" />
</property>
</class>
</hibernate-mapping>
5.各种关联映射示例
5.1多对一映射示例
package com.hibtest2; import com.hibtest2.dao.BaseHibernateDAO; import com.hibtest2.entity.Books; public class TestManyToOne extends BaseHibernateDAO { /** * @param args */ public static void main(String[] args) { TestManyToOne mto=new TestManyToOne(); mto.testManyToOne(); } public void testManyToOne(){ //根据id获取Books对象 Books books=(Books) super.get(Books.class,new Integer(4947)); //根据多对一映射,从Books对象中获取指定图书的出版社 System.out.println("编号是4947的图书出版社是:"+books.getPublishers().getName().toString()); } }
5.2一对多映射示例
package com.hibtest2; import java.util.Iterator; import com.hibtest2.dao.BaseHibernateDAO; import com.hibtest2.entity.Books; import com.hibtest2.entity.Publishers; public class TestOneToMany extends BaseHibernateDAO { /** * @param args */ public static void main(String[] args) { TestOneToMany otm=new TestOneToMany(); otm.testOneToMany(); } public void testOneToMany(){ //根据id获取Publishers对象 Publishers publishers=(Publishers) super.get(Publishers.class,new Integer(1)); System.out.println(publishers.getName()+"出版社出版的图书包括:"); //根据一对多映射,从Publishers对象中获取出版图书名称 Iterator iter=publishers.getBks().iterator(); while(iter.hasNext()){ Books books=(Books)iter.next(); System.out.println(books.getTitle()); } } }
5.3多对多映射示例
package com.hibtest2; import java.util.Iterator; import com.hibtest2.dao.BaseHibernateDAO; import com.hibtest2.entity.Course; import com.hibtest2.entity.Student; public class TestManyToMany extends BaseHibernateDAO { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub TestManyToMany m2m=new TestManyToMany(); //m2m.testAdd_1(); //m2m.testAdd_2(); //m2m.testAdd_3(); //m2m.testDelete_1(); m2m.testDelete_2(); } public void testAdd_1(){ //创建两个Student对象 Student s1=new Student(); s1.setStudentName("韦小宝"); Student s2=new Student(); s2.setStudentName("令狐冲"); //创建四个Course对象 Course c1=new Course(); c1.setCourseName("数据结构"); Course c2=new Course(); c2.setCourseName("操作系统"); Course c3=new Course(); c3.setCourseName("计算机组成原理"); Course c4=new Course(); c4.setCourseName("离散数学"); //设定s1与c1和c2之间的相互关联 s1.getCourses().add(c1); s1.getCourses().add(c2); /*c1.getStudents().add(s1); c2.getStudents().add(s1);*/ //设定s2与c1、c3和c4之间的相互关联 s2.getCourses().add(c1); s2.getCourses().add(c3); s2.getCourses().add(c4); /*c1.getStudents().add(s2); c3.getStudents().add(s2); c4.getStudents().add(s2);*/ //保存c1、c2、c3和c4 super.add(c1); super.add(c2); super.add(c3); super.add(c4); //保存s1和s2对象 super.add(s1); super.add(s2); } public void testAdd_2(){ //创建"东方不败"对象 Student newStu=new Student(); newStu.setStudentName("东方不败"); //加载"计算机组成原理"对象 Course c=(Course)super.get(Course.class,new Integer(3)); //设置newStu和c对象之间的关联 newStu.getCourses().add(c); //保存对象newStu super.add(newStu); //更新对象c super.update(c); } public void testAdd_3(){ //加载"韦小宝"和"东方不败"对象 Student wxb=(Student)super.get(Student.class,new Integer(1)); Student dfbb=(Student)super.get(Student.class,new Integer(3)); //创建"编译原理"课程对象 Course byyl=new Course(); byyl.setCourseName("编译原理"); //设定wxb、dfbb与byyl对象之间的关联 wxb.getCourses().add(byyl); dfbb.getCourses().add(byyl); //保存byyl对象 super.add(byyl); //更新wxb和dfbb对象 super.update(wxb); super.update(dfbb); } public void testDelete_1(){ //加载"韦小宝"对象,并获得其选课集合 Student student=(Student)super.get(Student.class,new Integer(1)); Iterator courses=student.getCourses().iterator(); //删除中介表sc中与"韦小宝"关联的记录 while(courses.hasNext()){ Course course=(Course)courses.next(); course.getStudents().remove(student); } //将"韦小宝"对象删除 super.delete(student); } public void testDelete_2(){ //加载"令狐冲"对象 Student student=(Student)super.get(Student.class,new Integer(2)); //将"令狐冲"对象删除 super.delete(student); } }
5.4双向关联映射示例
package com.hibtest2; import com.hibtest2.dao.BaseHibernateDAO; import com.hibtest2.entity.Books; import com.hibtest2.entity.Publishers; public class TestM2OAndO2M extends BaseHibernateDAO { /** * 双向关联映射 */ public static void main(String[] args) { TestM2OAndO2M m2o_o2m=new TestM2OAndO2M(); //m2o_o2m.testAdd_1(); //m2o_o2m.testAdd_2(); //m2o_o2m.testAdd_3(); //m2o_o2m.testAdd_4(); //m2o_o2m.testDelete_1(); //m2o_o2m.testDelete_2(); m2o_o2m.testUpdate(); } public void testAdd_1(){ //添加出版社信息 Publishers publishers=new Publishers(); publishers.setName("电子工业出版社"); super.add(publishers); } public void testAdd_2(){ //加载得到电子工业出版社实体对象 Publishers dzgy=(Publishers)super.get(Publishers.class,new Integer(4)); //新建图书对象 Books book1=new Books(); book1.setTitle("单元测试之道C#版"); book1.setAuthor("(美)托马斯等"); //将电子工业出版社对象设置到实体对象Books的publishers属性中 book1.setPublishers(dzgy); //将图书对象保存到数据库 super.add(book1); //新建图书对象 Books book2=new Books(); book2.setTitle("C++网络编程,卷1"); book2.setAuthor("(美)施密特"); //将电子工业出版社对象设置到实体对象Books的publishers属性中 book2.setPublishers(dzgy); //将图书对象保存到数据库 super.add(book2); } public void testAdd_3(){ //创建水利水电出版社对象 Publishers publishers=new Publishers(); publishers.setName("水利水电出版社"); //创建第一个Books对象 Books book1=new Books(); book1.setTitle("二级C语言程序设计"); book1.setAuthor("侯东昌,宋智玲等"); //创建第二个Book对象 Books book2=new Books(); book2.setTitle("Visual Basic.NET"); book2.setAuthor("徐振明主编"); //建立Publishers对象和Books对象的一对多双向关联关系, //只需从Publishers一方进行维护即可 publishers.getBks().add(book1); publishers.getBks().add(book2); //保存Publishers对象 super.add(publishers); } public void testAdd_4(){ //创建一个Publishers对象 Publishers publishers=new Publishers(); publishers.setName("西安电子科技大学出版社"); //创建两个Books对象 Books book1=new Books(); book1.setTitle("Windows CE应用程序设计"); book1.setAuthor("张勇,许波编著"); Books book2=new Books(); book2.setTitle("MATLAB及其在..."); book2.setAuthor("陈怀琛 编著"); //由于将关联关系交给Books来维护,所以在存储时必须明确地 //将Publishers设定给Books,即Books必须调用setPublishers()方法 book1.setPublishers(publishers); book2.setPublishers(publishers); //建立Publishers对象和Books对象的一对多双向关联关系,并保存Publishers对象 publishers.getBks().add(book1); publishers.getBks().add(book2); super.add(publishers); } public void testDelete_1(){ //加载待删除的Books对象 Books book=(Books)super.get(Books.class,new Integer(4939)); //调用父类的delete方法删除对象 super.delete(book); } public void testDelete_2(){ //加载水利水电出版社对象 Publishers publisher=(Publishers)super.get(Publishers.class,new Integer(5)); super.delete(publisher); } public void testUpdate(){ //加载"Windows CE应用程序设计"图书实体对象 Books web_yykf=(Books)super.get(Books.class,new Integer(4958)); //加载"西安电子科技大学出版社"和"机械工业出版社"两个出版社实体对象 Publishers xadz=(Publishers)super.get(Publishers.class,new Integer(6)); Publishers jxgy=(Publishers)super.get(Publishers.class,new Integer(3)); //从"西安电子科技大学出版社"对象的 bks属性中删除图书"Windows CE应用程序设计", //并添加到"机械工业出版社"的bks属性中,同时将"机械工业出版社"设置到该图书对象中 xadz.getBks().remove(web_yykf); jxgy.getBks().add(web_yykf); web_yykf.setPublishers(jxgy); //更新"Windows CE应用程序设计"图书对象 super.update(web_yykf); } }
5.5HQL查询示例
package com.hibtest2; import java.util.Iterator; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import com.hibtest2.entity.Books; public class TestHQL { /** * HQL查询 */ public static void main(String[] args) { TestHQL tHql=new TestHQL(); //tHql.testHql_1(); //tHql.testHql_2(); //tHql.testHql_3(); //tHql.testHql_4(); //tHql.testHql_5(); //tHql.testHql_6(); //tHql.pagedSearch(2,3); tHql.testHql_7(); } public void testHql_1(){ //获取session Session session=HibernateSessionFactory.getSession(); //编写HQL语句 String hql="from Books"; //创建Query对象 Query query=session.createQuery(hql); //执行查询,获得结果 List list=query.list(); //遍历查找结果 Iterator itor=list.iterator(); while(itor.hasNext()){ Books book=(Books)itor.next(); System.out.println(book.getTitle()+" "+book.getAuthor()+" "+book.getContentDescription()); } } /** * 属性查询 */ public void testHql_2(){ Session session=HibernateSessionFactory.getSession(); //编写HQL语句,使用属性查询 String hql="select books.title,books.author from Books as books"; Query query=session.createQuery(hql); List list=query.list(); Iterator itor=list.iterator(); //每天记录封装成一个Object数组 while(itor.hasNext()){ Object[] object=(Object[])itor.next(); System.out.println(object[0]+" "+object[1]); } } /** * 参数查询,按参数位置查询 */ public void testHql_3(){ Session session=HibernateSessionFactory.getSession(); //编写HQL语句,使用参数查询 String hql="from Books books where books.title like ? "; Query query=session.createQuery(hql); //给HQL语句中“?”代表的参数设置值 query.setString(0,"%C++%"); List list=query.list(); Iterator itor=list.iterator(); while(itor.hasNext()){ Books book=(Books)itor.next(); System.out.println(book.getTitle()+" "+book.getAuthor()+" "+book.getContentDescription()); } } /** * 参数查询,按参数名字查询 */ public void testHql_4(){ Session session=HibernateSessionFactory.getSession(); //通过":bookTitle"定义命名参数"bookTitle" String hql="from Books books where books.title=:bookTitle"; Query query=session.createQuery(hql); //给命名参数设置值 query.setString("bookTitle","C++ Primer中文版"); List list=query.list(); Iterator itor=list.iterator(); while(itor.hasNext()){ Books book=(Books)itor.next(); System.out.println(book.getTitle()+" "+book.getAuthor()+" "+book.getContentDescription()); } } /** * 连接查询 */ public void testHql_5(){ Session session=HibernateSessionFactory.getSession(); //编写HQL语句,使用连接查询 String hql="select b from Books b,Publishers p where b.publishers=p and p.name='清华大学出版社'"; Query query=session.createQuery(hql); List list=query.list(); Iterator itor=list.iterator(); while(itor.hasNext()){ Books book=(Books)itor.next(); System.out.println(book.getTitle()+" "+book.getAuthor()+" "+book.getContentDescription()); } } /** * 分页查询 */ public void testHql_6(){ Session session=HibernateSessionFactory.getSession(); //按书名升序查询图书对象 String hql="from Books b order by b.title asc"; Query query=session.createQuery(hql); //从第一个对象开始查询 query.setFirstResult(0); //从查询结果中一次返回3个对象 query.setMaxResults(3); //执行查询 List list=query.list(); //遍历查询结果 Iterator itor=list.iterator(); while(itor.hasNext()){ Books book=(Books)itor.next(); System.out.println(book.getTitle()+" "+book.getAuthor()+" "+book.getContentDescription()); } } public void pagedSearch(int pageIndex,int pageSize){ Session session=HibernateSessionFactory.getSession(); String hql="from Books b order by b.title asc"; Query query=session.createQuery(hql); int startIndex=(pageIndex-1)*pageSize; query.setFirstResult(startIndex); query.setMaxResults(pageSize); List list=query.list(); Iterator itor=list.iterator(); while(itor.hasNext()){ Books book=(Books)itor.next(); System.out.println(book.getTitle()+" "+book.getAuthor()+" "+book.getContentDescription()); } } /** * 聚集函数 */ public void testHql_7(){ Session session=HibernateSessionFactory.getSession(); //统计记录总数 String hql1="select count(b) from Books b"; Query query1=session.createQuery(hql1); Long count=(Long)query1.uniqueResult(); //统计书的平均金额 String hql2="select avg(b.unitPrice) from Books b"; Query query2=session.createQuery(hql2); Double money=(Double)query2.uniqueResult(); //统计最贵和最便宜的图书 String hql3="select min(b.unitPrice),max(b.unitPrice) from Books b"; Query query3=session.createQuery(hql3); Object[] price=(Object[])query3.uniqueResult(); System.out.println("记录总数"+count.toString()+" 平均金额"+ money.toString()+" 书价最低为"+price[0].toString()+ " 书价最高为"+price[1].toString()); } }
5.6Criteria查询示例
package com.hibtest2; import java.util.*; import org.hibernate.*; import org.hibernate.criterion.*; import com.hibtest2.entity.Books; public class TestCriteria { /** * Criteria查询 */ public static void main(String[] args) { TestCriteria tc=new TestCriteria(); //使用对象封装查询条件 /*Books books=new Books(); books.setTitle("Web应用"); tc.testCriteria_1(books);*/ //tc.testCriteria_2(); //tc.testCriteria_2_1(); //tc.testCriteria_3(); //tc.testCriteria_4(); tc.testDetachedCriteria(); } /** * 使用Criteria对象进行简单查询 * @param condition */ public void testCriteria_1(Books condition){ //获得session Session session=HibernateSessionFactory.getSession(); //创建Criteria对象 Criteria criteria=session.createCriteria(Books.class); //使用Restrictions对象编写查询条件,并将查询条件加入Criteria对象 if(condition!=null){ if(condition.getTitle()!=null && !condition.getTitle().equals("")){ //按书名进行筛选 criteria.add(Restrictions.like("title",condition.getTitle(),MatchMode.ANYWHERE)); } if(condition.getAuthor()!=null && !condition.getAuthor().equals("")){ //按作者进行筛选 criteria.add(Restrictions.like("author",condition.getAuthor(),MatchMode.ANYWHERE)); } } //排序 criteria.addOrder(Order.asc("id")); //执行查询,获得结果 List list=criteria.list(); //遍历查询结果 Iterator itor=list.iterator(); while(itor.hasNext()){ Books book=(Books)itor.next(); System.out.println(book.getTitle()+" "+book.getAuthor()+" "+book.getContentDescription()); } } /** * 使用Criterion 并通过 Restrictions 工具类,实现关联查询 */ public void testCriteria_2(){ Session session=HibernateSessionFactory.getSession(); Criteria bookCriteria=session.createCriteria(Books.class); //设置从Books类中查询的条件 bookCriteria.add(Restrictions.like("title","C++",MatchMode.ANYWHERE)); //创建一个新的Criteria实例,以引用pulishers集合中的元素 Criteria publishersCriteria=bookCriteria.createCriteria("publishers"); //设置从关联的Publishers类中查询的条件 publishersCriteria.add(Restrictions.like("name","清华大学出版社")); List list=publishersCriteria.list(); Iterator itor=list.iterator(); while(itor.hasNext()){ Books book=(Books)itor.next(); System.out.println(book.getTitle()+" "+book.getAuthor()+" "+book.getContentDescription()); } } /** * 采用方法链编程风格,使用Criteria对象进行查询 */ public void testCriteria_2_1(){ Session session=HibernateSessionFactory.getSession(); List list=session.createCriteria(Books.class) .add(Restrictions.like("title",MatchMode.ANYWHERE)) .createCriteria("publishers") .add(Restrictions.like("name","清华大学出版社")).list(); Iterator itor=list.iterator(); while(itor.hasNext()){ Books book=(Books)itor.next(); System.out.println(book.getTitle()+" "+book.getAuthor()+" "+book.getContentDescription()); } } /** * 使用Criterion 并通过 Restrictions 工具类,实现分页查询 */ public void testCriteria_3(){ Session session=HibernateSessionFactory.getSession(); Criteria criteria=session.createCriteria(Books.class); //从第一个对象开始查询 criteria.setFirstResult(0); //每次从查询结果中返回4个对象 criteria.setMaxResults(4); List list=criteria.list(); Iterator itor=list.iterator(); while(itor.hasNext()){ Books book=(Books)itor.next(); System.out.println(book.getTitle()+" "+book.getAuthor()+" "+book.getContentDescription()); } } /** * 使用Expression类实现查询 */ public void testCriteria_4(){ Session session=HibernateSessionFactory.getSession(); List list=session.createCriteria(Books.class) //使用Expression类编写查询条件 .add(Expression.like("title",MatchMode.ANYWHERE)) //对查询结果进行排序 .addOrder(Order.asc("id")).list(); Iterator itor=list.iterator(); while(itor.hasNext()){ Books book=(Books)itor.next(); System.out.println(book.getTitle()+" "+book.getAuthor()+" "+book.getContentDescription()); } } /** * 使用DetachedCriteria查询 */ public void testDetachedCriteria(){ //创建离线查询DetachedCriteria实例 DetachedCriteria query=DetachedCriteria.forClass(Books.class) .add(Property.forName("title").eq("Web应用开发技术")); //创建Hibernate Session Session session=HibernateSessionFactory.getSession(); //执行查询 List list=query.getExecutableCriteria(session).list(); Iterator itor=list.iterator(); while(itor.hasNext()){ Books book=(Books)itor.next(); System.out.println(book.getTitle()+" "+book.getAuthor()+" "+book.getContentDescription()); } } }总结:通过练习,基本了解Hibernate框架的运行原理,熟练掌握Hibernate框架的基本数据库操作。 原文链接:https://www.f2er.com/xml/294449.html