注:由于以前自己在学校学习的框架的是Mybatis,由于Mybatis有对数据库的限制,所以现在进公司后,需要重新学习Hibernate,记录一下,一起学习。
一:环境搭建
1.所需jar包:
Hibernate-core-5.1.0.Final.jar ,dom4j-1.6.1.jar,log4j-core-2.5.jar,javassist-3.20.0-GA.jar
mysql-connector-java-5.1.34.jar,antlr-2.7.7.jar,commons-logging-1.2.jar,cglib-2.2.2.jar
commons-collections-3.2.1.jar,javax.transaction-1.1.jar
2.如果使用maven管理jar包,下面是使用maven的依赖,不使用maven就手动导入jar包:
3.我使用的是MySQL,创建表Student和Class,下面是创建sql语句:
create table class(
id int primary key auto_increment,
classname varchar(50)
);
create table student(
id int primary key auto_increment,
studentname varchar(50),
classid int
);
alter table student add constraint fk_classid foreign key(classid) references class(id);
insert into student values(1,'完全',1);
insert into student values(2,'玩去',1);
insert into class values(1,'三年二班');
4.创建相对应的实体类Class.java和Student.java:
Class.java如下: 属性和数据库中的列对应,类实现序列化接口,自动生成序列化ID,右键source生成Get/Set方法和toString方法
Student.java如下:这个类中也和数据库中的列对应,这里用对象对应数据库中的classid属性
5.创建实体类的映射文件Class.hbm.xml和Student.hbm.xml和hibernate.cfg.xml,并将三个资源文件放在src/main/resources包下面
,这样不用指定绝对路径,可以自动加载resources下面的配置文件。
hibernate.cfg.xml配置如下:
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
这里是实体的映射文件路径,因为student的映射文件需要使用class对象,所以需要将Class的映射放前面,需要先加载
Class.hbm.xml配置如下:
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
Student.hbm.xml配置如下:
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
这里圈出来的就是配置的对象映射,有多对一,多对多等映射。
6.写一个获取SessionFactory的工具类,代码如下:
package com.yk.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
return new Configuration().configure().buildSessionFactory();
} catch (HibernateException e) {
throw new ExceptionInInitializerError(e);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static void shutdown() {
getSessionFactory().close();
}
}
7.写一个主方法或者使用测试类,测试Hibernate是否成功映射,看控制台输出,测试代码如下:
package com.yk.Hibernate;
import org.hibernate.Session;
import com.yk.model.Student;
import junit.framework.TestCase;
public class HibernateTest extends TestCase {
private static Session session =null;
public static void main(String[] args) {
//从连接工厂获取连接
session = HibernateUtil.getSessionFactory().openSession();
//开启事务
session.beginTransaction();
//这里可以看出Hibernate使用的是jndi机制
Student stu = session.get(Student.class, 1);
System.out.println("学生ID:"+stu.getId()+"\n"+"学生姓名:"+stu.getStudentname()+"\n"+"班级信息:"+stu.getClas());
session.disconnect();
}
}
控制台输出结果:
结果可以看出,将数据库中的多对一关系映查询出来,输出信息正确,班级信息是以对象的形式输出。