hibernate入门案例(一)

来源:互联网 发布:北京网络职业学院图片 编辑:程序博客网 时间:2024/05/22 01:37

hibernate和jdbc两种操作数据库的方式相比,hibernate有两个显著有点:

1.不在需要编写sql语句,而是允许采用OO(面向对象)方式来访问数据库。

2.在jdbc访问过程中大量的checked异常被包装成Hibernate的Runtime异常,从而不再要求程序必须处理所有异常。



一、创建数据库和表

1.1 创建数据库

create database hibernate_first

1.2 创建表

DROP TABLE IF EXISTS `t_user`;CREATE TABLE `t_user` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name` varchar(64) NOT NULL,  `age` int(11) NOT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

二、创建web项目

new->dynamic web project

三、导入jar包

3.1 驱动包

我们操作数据库,首先要导入驱动包。本例用mysql-connector-java-5.1.7-bin.jar

3.2 Hibernate包

hibernate-release-5.0.7.Final\lib\required必须的包
包的简单介绍
hibernate-core-5.0.7.Final.jar核心包
hibernate-commons-annotations-5.0.1.Final.jar注解
javassist-3.18.1-GA.jar底层生成动态代理的代码
dom4j-1.6.1.jar解析xml。Hibernate底层用dom4j写了一些xml文档

2.3 日志包

slf4j-api-1.6.1.jar  日志接口包,没实现。
log4j-1.2.16.jar  具体的日志的实现

slf4j-log4j12-1.7.2.jar  日志接口和日志实现桥梁

导包完成,如下图:


四、创建实体类

package com.hib.domain;public class User {// hibernate的实体类使用包装类,因为,默认值是null。// 如果,使用基本数据类型,前端没传数据,默认值就是0.private Integer id;private String name;private Integer age;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}}

五、创建hibernate映射配置文件(类和表结构的映射)

在JavaBean所在的包下创建映射的配置文件User.hbm.xml
默认的命名规则为:实体类名.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="com.hib.domain.User" table="t_user"><!-- 配置id和property。name属性,JavaBean的属性; column属性,表结构的属性 --><id name="id" column="id"><!-- 主键生成策略 --><generator class="native"></generator></id><property name="name" column="name"></property><property name="age" column="age"></property></class></hibernate-mapping>

这个配置文件里面的约束可以到如下地方导入


六、编写hibernate核心的配置文件

6.1 在src目录下,创建名称为hibernate.cfg.xml的配置文件

6.2 在XML中引入DTD约束

6.3 配置参数

hibernate-release-5.0.7.Final/project/etc/hibernate.properties,可以查看具体的配置信息
* 必须配置的4大参数 #hibernate.connection.driver_class com.mysql.jdbc.Driver#hibernate.connection.url jdbc:mysql:///test#hibernate.connection.username gavin#hibernate.connection.password* 数据库的方言(必须配置的)#hibernate.dialect org.hibernate.dialect.MySQLDialect* 可选的配置#hibernate.show_sql true#hibernate.format_sql true#hibernate.hbm2ddl.auto update* 引入映射配置文件(一定要注意,要引入映射文件,框架需要加载映射文件)
<mapping resource="com/hib/domain/User.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标签,一个数据库对应一个SessionFactory --><session-factory><!-- 必须配置的4大参数 --><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><property name="hibernate.connection.url">jdbc:mysql:///hibernate_first</property><property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">123456</property><!-- 数据库的方言(必须配置的) --><!-- 方言的作用:底层用了什么数据库,告诉hibernate,hibernate会生成对应的sql语句 --><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><!-- 生成数据库的表结构。hbm2ddl-hbm to ddl,意思是把映射文件去生成数据库定义的语言 --><!-- 1.create,每次都创建一张新的表。开发中不会用的。 --><!-- 2.create-drop,先创建,再删除。根本没什么用嘛! --><!-- 3.create-drop,先创建,再删除。根本没什么用嘛! --><!-- 4.update,如果没有表就创建。有新的字段,会添加到表中。但是javabean中少了属性,不会去删除表中的字段。对于字段,只能加,不能删 --><!-- 5.validate,校验javabean属性和数据库表的字段是不是一致的。 --><!-- 开发一般用update --><property name="hibernate.hbm2ddl.auto">update</property><!-- 引入映射配置文件(一定要注意,要引入映射文件,框架需要加载映射文件) --><mapping resource="com/hib/domain/User.hbm.xml" /></session-factory></hibernate-configuration>

七、编写Hibernate入门代码

package com.hib.test;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.junit.Test;import com.hib.domain.User;public class Demo {@Testpublic void testSave() {/** * 1.先加载配置文件  * 2.创建SessionFactory对象,生成Session对象。session会话去连接数据库。 * 3.创建Session对象  * 4.开启事务  * 5.编写保存的代码  * 6.提交事务  * 7.释放资源 */// 1.先加载配置文件Configuration config = new Configuration();// 默认加载src目录下hibernate.cfg.xml的配置文件config.configure();// 2.创建SessionFactory对象SessionFactory factory = config.buildSessionFactory();// 3.创建Session对象Session session = factory.openSession();// 4.开启事务Transaction tx = session.beginTransaction();// 5.编写保存的代码User user = new User();user.setName("tom");user.setAge(23);session.save(user);// 6.提交事务tx.commit();// 7.释放资源session.close();factory.close();}}

执行单元测试,ok

效果如下



源码下载

原创粉丝点击