1.简介与原理
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行
2.配置xml
项目目录如下
先导入依赖pom.xml
其中slf4j和hibernate是一定要一起导入的
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<scope>test</scope>
</dependency>
<!-- hibernate依赖开始 -->
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.0.1.Final</version>
</dependency>
<!-- hibernate结束 -->
<!-- jdbc开始 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>jdbc</artifactId>
<version>11.2.0.1.0</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!-- jdbc结束 -->
<!-- slf4j开始 -->
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.26</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.26</version>
<scope>test</scope>
</dependency>
<!-- slf4j结束 -->
hibernate.cfg.xml配置
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
<property name="connection.username">scott</property>
<property name="connection.password">tiger</property>
<!-- JDBC connection pool (use the built-in) -->
<!-- <property name="connection.pool_size">1</property> -->
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.OracleDialect</property>
<!-- Enable Hibernate's automatic session context management -->
<!-- <property name="current_session_context_class">thread</property> -->
<!-- Disable the second-level cache -->
<!-- <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> -->
<property name = "format_sql">true</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">update</property>
<mapping resource="hbm/Teacher.hbm.xml" />
<mapping resource="hbm/Student.hbm.xml" />
</session-factory>
Student.hbm.xml配置
<class name="com.hxzy.hibernate.entity.Student" table="t_student">
<id name="id" type="int" column="ID">
<generator class="sequence">
<param name="sequence">seq_stu</param>
</generator>
</id>
<property name="name" not-null="true" type="java.lang.String" column="name"/>
</class>
Teacher.hbm.xml
<class name="com.hxzy.hibernate.entity.Teacher" table="t_teac">
<id name="id" type="int" column="ID">
<generator class="sequence">
<param name="sequence">seq_teh</param>
</generator>
</id>
<property name="name" not-null="true" type="java.lang.String" column="name"></property>
<many-to-one name="student" cascade="save-update"
class="com.hxzy.hibernate.entity.Student" >
<column name="student_id"></column>
</many-to-one>
</class>
log4j.properties
log4j.rootLogger = info,a
log4j.appender.a = org.apache.log4j.ConsoleAppender
log4j.appender.a.Target = System.err
log4j.appender.a.layout = org.apache.log4j.SimpleLayout
3.下面是具体代码
dao层
public class DaoImpl implements Dao{
Session session = null;
/**
* 获取session
* */
public Session getSession() {
Configuration cfg = new Configuration().configure();//配置cfg
@SuppressWarnings({})
SessionFactory sessionFactory = cfg.buildSessionFactory();
session = sessionFactory.openSession();//打开session
return session;
}
/**
* 添加学生信息
* */
public void addStudent(Student student) {
System.out.println("开始添加");
session = getSession();
Transaction tsa = session.beginTransaction();//开启事务
try {
session.save(student);
tsa.commit();
}catch(Exception e) {
e.printStackTrace();
tsa.rollback();//回滚
}finally {
session.close();
}
}
/**
* 查找学生信息列表
* */
public void findStudent() {
session = getSession();
System.out.println("开始查找表");
try {
List<Student> list = session.createQuery("from Student").list();//查询数据库获得结果集
for(Student student:list) {//遍历列表输出信息
System.out.println(student.getName());
}
}catch(Exception e) {
e.printStackTrace();
session.close();//关闭session
}
}
/**
* 由id查找学生信息
* */
public void findStudentById(int id) {
session = getSession();
System.out.println("开始id查找");
try {
Student student = (Student) session.get(Student.class, id);//查询数据库获得结果
System.out.println(student.getName());//输出信息
}catch(Exception e) {
e.printStackTrace();
}finally {
session.close();//关闭session
}
}
/**
* 有名字查询学生信息
* */
public void findStudentByName(String name) {
session = getSession();
System.out.println("开始name查找");
String hql = "from Student where name = :name";//创建hql
try {
Query query = session.createQuery(hql);
query.setString("name", name);
Student student = (Student) query.uniqueResult();
System.out.println(student.getId());
}catch(Exception e) {
e.printStackTrace();
}finally {
session.close();
}
}
}
测试类
@Test
public void asd() {
System.out.println(1);
Student student = new Student();
Teacher teacher = new Teacher();
// student.setName("gz");
// teacher.setName("zxs");
// teacher.setStudent(student);
DaoImpl daoImpl = new DaoImpl();
// daoImpl.addStudent(student);
// daoImpl.findStudent();
// daoImpl.findStudentById(7);
// daoImpl.findStudentByName("gz");
Session session = daoImpl.getSession();
// session.save(teacher);
// session.beginTransaction().commit();
Teacher t = (Teacher) session.load(Teacher.class, 4);
System.out.println(t.getId()+t.getName()+t.getStudent().getName());
session.close();
}