配置文件
对Hibernate的全局参数进行配置,主要是配置连接的数据库的相关信息和关系对象映射文件的路径等。
实体
JavaBean对象实体,这里是StudentBean。
映射文件
这个是本次实验的关键点1。
其实简单的理解就是,一个JavaBean对应数据库中的那张表,一个JavaBean中的属性对应数据库中的那个列。都是在这里说明的。然后有一点需要注意的是,这里要说明id的生成策略是什么。参见代码:
<hibernate-mapping>
<class name="cn.example.bean.StudentBean" table="student">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"></property>
<property name="birthday" column="birth"></property>
</class>
</hibernate-mapping>
工具类
编写了一个简单的工具类,在工具类中可以体现各个类之间的生命周期。简要介绍一下生命周期:
读取配置(执行一次)-获取工厂对象(执行一次)-获取会话(重复执行)-执行会话(重复执行)-关闭会话(重复执行)
配置类Configuration
只需要读取一次,使用后即可废弃。所以我们可以卸载静态块中。另外一个重要的类就是SessionFactory
。这个类的作用是获取会话对象,所以他要一直存在,可以作为工具类的属性。然后就是Seesion
,因为每次使用完成后需要关闭,所以也可以写在工具类的属性中。
提供了2个方法
//获取session,同时也开启事务
public static Session getSession(){
session = sessionFactory.openSession();
tansaction = session.beginTransaction();
return session;
}
public static void closeSession(){
tansaction.commit();
session.close();
}
测试
最后是测试,主要是对增删改查的API进行熟悉
增
//增
public static void addStudent(){
StudentBean stu = new StudentBean("张三", new Date(0));
Session session = HibernateUtil.getSession();
session.save(stu);
HibernateUtil.closeSession();
}
删
//删
//虽然是传入的对象,但是是按照id删除
//并且,如果表中没有该id的数据,会抛出错误
//Exception in thread "main" org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
public static void deletStudent(){
Session session = HibernateUtil.getSession();
StudentBean stu = new StudentBean();
stu.setId(3);
session.delete(stu);;
HibernateUtil.closeSession();
}
改
//改
//同样按照id进行修改
//并且,如果表中没有该id的数据,会抛出错误
//Exception in thread "main" org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
public static void updateStudent(){
Session session = HibernateUtil.getSession();
StudentBean stu = new StudentBean();
stu.setId(3);
session.update(stu);
HibernateUtil.closeSession();
}
查
//查
//同样是按照id查找
//如果没有该id返回null值
public static void selectStudent(){
Session session = HibernateUtil.getSession();
StudentBean stu = (StudentBean) session.get(StudentBean.class, 1);
System.out.println(stu);
HibernateUtil.closeSession();
}