同表
组件配置
不同表
一对一关联映射
多对一
一对多
多对多
OID
get:
load:
HQL(面向对象的查询语句)
条件查询
投影查询(只查询结果中的部分内容)
不封装对象
封装对象
分页查询
setFirstReult:查询的起始位置
setMaxResult:查询的内容数量
连接查询
迫切
因为结果数量对标了普通查询结果,所以需要去重复
非迫切
内联、左外连接、右外连接、全连接、交叉链接
报表查询(GROUP BY HAVING ,SUM,AVG,MAX,MIN,COUNT)
动态SQL
QBC
标准化查询
本地SQL
执行批量操作
使用HQL的步骤
1、创建Query对象
2、调用Query的方法
Session缓存
SessionFactory缓存
两块
内置缓存
不是我们要操作的内容,里面存放了大量Hibernate的配置信息
外置缓存
默认处于关闭状态
适合存放的内容
频繁的被读取的内容,少有被修改的
允许并发的数据
Hibernate提供并发访问策略
Nonstrict-read-write:非严格的读写,对应READ UNCOMMITTED
Read-write:读写,对应READ COMMITTED
Transaction:事务,对应REPEATABLE READ
Read-only:只读,对应SERIALIZABLE
可配置的缓存插件
EHCache:
OpenSymphony OSCache,SwarmCache,JBossCache
配置二级缓存
加入jar包:hibernate-release-5.4.22.Final\lib\optional\ehcache
加入EHCache配置文件:hibernate-release-5.4.22.Final\project\etc
开启Hibernate外置二级缓存的支持:
org.hibernate.cache.ehcache.internal.EhcacheRegionFactoryproperty>
设置哪些内容加入二级缓存:<class-cache usage="缓存策略" class="被缓存的类"/>
创建一个班级类ClassInfo.java
package com.zb.entity;
import java.util.HashSet;
import java.util.Set;
public class ClassInfo {
private Integer class_id;
private String class_name;
private String class_address;
private String class_manager;
// 关联关系配置在一段(一对多,数据库中怎么记录跟我们没有关系)
private Set<StuInfo> stuInfos = new HashSet<StuInfo>();//初始化集合
public Integer getClass_id() {
return class_id;
}
public void setClass_id(Integer class_id) {
this.class_id = class_id;
}
public String getClass_name() {
return class_name;
}
public void setClass_name(String class_name) {
this.class_name = class_name;
}
public String getClass_address() {
return class_address;
}
public void setClass_address(String class_address) {
this.class_address = class_address;
}
public String getClass_manager() {
return class_manager;
}
public void setClass_manager(String class_manager) {
this.class_manager = class_manager;
}
public Set<StuInfo> getStuInfos() {
return stuInfos;
}
public void setStuInfos(Set<StuInfo> stuInfos) {
this.stuInfos = stuInfos;
}
public ClassInfo() {
super();
}
@Override
public String toString() {
return "ClassInfo [class_id=" + class_id + ", class_name=" + class_name + ", class_address=" + class_address
+ ", class_manager=" + class_manager + ", classId=" + stuInfos + "]";
}
}
创建一个学生类StuInfo.java
package com.zb.entity;
public class StuInfo {
private Integer stu_id;
private String stu_name;
private String stu_sex;
private Integer stu_age;
private Integer class_id;
// 关联关系保存在多的一端(多对一)
//private ClassInfo classInfo;
public Integer getStu_id() {
return stu_id;
}
public void setStu_id(Integer stu_id) {
this.stu_id = stu_id;
}
public String getStu_name() {
return stu_name;
}
public void setStu_name(String stu_name) {
this.stu_name = stu_name;
}
public String getStu_sex() {
return stu_sex;
}
public void setStu_sex(String stu_sex) {
this.stu_sex = stu_sex;
}
public Integer getStu_age() {
return stu_age;
}
public void setStu_age(Integer stu_age) {
this.stu_age = stu_age;
}
/*
public ClassInfo getClassInfo() {
return classInfo;
}
public void setClassInfo(ClassInfo classInfo) {
this.classInfo = classInfo;
}
public StuInfo(String stu_name, String stu_sex, Integer stu_age, ClassInfo classInfo) {
super();
this.stu_name = stu_name;
this.stu_sex = stu_sex;
this.stu_age = stu_age;
this.classInfo = classInfo;
}
*/
public Integer getClass_id() {
return class_id;
}
public StuInfo(String stu_name, String stu_sex) {
super();
this.stu_name = stu_name;
this.stu_sex = stu_sex;
}
public void setClass_id(Integer class_id) {
this.class_id = class_id;
}
public StuInfo() {
super();
}
/*
@Override
public String toString() {
return "StuInfo [stu_id=" + stu_id + ", stu_name=" + stu_name + ", stu_sex=" + stu_sex + ", stu_age=" + stu_age
+ ", classInfo=" + classInfo + "]";
}
*/
}
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driverproperty>
<property name="hibernate.connection.username">rootproperty>
<property name="hibernate.connection.password">123456property>
<property name="hibernate.connection.url">jdbc:mysql:///user_db?characterEncoding=UTF-8property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL55Dialectproperty>
<property name="hibernate.show_sql">trueproperty>
<property name="hibernate.format_sql">trueproperty>
<property name="hibernate.hbm2ddl.auto">updateproperty>
<mapping resource="class-mapping.hbm.xml"/>
<mapping resource="stu-mapping.hbm.xml"/>
session-factory>
hibernate-configuration>
stu-mapping.hbm.xml
<hibernate-mapping>
<class name="com.zb.entity.StuInfo" table="stu_info">
<id name="stu_id" column="stu_id">
<generator class="native">generator>
id>
<property name="stu_name" column="stu_name">property>
<property name="stu_sex" column="stu_sex">property>
<property name="stu_age" column="stu_age">property>
<property name="class_id" column="class_id">property>
class>
hibernate-mapping>
class-mapping.hbm.xml
<hibernate-mapping>
<class name="com.zb.entity.ClassInfo" table="class_info">
<id name="class_id" column="class_id">
<generator class="native">generator>
id>
<property name="class_name" column="class_name">property>
<property name="class_address" column="class_address">property>
<property name="class_manager" column="class_manager">property>
<set name="stuInfos" table="stu_info">
<key column="class_id"/>
<one-to-many class="com.zb.entity.StuInfo"/>
set>
class>
hibernate-mapping>
public class TestClass {
SessionFactory sessionFactory = null;
Session session = null;
Transaction t = null;
@Before
public void qianZhi() {
sessionFactory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
session = sessionFactory.openSession();
t = session.beginTransaction();
System.out.println("----------程序开始----------");
}
@After
public void houZhi() {
t.commit();
session.close();
System.out.println("----------程序结束----------");
}
//多对一
@Test
public void testMethod01() {
List<StuInfo> listStuInfos = new ArrayList<StuInfo>();
listStuInfos.add(session.get(StuInfo.class, 1));
listStuInfos.add(session.get(StuInfo.class, 2));
listStuInfos.add(session.get(StuInfo.class, 3));
listStuInfos.add(session.get(StuInfo.class, 4));
listStuInfos.add(session.get(StuInfo.class, 5));
listStuInfos.add(session.get(StuInfo.class, 6));
System.out.println(listStuInfos);
}
//一对多
@Test
public void testMethod02() {
ClassInfo ci1 = session.get(ClassInfo.class, 1);
ClassInfo ci2 = session.get(ClassInfo.class, 2);
System.out.println(ci1);
System.out.println(ci2);
}
}
创建学生类StuInfo2.java
package com.zb.entity;
import java.util.HashSet;
import java.util.Set;
public class StuInfo2 {
private Integer stu_id;
private String stu_name;
private String stu_sex;
private Integer stu_age;
private Set<CourseInfo> courseInfos = new HashSet<CourseInfo>();
public Integer getStu_id() {
return stu_id;
}
public void setStu_id(Integer stu_id) {
this.stu_id = stu_id;
}
public String getStu_name() {
return stu_name;
}
public void setStu_name(String stu_name) {
this.stu_name = stu_name;
}
public String getStu_sex() {
return stu_sex;
}
public void setStu_sex(String stu_sex) {
this.stu_sex = stu_sex;
}
public Integer getStu_age() {
return stu_age;
}
public void setStu_age(Integer stu_age) {
this.stu_age = stu_age;
}
public Set<CourseInfo> getCourseInfos() {
return courseInfos;
}
public void setCourseInfos(Set<CourseInfo> courseInfos) {
this.courseInfos = courseInfos;
}
public StuInfo2(String stu_name, String stu_sex) {
super();
this.stu_name = stu_name;
this.stu_sex = stu_sex;
}
public StuInfo2() {
super();
}
@Override
public String toString() {
return "StuInfo2 [stu_id=" + stu_id + ", stu_name=" + stu_name + ", stu_sex=" + stu_sex + ", stu_age=" + stu_age
+ ", courseInfos=" + courseInfos + "]";
}
}
创建课程实体类CourseInfo.java
package com.zb.entity;
import java.util.HashSet;
import java.util.Set;
public class CourseInfo {
private Integer course_id;
private String course_name;
private String course_tname;
private Set<StuInfo2> stuInfos = new HashSet<StuInfo2>();
public Integer getCourse_id() {
return course_id;
}
public void setCourse_id(Integer course_id) {
this.course_id = course_id;
}
public String getCourse_name() {
return course_name;
}
public void setCourse_name(String course_name) {
this.course_name = course_name;
}
public String getCourse_tname() {
return course_tname;
}
public void setCourse_tname(String course_tname) {
this.course_tname = course_tname;
}
public Set<StuInfo2> getStuInfos() {
return stuInfos;
}
public void setStuInfos(Set<StuInfo2> stuInfos) {
this.stuInfos = stuInfos;
}
/*
@Override
public String toString() {
return "CourseInfo [course_id=" + course_id + ", course_name=" + course_name + ", course_tname=" + course_tname
+ ", stuInfos=" + stuInfos + "]";
}
*/
}
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driverproperty>
<property name="hibernate.connection.username">rootproperty>
<property name="hibernate.connection.password">123456property>
<property name="hibernate.connection.url">jdbc:mysql:///user_db?characterEncoding=UTF-8property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL55Dialectproperty>
<property name="hibernate.show_sql">trueproperty>
<property name="hibernate.format_sql">trueproperty>
<property name="hibernate.hbm2ddl.auto">updateproperty>
<mapping resource="stu2-mapping.hbm.xml"/>
<mapping resource="course-mapping.hbm.xml"/>
session-factory>
hibernate-configuration>
stu2-mapping.hbm.xml
<hibernate-mapping>
<class name="com.zb.entity.StuInfo2" table="stu_info2">
<id name="stu_id" column="stu_id">
<generator class="native">generator>
id>
<property name="stu_name" column="stu_name">property>
<property name="stu_sex" column="stu_sex">property>
<property name="stu_age" column="stu_age">property>
<set name="courseInfos" table="stu_course_info">
<key column="stu_id"/>
<many-to-many class="com.zb.entity.CourseInfo" column="course_id"/>
set>
class>
hibernate-mapping>
course-mapping.hbm.xml
<hibernate-mapping>
<class name="com.zb.entity.CourseInfo" table="course_info">
<id name="course_id" column="course_id">
<generator class="native">generator>
id>
<property name="course_name" column="course_name">property>
<property name="course_tname" column="course_tname">property>
<set name="stuInfos" table="stu_course_info">
<key column="course_id"/>
<many-to-many class="com.zb.entity.StuInfo2" column="stu_id"/>
set>
class>
hibernate-mapping>
public class TestClass {
SessionFactory sessionFactory = null;
Session session = null;
Transaction t = null;
@Before
public void qianZhi() {
sessionFactory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
session = sessionFactory.openSession();
t = session.beginTransaction();
System.out.println("----------程序开始----------");
}
@After
public void houZhi() {
t.commit();
session.close();
System.out.println("----------程序结束----------");
}
@Test
public void testMethod03() {
StuInfo2 si1 = session.get(StuInfo2.class, 2);
for(CourseInfo ci : si1.getCourseInfos()) {
System.out.println(ci.getCourse_name());
}
System.out.println(si1);
}
}
package com.zb.entity;
import java.util.HashSet;
import java.util.Set;
public class StuInfo2 {
private Integer stu_id;
private String stu_name;
private String stu_sex;
private Integer stu_age;
private Set<CourseInfo> courseInfos = new HashSet<CourseInfo>();
public Integer getStu_id() {
return stu_id;
}
public void setStu_id(Integer stu_id) {
this.stu_id = stu_id;
}
public String getStu_name() {
return stu_name;
}
public void setStu_name(String stu_name) {
this.stu_name = stu_name;
}
public String getStu_sex() {
return stu_sex;
}
public void setStu_sex(String stu_sex) {
this.stu_sex = stu_sex;
}
public Integer getStu_age() {
return stu_age;
}
public void setStu_age(Integer stu_age) {
this.stu_age = stu_age;
}
public Set<CourseInfo> getCourseInfos() {
return courseInfos;
}
public void setCourseInfos(Set<CourseInfo> courseInfos) {
this.courseInfos = courseInfos;
}
public StuInfo2(String stu_name, String stu_sex) {
super();
this.stu_name = stu_name;
this.stu_sex = stu_sex;
}
public StuInfo2() {
super();
}
@Override
public String toString() {
return "StuInfo2 [stu_id=" + stu_id + ", stu_name=" + stu_name + ", stu_sex=" + stu_sex + ", stu_age=" + stu_age
+ ", courseInfos=" + courseInfos + "]";
}
}
package com.zb.entity;
public class NameAndSex {
private String stu_name;
private String stu_sex;
public String getStu_name() {
return stu_name;
}
public void setStu_name(String stu_name) {
this.stu_name = stu_name;
}
public String getStu_sex() {
return stu_sex;
}
public void setStu_sex(String stu_sex) {
this.stu_sex = stu_sex;
}
public NameAndSex() {
super();
}
public NameAndSex(String stu_name, String stu_sex) {
super();
this.stu_name = stu_name;
this.stu_sex = stu_sex;
}
@Override
public String toString() {
return "NameAndSex [name=" + stu_name + ", sex=" + stu_sex + "]";
}
}
public class TestClass {
SessionFactory sessionFactory = null;
Session session = null;
Transaction t = null;
@Before
public void qianZhi() {
sessionFactory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
session = sessionFactory.openSession();
t = session.beginTransaction();
System.out.println("----------程序开始----------");
}
@After
public void houZhi() {
t.commit();
session.close();
System.out.println("----------程序结束----------");
}
@Test
public void testMethod04() {
//创建HQL语句,它与SQL语句几乎相同,将其中的表名替换成对应的类名,列名替换为字段名
String hql = " FROM StuInfo2 ";
//创建Query对象
Query query = session.createQuery(hql);
//执行查询方法getResultList/list:查询一个list类型的结果
List<StuInfo2> sis = query.getResultList();
System.out.println(sis);
}
@Test
public void testMethod05() {
//创建HQL语句,它与SQL语句几乎相同,将其中的表名替换成对应的类名,列名替换为字段名
String hql = " FROM StuInfo2 WHERE stu_age IN (15,18) ";
//创建Query对象
Query query = session.createQuery(hql);
//执行查询方法getResultList/list:查询一个list类型的结果
List<StuInfo2> sis = query.getResultList();
for(StuInfo2 si : sis) {
System.out.println(si.getStu_name());
}
}
@Test
public void testMethod06() {
//创建HQL语句,它与SQL语句几乎相同,将其中的表名替换成对应的类名,列名替换为字段名
String hql = " FROM StuInfo2 WHERE stu_age IN (?0,?1) ";
//创建Query对象
Query query = session.createQuery(hql);
//如果有参数
query.setParameter(0, 16);
query.setParameter(1, 18);
//执行查询方法getResultList/list:查询一个list类型的结果
List<StuInfo2> sis = query.getResultList();
for(StuInfo2 si : sis) {
System.out.println(si.getStu_name());
}
}
@Test
public void testMethod07() {
//创建HQL语句,它与SQL语句几乎相同,将其中的表名替换成对应的类名,列名替换为字段名
String hql = " FROM StuInfo2 WHERE stu_sex = :sex ";
//创建Query对象
Query query = session.createQuery(hql);
//如果有参数
//query.setParameter(0, 16);
//query.setParameter(1, 18);
query.setParameter("sex", "女");
//执行查询方法getResultList/list:查询一个list类型的结果
List<StuInfo2> sis = query.getResultList();
for(StuInfo2 si : sis) {
System.out.println(si.getStu_name());
}
}
//条件查询
@Test
public void testMethod08() {
//创建HQL语句,它与SQL语句几乎相同,将其中的表名替换成对应的类名,列名替换为字段名
String hql = " FROM StuInfo2 WHERE stu_sex = :sex AND stu_age = :age ";
//创建Query对象
Query query = session.createQuery(hql);
//如果有参数
query.setParameter("sex", "女");
query.setParameter("age", 18);
//执行查询方法getResultList/list:查询一个list类型的结果
List<StuInfo2> sis = query.getResultList();
for(StuInfo2 si : sis) {
System.out.println(si.getStu_name());
}
}
//条件查询
@Test
public void testMethod09() {
List<StuInfo2> sis = session.createQuery(" FROM StuInfo2 WHERE stu_sex = :sex AND stu_age = :age ").
setParameter("sex", "女").
setParameter("age", 18).
getResultList();
for(StuInfo2 si : sis) {
System.out.println(si.getStu_name());
}
}
//投影查询(只查询结果中的部分内容)
@Test
public void testMethod10() {
List<Object[]> sis = session.createQuery(" SELECT stu_name,stu_sex FROM StuInfo2 ").
getResultList();
for(Object[] os : sis) {
System.out.println(Arrays.asList(os));
}
}
//投影查询(只查询结果中的部分内容)
@Test
public void testMethod11() {
List<StuInfo2> sis = session.createQuery(" SELECT new StuInfo2(stu_name,stu_sex) FROM StuInfo2 ").
getResultList();
for(StuInfo2 os : sis) {
System.out.println(os);
}
}
//投影查询(只查询结果中的部分内容)
@Test
public void testMethod12() {
List<NameAndSex> sis = session.createQuery(" SELECT new NameAndSex(stu_name,stu_sex) FROM StuInfo2 ").
getResultList();
for(NameAndSex os : sis) {
System.out.println(os);
}
}
}
package com.zb.entity;
import java.util.HashSet;
import java.util.Set;
public class StuInfo2 {
private Integer stu_id;
private String stu_name;
private String stu_sex;
private Integer stu_age;
private Set<CourseInfo> courseInfos = new HashSet<CourseInfo>();
public Integer getStu_id() {
return stu_id;
}
public void setStu_id(Integer stu_id) {
this.stu_id = stu_id;
}
public String getStu_name() {
return stu_name;
}
public void setStu_name(String stu_name) {
this.stu_name = stu_name;
}
public String getStu_sex() {
return stu_sex;
}
public void setStu_sex(String stu_sex) {
this.stu_sex = stu_sex;
}
public Integer getStu_age() {
return stu_age;
}
public void setStu_age(Integer stu_age) {
this.stu_age = stu_age;
}
public Set<CourseInfo> getCourseInfos() {
return courseInfos;
}
public void setCourseInfos(Set<CourseInfo> courseInfos) {
this.courseInfos = courseInfos;
}
public StuInfo2(String stu_name, String stu_sex) {
super();
this.stu_name = stu_name;
this.stu_sex = stu_sex;
}
public StuInfo2() {
super();
}
@Override
public String toString() {
return "StuInfo2 [stu_id=" + stu_id + ", stu_name=" + stu_name + ", stu_sex=" + stu_sex + ", stu_age=" + stu_age
+ ", courseInfos=" + courseInfos + "]";
}
}
public class TestClass {
SessionFactory sessionFactory = null;
Session session = null;
Transaction t = null;
@Before
public void qianZhi() {
sessionFactory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
session = sessionFactory.openSession();
t = session.beginTransaction();
System.out.println("----------程序开始----------");
}
@After
public void houZhi() {
t.commit();
session.close();
System.out.println("----------程序结束----------");
}
@Test
public void testMethod13() {
List<StuInfo> sis = session.createQuery(" FROM StuInfo ").
setFirstResult(4).
setMaxResults(2).
getResultList();
for(StuInfo os : sis) {
System.out.println(os.getStu_name());
}
}
}
package com.zb.entity;
public class StuInfo {
private Integer stu_id;
private String stu_name;
private String stu_sex;
private Integer stu_age;
private Integer class_id;
// 关联关系保存在多的一端(多对一)
//private ClassInfo classInfo;
public Integer getStu_id() {
return stu_id;
}
public void setStu_id(Integer stu_id) {
this.stu_id = stu_id;
}
public String getStu_name() {
return stu_name;
}
public void setStu_name(String stu_name) {
this.stu_name = stu_name;
}
public String getStu_sex() {
return stu_sex;
}
public void setStu_sex(String stu_sex) {
this.stu_sex = stu_sex;
}
public Integer getStu_age() {
return stu_age;
}
public void setStu_age(Integer stu_age) {
this.stu_age = stu_age;
}
/*
public ClassInfo getClassInfo() {
return classInfo;
}
public void setClassInfo(ClassInfo classInfo) {
this.classInfo = classInfo;
}
public StuInfo(String stu_name, String stu_sex, Integer stu_age, ClassInfo classInfo) {
super();
this.stu_name = stu_name;
this.stu_sex = stu_sex;
this.stu_age = stu_age;
this.classInfo = classInfo;
}
*/
public Integer getClass_id() {
return class_id;
}
public StuInfo(String stu_name, String stu_sex) {
super();
this.stu_name = stu_name;
this.stu_sex = stu_sex;
}
public void setClass_id(Integer class_id) {
this.class_id = class_id;
}
public StuInfo() {
super();
}
/*
@Override
public String toString() {
return "StuInfo [stu_id=" + stu_id + ", stu_name=" + stu_name + ", stu_sex=" + stu_sex + ", stu_age=" + stu_age
+ ", classInfo=" + classInfo + "]";
}
*/
}
package com.zb.entity;
import java.util.HashSet;
import java.util.Set;
public class ClassInfo {
private Integer class_id;
private String class_name;
private String class_address;
private String class_manager;
// 关联关系配置在一段(一对多,数据库中怎么记录跟我们没有关系)
private Set<StuInfo> stuInfos = new HashSet<StuInfo>();//初始化集合
public Integer getClass_id() {
return class_id;
}
public void setClass_id(Integer class_id) {
this.class_id = class_id;
}
public String getClass_name() {
return class_name;
}
public void setClass_name(String class_name) {
this.class_name = class_name;
}
public String getClass_address() {
return class_address;
}
public void setClass_address(String class_address) {
this.class_address = class_address;
}
public String getClass_manager() {
return class_manager;
}
public void setClass_manager(String class_manager) {
this.class_manager = class_manager;
}
public Set<StuInfo> getStuInfos() {
return stuInfos;
}
public void setStuInfos(Set<StuInfo> stuInfos) {
this.stuInfos = stuInfos;
}
public ClassInfo() {
super();
}
@Override
public String toString() {
return "ClassInfo [class_id=" + class_id + ", class_name=" + class_name + ", class_address=" + class_address
+ ", class_manager=" + class_manager + ", classId=" + stuInfos + "]";
}
}
public class TestClass {
SessionFactory sessionFactory = null;
Session session = null;
Transaction t = null;
@Before
public void qianZhi() {
sessionFactory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
session = sessionFactory.openSession();
t = session.beginTransaction();
System.out.println("----------程序开始----------");
}
@After
public void houZhi() {
t.commit();
session.close();
System.out.println("----------程序结束----------");
}
//迫切查询
@Test
public void testMethod14() {
//XXXX JOIN FETCH
List<Object[]> sis = session.createQuery(" SELECT SI.stu_name,SI.stu_sex,CI.class_name FROM StuInfo AS SI INNER JOIN ClassInfo AS CI ON SI.class_id = CI.class_id").
getResultList();
for(Object[] os : sis) {
System.out.println(Arrays.toString(os));
}
}
//报表查询(GROUP BY HAVING ,SUM,AVG,MAX,MIN,COUNT)
@Test
public void testMethod15() {
Object[] sis = (Object[]) session.createQuery(" SELECT SUM(stu_age),AVG(stu_age) FROM StuInfo ").
getSingleResult();
for(Object os : sis) {
System.out.println(os);
}
}
//报表查询
@Test
public void testMethod16() {
Object sis = session.createQuery(" SELECT SUM(stu_age) FROM StuInfo ").
getSingleResult();
System.out.println(sis);
}
//动态SQL
@Test
public void testMethod17() {
NativeQuery nq = session.createSQLQuery(" INSERT INTO stu_info VALUES (DEFAULT,'老李','女',15,1) ");
nq.executeUpdate();
}
}
配置二级缓存 加入jar包:hibernate-release-5.4.22.Final\lib\optional\ehcache 加入EHCache配置文件:hibernate-release-5.4.22.Final\project\etc 开启Hibernate外置二级缓存的支持:<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.internal.EhcacheRegionFactoryproperty> 设置哪些内容加入二级缓存:<class-cache usage="缓存策略" class="被缓存的类"/>
package com.zb.entity;
public class StuInfo {
private Integer stu_id;
private String stu_name;
private String stu_sex;
private Integer stu_age;
private Integer class_id;
public Integer getStu_id() {
return stu_id;
}
public void setStu_id(Integer stu_id) {
this.stu_id = stu_id;
}
public String getStu_name() {
return stu_name;
}
public void setStu_name(String stu_name) {
this.stu_name = stu_name;
}
public String getStu_sex() {
return stu_sex;
}
public void setStu_sex(String stu_sex) {
this.stu_sex = stu_sex;
}
public Integer getStu_age() {
return stu_age;
}
public void setStu_age(Integer stu_age) {
this.stu_age = stu_age;
}
public Integer getClass_id() {
return class_id;
}
public StuInfo(String stu_name, String stu_sex) {
super();
this.stu_name = stu_name;
this.stu_sex = stu_sex;
}
public void setClass_id(Integer class_id) {
this.class_id = class_id;
}
public StuInfo() {
super();
}
}
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driverproperty>
<property name="hibernate.connection.username">rootproperty>
<property name="hibernate.connection.password">123456property>
<property name="hibernate.connection.url">jdbc:mysql:///user_db?characterEncoding=UTF-8property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL55Dialectproperty>
<property name="hibernate.show_sql">trueproperty>
<property name="hibernate.format_sql">trueproperty>
<property name="hibernate.hbm2ddl.auto">updateproperty>
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.internal.EhcacheRegionFactoryproperty>
<mapping resource="stu-mapping.hbm.xml"/>
<class-cache usage="read-only" class="com.zb.entity.StuInfo"/>
session-factory>
hibernate-configuration>
<hibernate-mapping>
<class name="com.zb.entity.StuInfo" table="stu_info">
<id name="stu_id" column="stu_id">
<generator class="native">generator>
id>
<property name="stu_name" column="stu_name">property>
<property name="stu_sex" column="stu_sex">property>
<property name="stu_age" column="stu_age">property>
<property name="class_id" column="class_id">property>
class>
hibernate-mapping>
<ehcache>
<diskStore path="D://cache"/>
<defaultCache
maxElementsInMemory="2"
eternal="false"
timeToIdleSeconds="20"
timeToLiveSeconds="120"
overflowToDisk="true"
/>
ehcache>
public class TestClass {
SessionFactory sessionFactory = null;
Session session = null;
Transaction t = null;
@Before
public void qianZhi() {
sessionFactory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
session = sessionFactory.openSession();
t = session.beginTransaction();
System.out.println("----------程序开始----------");
}
@After
public void houZhi() {
t.commit();
session.close();
System.out.println("----------程序结束----------");
}
//测试二级缓存
@Test
public void testMethod18() {
StuInfo si1 = session.get(StuInfo.class, 1);
StuInfo si2 = session.get(StuInfo.class, 2);
StuInfo si3 = session.get(StuInfo.class, 3);
StuInfo si4 = session.get(StuInfo.class, 4);
StuInfo si5 = session.get(StuInfo.class, 5);
StuInfo si6 = session.get(StuInfo.class, 6);
StuInfo si7 = session.get(StuInfo.class, 7);
}
}
CREATE TABLE class_info
(
class_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
class_name VARCHAR(32) NOT NULL,
class_address VARCHAR(32) NOT NULL,
class_manager VARCHAR(32) NOT NULL
)
INSERT INTO class_info
VALUES
(DEFAULT,"Java53班","401","刘艳"),
(DEFAULT,"挖掘机1班","山东蓝翔","挖掘机")
CREATE TABLE stu_info
(
stu_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
stu_name VARCHAR(32) NOT NULL,
stu_sex VARCHAR(32) NOT NULL,
stu_age INT NOT NULL,
class_id INT NOT NULL,
FOREIGN KEY (class_id) REFERENCES class_info(class_id)
)
INSERT INTO stu_info
VALUES
(DEFAULT,"小明","女",15,1),
(DEFAULT,"小黑","男",16,1),
(DEFAULT,"小白","女",18,1),
(DEFAULT,"老张","男",55,2),
(DEFAULT,"老王","女",66,2),
(DEFAULT,"老刘","男",88,2)
SELECT * FROM stu_info INNER JOIN class_info ON stu_info.class_id = class_info.class_id
CREATE TABLE course_info
(
course_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
course_name VARCHAR(32) NOT NULL,
course_tname VARCHAR(32) NOT NULL
)
INSERT INTO course_info
VALUES
(DEFAULT,"语文","语文老师"),
(DEFAULT,"数学","体育老师"),
(DEFAULT,"英语","美术老师")
CREATE TABLE stu_info2
(
stu_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
stu_name VARCHAR(32) NOT NULL,
stu_sex VARCHAR(32) NOT NULL,
stu_age INT NOT NULL
)
INSERT INTO stu_info2
VALUES
(DEFAULT,"小明","女",15),
(DEFAULT,"小黑","男",16),
(DEFAULT,"小白","女",18)
CREATE TABLE stu_course_info
(
stu_id INT NOT NULL,
course_id INT NOT NULL,
FOREIGN KEY (stu_id) REFERENCES stu_info2(stu_id),
FOREIGN KEY (course_id) REFERENCES course_info(course_id)
)
INSERT INTO stu_course_info
VALUES
(1,1),
(1,2),
(1,3),
(2,2),
(2,3),
(3,1),
(3,3)