1.什么是Hibernate?
Hibernate是一个开放源代码的对象关系映射(ORM)框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心
所欲的使用对象编程思维来操纵数据库。
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包。
一定要导对包!!!