一、Hibernate简介
1、Hibernate是一款ORM框架,Object Relation Mapping 对象关系映射。
2、可以将DB映射成Object,这样程序只要对Object对象进行操作就能完成对数据库的操作。
3、主流的ORM框架有Hibernate,iBatis,JPA......
![](https://img-blog.csdn.net/20131103134907093?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGF3YW5nYW5iYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
二、Hibernate框架体系结构
1、主配置文件:用于描述数据库连接信息。
hibernate.cfg.xml或者hibernate.properties
2、映射描述文件:用于描述映射类及属性与DB表和字段之间的对应关系。
User.hbm.xml
3、映射类文件:User.java
4、主要API
(1)Cofigration:主要用于加载主配置文件,获取数据库连接。
(2)SessionFactory:用于创建Session对象,封装了映射信息以及预定义的SQL
(3)Session:用于对象操作,完成增删改查,删除,修改,查询操作。
(4)Transaction:用于事务的处理。进行增加、删除、修改时需要注意,因为Hibernate中自动提交功能是关闭的。
(5)Query:用于执行HQL查询语句。HQL属于面向对象的查询语句,语句中没有表名和字段名。
三、案例:
案例一:Hibernate HelloWord(1)
1、项目结构:
![](https://img-blog.csdn.net/20131103144441468?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGF3YW5nYW5iYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
2、新建项目
3、导入jar包
4、新建配置文件hibernate.cfg.xml
放在src目录下,默认为hibernate.cfg.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE hibernate-configuration PUBLIC
- "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
- <hibernate-configuration>
- <session-factory>
-
- <property name="connection.url">
- jdbc:mysql://localhost:3306/test
- </property>
- <property name="connection.username">root</property>
- <property name="connection.password">root</property>
- <property name="connection.driver_class">
- com.mysql.jdbc.Driver
- </property>
-
-
- <property name="dialect">
-
- org.hibernate.dialect.MySQLDialect
- </property>
-
- <property name="hibernate.show_sql">true</property>
- </session-factory>
- </hibernate-configuration>
5、新建映射文件:用于指明POJO类和表之间的映射关系,每个类对应一个映射文件
(1)执行db.sql脚本
- SQL> DROP TABLE IF EXISTS t_user;
- SQL> CREATE TABLE t_user (
- t_id int(11) NOT NULL AUTO_INCREMENT,
- t_login_name varchar(50) DEFAULT NULL,
- t_password varchar(50) DEFAULT NULL,
- t_name varchar(100) DEFAULT NULL,
- PRIMARY KEY (t_id)
(2)新建POJO类User.java
- public class User {
- private Integer id;
- private String loginName;
- private String password;
- private String name;
-
- public Integer getId() {
- return id;
- }
-
- public void setId(Integer id) {
- this.id = id;
- }
-
- public String getLoginName() {
- return loginName;
- }
-
- public void setLoginName(String loginName) {
- this.loginName = loginName;
- }
-
- public String getPassword() {
- return password;
- }
-
- public void setPassword(String password) {
- this.password = password;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
- }
(3)新建映射文件 User.hbm.xml
映射文件默认与POJO类放在一起;命名规则为类名.hbm.xml
- <?xml version="1.0" encoding="utf-8"?>
- <!DOCTYPE hibernate-mapping PUBLIC
- "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping>
- <class name="com.xsyu.tts.po.User" table="t_user">
- <id name="id" type="java.lang.Integer" column="t_id">
-
- <generator class="identity"></generator>
- </id>
- <property name="loginName" type="java.lang.String" column="t_login_name"></property>
- <property name="password" type="string" column="t_password"></property>
- <property name="name" type="java.lang.String" column="t_name"></property>
- </class>
- </hibernate-mapping>
主键一般是自动生成的。我们一般不使用业务数据作为主键,因为业务逻辑的改变有可能会改变主键。
如下图所示,生成主键方式有很多种。
![](https://img-blog.csdn.net/20131103145247093?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGF3YW5nYW5iYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
其中,sequence是使用序列生成主键(Oracle数据库经常使用)Mysql数据库一般使用identity,自动生成主键(注意:需要在建表时指定主键生成为auto_increment)
(4)在配置文件里关联映射文件
-
- <mapping resource="com/xsyu/tts/po/User.hbm.xml" />
6、测试
(1)新建TestHibernate向数据库插入一条数据
- public class TestHibernate {
-
-
-
- @Test
- public void tst1() {
-
- User user = new User();
- user.setLoginName("whatisjava");
- user.setName("goodman");
- user.setPassword("12345");
-
- Configuration conf = new Configuration();
-
-
-
- conf.configure();
-
-
-
- SessionFactory factory = conf.buildSessionFactory();
-
-
- Session session = factory.openSession();
-
- Transaction tx = session.getTransaction();
-
- tx.begin();
-
- session.save(user);
-
- tx.commit();
-
- session.close();
- }
- }
(2)运行JUnit单元测试
![](https://img-blog.csdn.net/20131103150017140?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGF3YW5nYW5iYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)