初学hibernate笔记一

 

好记性不如烂笔头!虽然小弟身为菜鸟,但是学起hibernate毫不逊色!

这里记录一些本人学习hibernate的笔记以及学习当中自己对一些概念的理解

 

废话不多说了!开始吧。

首先先说说hibernate的搭建吧!至于其定义直接google得了

先看看使用hibernate的基本流程!下面是简单的流程图

 hibernate基本流程图

第一步:创建项目

这里就不多说了!用myeclipse创建一个java project

 

第二部:导入hibernate到项目

myeclipse导入就不多说了!如果不是用IDE进行开发则在classpath目录

下新建一个名在lib的目录!下面列出hibernate最小的包集合

 antlr.jar
cglib.jar
asm.jar
asm
-attrs.jars
commons
-collections.jar
commons
-logging.jar
ehcache.jar
hibernate3.jar
jta.jar
dom4j.jar
log4j.jar

这些jar文件是保存在hibernate文件夹的lib目录下,把他拷到项目中就可以了

 

第三步: 配置hibernate

hibernate的配置有两种形式!一种是使用hibernate.properties文件!另一种

是使用hibernate.cfg.xml文件!这里我们使用hibernate.cfg.xml进行配置

下面给出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.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/test</property>
<property name="connection.username">root</property>
<property name="connection.password">6813229</property>

<property name="connection.pool_size">1</property>

<!-- 数据库方言 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>

<property name="current_session_context_class">thread</property>

<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

<!-- 打印SQL语句 -->
<property name="show_sql">true</property>

<!-- 打开hbm2ddl.auto选项将自动生成数据库模式 -->
<!-- <property name="hbm2ddl.auto">create</property> -->


<!-- 所有映射到hibernate的实体类配置 -->
<mapping resource="entity/entity1.hbm.xml"/>
     <mapping resource="entity/entity2.hbm.xml"/>
</session-factory>
</hibernate-configuration>

最开始的4个property元素包含必要的JDBC连接信息!JDBC驱动和URL如果不清楚

可以参照hibernate发行文件etc目录下的hibernate.properties文件。里面列举了

各个数据库的配置信息

 

<property name="dialect">org.hibernate.dialect.MySQLDialect</property>

这里配置了hibernate所使用的方言!

<property name="show_sql">true</property>

这里指定hibernate打印相关操作的sql语句!这个很有用,方便我们查错

<property name="hbm2ddl.auto">create</property>

打开hbm2ddl.auto选项将自动生成数据库模型!就是由hibernate帮我们建表

和建字段的操作

<mapping resource="entity/entity1.hbm.xml"/>
<mapping resource="entity/entity2.hbm.xml"/>

这里配置所有实体类的映射文件!关于映射文件后面在具体说明

 

第四步: 创建实体类和映射文件

package events;

import java.util.Date;

public class Event {
private Long id;

private String title;
private Date date;

public Event() {}

public Long getId() {
return id;
}

private void setId(Long id) {
this.id = id;
}

public Date getDate() {
return date;
}

public void setDate(Date date) {
this.date = date;
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}
}

上面是官方文档给出的一个简单的实体类!实体类最好写成JavaBean的命名约定!即

各个属性设置其存取方法(getter and setter method)!属性设置成private的访问

权限!hibernate是通过反射机制(Reflection)来实例化实体类对象的!所以我们需要

为实体类提供一个无参的构造方法。至此实体类写完了,我们来看看实体类映射文件的配置

<?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>
[...]
</hibernate-mapping>

这是实体类文件的基本结构

我们来为上面的实体类创建一个映射文件

<?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>

<class name="events.Event" table="EVENTS">
<id name="id" column="EVENT_ID">
<generator class="native"/>
</id>
<property name="date" type="timestamp" column="EVENT_DATE"/>
<property name="title"/>
</class>

</hibernate-mapping>

这里列出的是简单也是最基本的配置

<class name="events.Event" table="EVENTS">

该标签配置实体类与数据库表的映射关系

name:指定实体类的类名, 包括完整的包名
table:实体类映射到数据库表的表名

<id name="id" column="EVENT_ID">
<generator class="native"/>
</id>

ID标签设置实体类的唯一标识符(主键)

name:指定使用实体类的哪个属性作为唯一标识符
column:与之对应的数据库字段

嵌套的generator标签指定了标识符生成策略,在这里我们指定native
它根据已配置的数据库(方言)自动选择最佳的标识符生成策略

<property name="date" type="timestamp" column="EVENT_DATE"/>
<property name="title"/>

默认情况下,类里面的属性都被视为非持久化的

如果要持久化某个字段则必须配置用property标签进行配置

name:指定需要持久化实体类的属性名

column:与之对应的数据库字段

type:与之对应的SQL字段类型

 这里title属性没有配type和column属性。如果没有配置column属性,hibernate会

自动以该属性名作为字段名在数据库中进行创建和查找。如果没有配置type属性!

hibernate会自动将该字段的Java数据类型转换到SQL数据类型,反之亦然。在某些情况

下这个自动检测机制(在Java 类上使用反射机制)不会产生你所期待或需要的缺省值。

date属性就是个很好的例子,Hibernate无法知道这个属性(java.util.Date类型的)

应该被映射成:SQL date,或timestamp,还是time 字段。在此例中,把这个属性

映射成timestamp 转换器

 最后把该文件命名为 "实体类名.hbm.xml"放到与实体类同一目录下!该文件的实体类名可以

随意命名,但是"hbm.xml"的后缀是必须的。但是这样的命名约定是大家约定俗成的

第五步:创建SessionFactory对象

public class HibernateUtil {

private static final SessionFactory sessionFactory;

static {
try {
// 从 hibernate.cfg.xml读取先关信息来创建 SessionFactory
sessionFactory = new Configuration().configure().buildSessionFactory();
}
catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}

public static SessionFactory getSessionFactory() {
return sessionFactory;
}

}

 上面代码略去导入包名

 

第六步:获取Session对象进行相关操作

public class EventManager {

public static void main(String[] args) {
EventManager mgr
= new EventManager();
if (args[0]!=null && !args[0].equals("list")) {
mgr.createAndStoreEvent(args[
0], new Date());
}
else if (args[0].equals("list")) {
List events
= mgr.listEvents();
for (int i = 0; i < events.size(); i++) {
Event theEvent
= (Event) events.get(i);
System.out.println(
"Event: " + theEvent.getTitle() +
" Time: " + theEvent.getDate());
}
}
HibernateUtil.getSessionFactory().close();
}

private void createAndStoreEvent(String title, Date theDate) {
//获得当前Session
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
//开启事务
session.beginTransaction();
//创建一个Event对象
Event theEvent = new Event();
theEvent.setTitle(title);
theEvent.setDate(theDate);
//保存Event对象实体
session.save(theEvent);
//提交事务
session.getTransaction().commit();
}
}

上面代码略去导入包名

 

至此一个最基本的hibernate的配置和操作就完成了。这是我在看官方文档之后做的笔记

一些概念的理解可能有错误。如果哪位朋友不幸看到此文并发现其中的错误请给我留个言!

大家互相学习互相进步!

转载于:https://www.cnblogs.com/ebolo/articles/2159277.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值