1.什么是Hibernate?
Hibernate是一个开放源代码的对象关系映射(ORM)框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心
所欲的使用对象编程思维来操纵数据库。
Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。Hibernate是轻量级JavaEE应用的持久层解决方案,是一个关系数据库ORM框架。
注意:Hibernate是一个持久层的ORM框架。
2.什么是ORM?
ORM映射:Object Relational Mapping。
* O:面向对象领域的Object(JavaBean对象)。
* R:关系数据库领域的Relational(表的结构)。
* M:映射Mapping(XML的配置文件)。
简单一句话:Hibernate使程序员通过操作对象的方式来操作数据库表记录。
3.Hibernate优点:
Hibernate对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
Hibernate是一个基于jdbc的主流持久化框架,是一个优秀的orm实现,它很大程度的简化了dao层编码工作。
Hibernate的性能非常好,因为它是一个轻量级框架。映射的灵活性很出色。它支持很多关系型数据库,从一对一到多对多的各种复杂关系。
4.利用Hibernate添加用户操作
(1)建立数据库建表
CREATE DATABASE test;
USE test;
CREATE TABLE t_user(
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
username VARCHAR(20),
PASSWORD VARCHAR(25),
sex VARCHAR(15),
age INT
);
(2)搭建hibernate开发环境
建立web项目,导入jar包
(3)编写实体类:
package hibernate.domain;
public class User {
private int id;
private String username;
private String password;
private String sex;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String pasword) {
this.password = password;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
(4)创建类与表结构的映射
在实体类所在的包下创建映射的配置文件
* 默认的命名规则为:实体类名.hbm.xml。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 配置类和表结构的映射 -->
<class name="hibernate.domain.User" table="t_user"><!-- 包名 数据库表名 -->
<!-- 配置id
见到name属性,JavaBean的属性 (domain的属性)
见到column属性,是表结构的字段
-->
<id name="id" column="id"> <!-- 只有主键是 id 剩下的写property -->
<!-- 主键的生成策略 -->
<generator class="native"/>
</id>
<!-- 配置其他的属性 -->
<property name="username" column="username"/>
<property name="password" column="password"/>
<property name="sex" column="sex"/>
<property name="age" column="age"/>
</class>
</hibernate-mapping>
(5)编写Hibernate核心的配置文件
<?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>
<!-- 记住:先配置SessionFactory标签,一个数据库对应一个SessionFactory标签 -->
<session-factory>
<!-- 必须要配置的参数有5个,4大参数,数据库的方言 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///test</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123</property>
<!-- 数据库的方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 可选配置 -->
<!-- 显示SQL语句,在控制台显示 -->
<property name="hibernate.show_sql">true</property>
<!-- 格式化SQL语句 -->
<property name="hibernate.format_sql">true</property>
<!-- 生成数据库的表结构
update:如果没有表结构,创建表结构。如果存在,不会创建,添加数据
-->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 映射配置文件,需要引入映射的配置文件 -->
<mapping resource="hibernate/domain/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
(6)编写Hibernate入门代码,引用HibernateUtils类
package hibernate.utils;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
* Hibernate框架的工具类
* @author Administrator
*/
public class HibernateUtils {
// ctrl + shift + x
private static final Configuration CONFIG;
private static final SessionFactory FACTORY;
// 编写静态代码块
static{
// 加载XML的配置文件
CONFIG = new Configuration().configure();
// 构造工厂
FACTORY = CONFIG.buildSessionFactory();
}
/**
* 从工厂中获取Session对象
* @return
*/
public static Session getSession(){
return FACTORY.openSession();
}
}
UserDao类
package hibernate.dao;
import org.hibernate.Session;
import org.hibernate.Transaction;
import hibernate.domain.User;
import hibernate.utils.HibernateUtils;
//添加用户
public class UserDao {
public void addUser(User user){
Session session = HibernateUtils.getSession();
Transaction trans = session.beginTransaction();
session.save(user);
System.out.println("添加成功!");
trans.commit();
session.close();
}
}
(7)编写测试类
package hibernate.demo;
import org.junit.Test;
import hibernate.dao.UserDao;
import hibernate.domain.User;
public class TestAdd {
@Test
public void add(){
User user = new User();
user.setUsername("小牧");
user.setAge(12);
user.setPassword("111");
user.setSex("男");
new UserDao().addUser(user);
}
}
(8)数据库运行结果
总结:
在用Junit做单元测试运行的时候,报错,原因是无法连接到数据库,我重新检查了Hibernate核心配置文件里面数据库名是否写错,以及User实体类的映射里表的名字。发现都没有问题,最后,突然发现,我没有导入数据库驱动的jar包。
一定要导对包!!!