今天很困,不说废话了,赶紧开始吧。
运行环境
JDK-1.7.0
Eclipse Java EE IDE for Web Developers,MARS版
目录结构
首先看一下我的目录结构
新建一个java项目,然后建两个包分别为com.shanmu.pojo以及com.shanmu.test,
pojo是用来存储实体类的,而test则是用来存储测试类的(main),为了简单,这里只写了一个实体类,所以不用去考虑各个类的关系问题,这里也没有用到任何的注解。
配置文件
这里导入的jar包有这些,因为是最简单的,所以不需要导入很多包。先新建一个文件夹lib来存放jar包,再通过add加入项目中。
hibernate框架中有两种重要的配置文件(.xml),分别是核心配置文件(hibernate.cfg.xml)以及映射配置文件(xxx.hbm.xml)。
核心配置文件是用来配置访问数据库要用到的驱动,例如数据库地址,用户名,密码这些,而映射配置文件是用于映射实体类中对应数据库中的表,这里的映射配置文件是Student.hbm.xml。
核心配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!-- 配置访问数据库要用到的驱动 -->
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8</property>
<property name="connection.username">数据库用户名</property>
<property name="connection.password">数据库密码</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="current_session_context_class">thread</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<mapping resource="com/shanmu/pojo/Student.hbm.xml" />
</session-factory>
</hibernate-configuration>
Student类
package com.shanmu.pojo;
public class Student {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Student类是最普通的实体类,这个就像是以前学过的bean一样,不同的是bean有一定的规范。
Student类映射文件
<?xml version="1.0" encoding="UTF-8"?>
<!-- 用于映射Student类中对应数据库中的student_表 -->
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.shanmu.pojo">
<class name="Student" table="student_">
<id name="id" column="id"><!-- id的自增长方式采用数据库的本地方式 -->
<generator class="native">
<!-- 一对一关联映射 -->
</generator>
</id>
<property name="name" />
</class>
</hibernate-mapping>
接下来写一个测试类
package com.shanmu.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import com.shanmu.pojo.Student;
public class TestHibernate {
public static void main(String[] args) {
// TODO Auto-generated method stub
//1.获取SessionFactory
SessionFactory sf=new Configuration().configure().buildSessionFactory();
//2.通过SessionFactory获得一个Session
Session s=sf.openSession();
//3.在Session基础上开启一个业务
s.beginTransaction();
//4.通过调用Session的save方法把对象保存到数据库
Student student=new Student();
student.setName("zhangsan");
s.save(student);
//5.提交事务
s.getTransaction().commit();
//6.关闭Session
s.close();
//7.关闭SessionFactory
sf.close();
}
}
结果
首先,在我的数据库中,有一个test数据库,但是里面没有student_表,看一下
运行之后控制台输出
这里输出的是一条SQL语句,表明对数据库执行了一次操作
运行之后会发现数据库中有student_表,表中有一条数据
最后
所以hibernate框架主要是用来处理数据库的,当然除了插入还有查询,删除,修改等操作,这里主要是以最简单的方式写了一个最简单的实现,最简单的能看懂的话,难的才能在这基础上一步步学。之前听很多人说SSH已经过时了,大家都用SSM了,但是我还是想把SSH学了,可能是学数学专业的原因吧,就想循序渐进知道前因后果,这对我对后面其他框架的理解也有很多好处。