【SSH进阶之路】Hibernate搭建开发环境+简单实例(二)
Hibernate是很典型的持久层框架,持久化的思想是很值得我们学习和研究的。这篇博文,我们主要以实例的形式学习Hibernate,不深究Hibernate的思想和原理,否则,一味追求,苦学思想和原理。到最后可能什么也学不会。从实践入手,熟能生巧,思想和原理自然而然领悟。
上篇博文:【SSH进阶之路】Hibernate基本原理,我们介绍了Hibernate的基本概念、Hibernate的核心以及Hibernate的运行原理。能够非常好帮助我们认识Hibernate。再看这篇博客之前。请先回想上篇博文内容。
这篇博文,我们从实践角度。动手搭建一个简单的Hibernate实例。
一、开发环境
Win8 + jdk1.7 + MyEclipse + Tomcat5.0 + MySQL
说明:事实上Hibernate是很独立的框架,根本不须要MyEclipse,Eclipse。Tomcat。Log4J等。他们仅仅只是是能满足我们其它的需求,才把他们引进来的。
二、下载文件
你须要Java SDK、 Hibernate包、和JDBC Driver。 sort_by=date&sort=desc" target="_blank" style="font-size:18px">http://prdownloads.sourceforge.net/hibernate/? sort_by=date&sort=desc
1、Hibernate包下载地址:
2、JDBC Driver依据你的数据库来定,一般database官网都有。Hibernate支持经常使用的数据库,比方 MySQL, Oracle等等。这两个数据库是如今比較经常使用的,都有JDBC Driver:
Oracle JDBC Driver下载地址(下载前必须允许Oracle协议书)
http://otn.oracle.com/software/htdocs/distlic.html?
/software/tech/java/sqlj_jdbc/htdocs/jdbc9201.html
MySQL JDBC Driver下载地址
http://dev.mysql.com/downloads/connector/j/3.0.html
三、所需jar包
hibernate3.jar Hibernate的核心包
dom4j-1.6.1.jar dom4j读取xml文件包
mysql-connector-java-3.1.13-bin.jar MySQL的jdbc驱动包
Hibernate的作用:让我们以面向对象的方式或思维来考虑怎么向关系型数据库存取数据。
它须要与对应的数据库打交道,所以须要对应的jdbc驱动。我们的database用的是MySQL,所以须要引入MySQL的jdbc驱动。
log4j-1.2.11.jar 记录日志框架
因为log4j的记录日志比jdk自带的记录日志功能更加美观。简单,易配置日志级别,便于调试,我们选择使用log4j。
必需要引入的jar:
commons-logging-1.0.4.jar 抽象的日志记录框架
本身并没有实现真正的写日志能力(看包结构就可以知道)而是结合其他的日志系统如Log4j或者java本身的java.util.logging作为日志输出组件,来实现日志记录的功能。
commons-collections-2.1.1jar 各种集合类和集合工具类的封装
cglib-2.1.3.jar 动态代理,Hibernate用它来实现PO字节码的动态生成
asm.jar cglib须要依赖的jar,ASM字节码库
注:作为刚開始学习的人不提倡这样的做法。仅仅须要将hibernate所要依赖的第三方jar包都引入就可以,否则做其它实例时会报NoClassDefFoundError的错误,解决方式:仅仅需将相应jar引入就可以。
因为这是一个简单实例。仅仅须要引入这些jar。
四、代码展示
1、在IDE中创建java项目(比較简单不再演示)
2、创建source folder,命名为Hibernate3,在Hibernate下载文件里找到我们所须要的三个配置文件和全部jar包。拷贝所需jar文件,构建依赖包
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaml1cWl5dWxpYW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">
3、提供hibernate.cfg.xml文件,完毕基本配置
4、写代码
(1)建立实体类User.java
package com.liang.hibernate;
import java.util.Date;
public class User {
private String id;
private String name;
private String password;
private Date createTime;
private Date expireTime;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getExpireTime() {
return expireTime;
}
public void setExpireTime(Date expireTime) {
this.expireTime = expireTime;
}
}
(2)提供User.hbm.xml文件。完毕实体类映射
<span style="font-size:12px;"><?xml version="1.0"? >
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!--生成默觉得user的数据库表-->
<class name="com.liang.hibernate.User">
<id name="id">
<!-- 算法的核心思想是结合机器的网卡、当地时间、一个随机数来生成GUID -->
<generator class="uuid"></generator>
</id>
<property name="name"></property>
<property name="password"></property>
<property name="createTime" type="date"></property>
<property name="expireTime" type="date"></property>
</class> </hibernate-mapping></span>
(3)将User.hbm.xml文件增加到hibernate.cfg.xml文件里
<!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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 设置数据库URL -->
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property>
<!-- 数据库用户名 -->
<property name="hibernate.connection.username">root</property>
<!-- 数据库密码 -->
<property name="hibernate.connection.password">123456</property>
<!-- 指定相应数据库的方言。hibernate为了更好适配各种关系数据库。针对每种数据库都指定了一个方言dialect -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 映射文件 -->
<mapping resource="com/liang/hibernate/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
(4)编写工具类ExportDB.java。将hbm生成ddl,也就是hbm2ddl
package com.liang.hibernate; import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport; /**
* 将hbm生成ddl
* @author liang
*
*/
public class ExportDB{
public static void main(String[]args){
//默认读取hibernate.cfg.xml文件
Configuration cfg = new Configuration().configure();
////生成并输出sql到文件(当前文件夹)和数据库
SchemaExport export = new SchemaExport(cfg);
export.create(true, true);
}
}
測试之前,要提前建立数据库hibernate_first,測试例如以下:
控制台打印的SQL语句:
drop table if exists User
create table User (id varchar(255) not null, name varchar(255), password varchar(255), createTime date, expireTime date, primary key (id))
数据库表结构:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaml1cWl5dWxpYW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">
(5)建立client类Client,加入用户数据到mySQL
package com.liang.hibernate; import java.util.Date; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class Client {
public static void main(String[]args){
//读取hibernate.cfg.xml文件
Configuration cfg = new Configuration().configure();
//建立SessionFactory
SessionFactory factory =cfg.buildSessionFactory(); //取得session
Session session = null; try{
//开启session
session = factory.openSession();
//开启事务
session.beginTransaction(); User user = new User();
user.setName("jiuqiyuliang");
user.setPassword("123456");
user.setCreateTime(new Date());
user.setExpireTime(new Date());
//保存User对象
session.save(user); //提交事务
session.getTransaction().commit(); }catch(Exception e){
e.printStackTrace();
//回滚事务
session.getTransaction().rollback();
}finally{
if(session != null){
if(session.isOpen()){
//关闭session
session.close();
}
}
}
}
}
右键debug执行。測试完毕之后,我们查询一下測试结果:
5、为了在调试过程中能观察到Hibernate的日志输出,最好增加log4j.properties配置文件、在CLASSPATH中新建log4j.properties配置文件或将该配置文件复制到src下。便于程序调试。
内容例如以下:
<span style="font-size:12px;">### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n ### direct messages to file hibernate.log ###
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=hibernate.log
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n ### set log levels - for more verbose logging change 'info' to 'debug' ### log4j.rootLogger=warn, stdout</span>
配置完毕后。项目结构例如以下图所看到的:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaml1cWl5dWxpYW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">
五、最后
自己动手丰衣足食,实践出真理。纸上得来终觉浅,绝知此事要躬行。尽管这个实例很easy,可是我们踏进了持久层框架的大门。
从上面的简单实例能够看到,我们仅仅是使用Hibernate对User这一个实体进行了映射。比較简单。可是全然不符合实际。怎样像关系型数据库一样表示多种关联关系,比如:一对一,一对多,多对多等等,我们还须要深入。下篇博文,我们介绍Hibernate的基本映射原理以及关联关系映射。
【SSH进阶之路】Hibernate搭建开发环境+简单实例(二)的更多相关文章
- (Hibernate进阶)Hibernate搭建开发环境+简单实例(二)
hibernate是非常典型的持久层框架,持久化的思想是非常值得我们学习和研究的.这篇博文,我们主要以实例的形式学习Hibernate,不深究Hibernate的思想和原理,否则,一味追求,苦学思想和 ...
- 【SSH进阶之路】Struts基本原理 + 实现简单登录(二)
上面博文,主要简单的介绍了一下SSH的基本概念,比較宏观,作为刚開始学习的人可以有一个总体上的认识,个人觉得对学习有非常好的辅助功能.它不不过一个"瞭望塔".更是检验是否真正掌握全 ...
- 【SSH进阶之路】Hibernate映射——多对一单向关联映射(四)
[SSH进阶之路]Hibernate基本原理(一) ,小编介绍了Hibernate的基本原理以及它的核心,採用对象化的思维操作关系型数据库. [SSH进阶之路]Hibernate搭建开发环境+简单实例 ...
- 【SSH进阶之路】Hibernate基本映射(三)
[SSH进阶之路]Hibernate基本原理(一) ,小编介绍了Hibernate的基本原理以及它的核心.採用对象化的思维操作关系型数据库. [SSH进阶之路]Hibernate搭建开发环境+简单实例 ...
- 【SSH进阶之路】Hibernate映射——一对一单向关联映射(五)
[SSH进阶之路]Hibernate基本原理(一) ,小编介绍了Hibernate的基本原理以及它的核心,採用对象化的思维操作关系型数据库. [SSH进阶之路]Hibernate搭建开发环境+简单实例 ...
- 【SSH进阶之路】Hibernate系列——总结篇(九)
这篇博文是Hibernate系列的最后一篇,既然是最后一篇,我们就应该进行一下从头到尾,整体上的总结,将这个系列的内容融会贯通. 概念 Hibernate是一个对象关系映射框架,当然从分层的角度看,我 ...
- SSH进阶之路
[SSH进阶之路]Hibernate基本原理(一) 在开始学Hibernate之前,一直就有人说:Hibernate并不难,无非是对JDBC进一步封装.一句不难,难道是真的不难还是眼高手低 ...
- 【SSH进阶之路】Struts + Spring + Hibernate 进阶开端(一)
[SSH进阶之路]Struts + Spring + Hibernate 进阶开端(一) 标签: hibernatespringstrutsssh开源框架 2014-08-29 07:56 9229人 ...
- Hibernate(一)——采用Hibernate框架开发环境搭建
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员充分使用对象编程思维来操作数据库.HIbernate的移植性很好,它可以应用于任何JDB ...
随机推荐
- Android(java)学习笔记192:ContentProvider使用之虚拟短信
1.虚拟短信应用场景: 急着脱身?应付老婆(老公.男女朋友查岗)? 使用虚拟通话短信吧.您只需通过简单设置,软件就会在指定时间会模拟一个“真实”来电或短信来迷惑对方,通过“真实”的证据让对方相 ...
- Axure 9 面板折叠显示隐藏
1 首先放置一个面板1作为点击事件: 2 另外一个面板2或者其他组建,将其设置为动态面板,然后隐藏 3 给面板1添加如下事件,即可: 4 我们点击面板1,可以实现展开隐藏面板2的动态效果
- vue工程化引入组件模板
vue脚手架搭建好项目后,组件间的引用通过components import bannerComponent from './banner' export default { data(){ retu ...
- webpack遇见的坑:Please install 'webpack-cli' in addition to webpack itself to use the CLI.
webpack-cli没被找到: 在webpack4.0之后,需要全局安装webpack-cli, 在全局安装webpack之后,cnpm i webpack-cli -g 在局部使用webpack时 ...
- JAVA基础——设计模式之简单工厂模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂 ...
- Swing实现个人简历
源码: import java.awt.Container;import java.awt.FlowLayout;import java.awt.Font; import javax.swing.*; ...
- 「 HDU 1978 」 How many ways
# 解题思路 记忆化搜索 一个点可以跳到的点,取决于它现在的能量.而且有一个显而易见的性质就是一条可行路径的终点和起点的横坐标之差加上纵坐标之差肯定小于等于起点的能量. 因为跳到一个点之后,能量和之前 ...
- NOI模拟赛(3.8)Problem B
Description Alice和Bob在玩一个游戏,给出一张n*m的棋盘,上面有一些点是障碍,游戏的开始,Alice选定棋盘上任意一个不是障碍的格子,并且将一枚棋子放在其中,然后Bob先手,两人轮 ...
- 学习javascript中的事件——事件处理程序
事件就是用户或浏览器自身执行的某种动作.诸如 click.load 和 mouseover ,都是事件的名字.而响应某个事件的函数就叫做事件处理程序(或事件侦听器).事件处理程序的名字以“on”开头, ...
- C51 动态数码管 个人笔记
8段led管构成一个数字. 开发板上共有8个数字. 每个数字有一个使能端(段选引脚) 每个数字的位选端(选择8段led管哪些亮,即构成什么图案)并联在一起 轮流点亮不同数字,速度很快,视觉暂留,从而形 ...