[关闭]
@yudesong 2018-02-17T07:20:24.000000Z 字数 4763 阅读 636

Hibernate 缓存以及关联关系

Hibernate


缓存

关联关系

  1. //开发人员信息
  2. public class Developer {
  3. private Integer d_id;//开发人员编号
  4. private String d_name;//开发人员姓名
  5. //开发人员参与的多个项目
  6. private Set<Project> projects=new HashSet<Project>();
  7. public Integer getD_id() {
  8. return d_id;
  9. }
  10. public void setD_id(Integer d_id) {
  11. this.d_id = d_id;
  12. }
  13. public String getD_name() {
  14. return d_name;
  15. }
  16. public void setD_name(String d_name) {
  17. this.d_name = d_name;
  18. }
  19. public Set<Project> getProjects() {
  20. return projects;
  21. }
  22. public void setProjects(Set<Project> projects) {
  23. this.projects = projects;
  24. }
  25. }
  26. public class Project {
  27. private Integer prj_id;//项目编号
  28. private String prj_name;//项目名称
  29. //项目下的多个员工
  30. private Set<Developer> developers=new HashSet<Developer>();
  31. public Integer getPrj_id() {
  32. return prj_id;
  33. }
  34. public void setPrj_id(Integer prj_id) {
  35. this.prj_id = prj_id;
  36. }
  37. public String getPrj_name() {
  38. return prj_name;
  39. }
  40. public void setPrj_name(String prj_name) {
  41. this.prj_name = prj_name;
  42. }
  43. public Set<Developer> getDevelopers() {
  44. return developers;
  45. }
  46. public void setDevelopers(Set<Developer> developers) {
  47. this.developers = developers;
  48. }
  49. }
  50. <!-- Developer.hbm.xml -->
  51. <hibernate-mapping package="cn.itcast.c_many2many">
  52. <class name="Developer" table="t_developer">
  53. <id name="d_id">
  54. <generator class="native"></generator>
  55. </id>
  56. <property name="d_name"></property>
  57. <set name="projects" table="t_relation">
  58. <key column="did"></key>
  59. <many-to-many column="prjId" class="Project"></many-to-many>
  60. </set>
  61. </class>
  62. </hibernate-mapping>
  63. <!-- Project.hbm.xml -->
  64. <hibernate-mapping package="cn.itcast.c_many2many">
  65. <class name="Project" table="t_project">
  66. <id name="prj_id">
  67. <generator class="native"></generator>
  68. </id>
  69. <property name="prj_name"></property>
  70. <!-- 多对多映射:
  71. 1.映射的集合属性:developers
  72. 2.集合属性:对应的中间表,t_relation
  73. 3.外键字段:prjid
  74. 4.外键字段:对应的中间表字段,did
  75. 5.集合属性元素的类型 -->
  76. <set name="developers" table="t_relation">
  77. <key column="prjId"></key>
  78. <many-to-many column="did" class="Developer"></many-to-many>
  79. </set>
  80. </class>
  81. </hibernate-mapping>

查询语言

Hibernate 查询语言(HQL)是一种面向对象的查询语言,类似于 SQL,但不是去对表和列进行操作,而是面向对象和它们的属性。 HQL 查询被 Hibernate 翻译为传统的 SQL 查询从而对数据库进行操作。

  1. // FROM 语句
  2. String hql = "FROM Employee";
  3. Query query = session.createQuery(hql);
  4. List results = query.list();
  5. // AS 语句
  6. String hql = "FROM Employee AS E";
  7. // String hql = "FROM Employee E";
  8. Query query = session.createQuery(hql);
  9. List results = query.list();
  10. // SELECT 语句
  11. String hql = "SELECT E.firstName FROM Employee E";
  12. Query query = session.createQuery(hql);
  13. List results = query.list();
  14. // WHERE 语句
  15. String hql = "FROM Employee E WHERE E.id = 10";
  16. Query query = session.createQuery(hql);
  17. List results = query.list();
  18. //ORDER BY 语句
  19. String hql = "FROM Employee E WHERE E.id > 10 ORDER BY E.salary DESC";
  20. //String hql = "FROM Employee E WHERE E.id > 10 " +
  21. "ORDER BY E.firstName DESC, E.salary DESC ";
  22. Query query = session.createQuery(hql);
  23. List results = query.list();
  24. // GROUP BY 语句
  25. String hql = "SELECT SUM(E.salary), E.firtName FROM Employee E " + "GROUP BY E.firstName";
  26. Query query = session.createQuery(hql);
  27. List results = query.list();
  28. // 使用命名参数
  29. String hql = "FROM Employee E WHERE E.id = :employee_id";
  30. Query query = session.createQuery(hql);
  31. query.setParameter("employee_id",10);
  32. List results = query.list();
  33. // UPDATE 语句
  34. String hql = "UPDATE Employee set salary = :salary " +
  35. "WHERE id = :employee_id";
  36. Query query = session.createQuery(hql);
  37. query.setParameter("salary", 1000);
  38. query.setParameter("employee_id", 10);
  39. int result = query.executeUpdate();
  40. System.out.println("Rows affected: " + result);
  41. // DELETE 语句
  42. String hql = "DELETE FROM Employee " +
  43. "WHERE id = :employee_id";
  44. Query query = session.createQuery(hql);
  45. query.setParameter("employee_id", 10);
  46. int result = query.executeUpdate();
  47. System.out.println("Rows affected: " + result);
  48. // INSERT 语句
  49. String hql = "INSERT INTO Employee(firstName, lastName, salary)" +
  50. "SELECT firstName, lastName, salary FROM old_employee";
  51. Query query = session.createQuery(hql);
  52. int result = query.executeUpdate();
  53. System.out.println("Rows affected: " + result);
  54. //聚合方法
  55. 方法 描述
  56. avg(property name) 属性的平均值
  57. count(property name or *) 属性在结果中出现的次数
  58. max(property name) 属性值的最大值
  59. min(property name) 属性值的最小值
  60. sum(property name) 属性值的总和
  61. // distinct 关键字表示只计算行集中的唯一值。下面的查询只计算唯一的值:
  62. String hql = "SELECT count(distinct E.firstName) FROM Employee E";
  63. Query query = session.createQuery(hql);
  64. List results = query.list();
  65. // 使用分页查询
  66. String hql = "FROM Employee";
  67. Query query = session.createQuery(hql);
  68. query.setFirstResult(1);
  69. query.setMaxResults(10);
  70. List results = query.list();

批处理

为了使用批处理这个特性,首先设置 hibernate.jdbc.batch_size 作为批处理的尺寸,取一个依赖于对象尺寸的值 20 或 50。这将告诉 hibernate 容器每 X 行为一批插入。

<property name="hibernate.jdbc.batch_size">50</property>

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注