hibernate + maven: helloworld

http://blog.163.com/yandong_8212/blog/static/132153914201389104248638/

1. 准备工作: 参考书籍:JAVA PERSISTENCE with HIBERNATE
mave插件:m2e

2. 通过maven创建一个quickstart 的maven工程,并新建一个src/main/resources的source folder用来存放资源文件。

3. 修改pom文件,最简单的helloworld只需要增加hibernate和hsqldb:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.shev</groupId>
<artifactId>hibernate_helloworld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>hibernate_helloworld</name>
<url>http://maven.apache.org</url>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.2.5.Final</version>
</dependency>

<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb-j5</artifactId>
<version>2.2.4</version>
</dependency>

</dependencies>
</project>

4. 新建一个Bean, 在src/main/java下新建一个com.shev.hibernate_helloworld 包,并建一个Message 类。

package com.shev.hibernate_helloworld;

public class Message {
private Long id;
private String text;
private Message nextMessage;
public Message() {
super();
// TODO Auto-generated constructor stub
}

public Message(String text) {
super();
this.text = text;
}

public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public Message getNextMessage() {
return nextMessage;
}
public void setNextMessage(Message nextMessage) {
this.nextMessage = nextMessage;
}
}

5. src/main/resources下,新建Message.hbm.xml,定义Bean到数据库字段的映射关系:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.shev.hibernate_helloworld.Message" table="MESSAGES">
<id name="id" column="MESSAGE_ID">
<generator class="increment" />
</id>
<property name="text" column="MESSAGE_TEXT" />
<many-to-one
name="nextMessage"
cascade="all"
column="NEXT_MESSAGE_ID"
foreign-key="FK_NEXT_MESSAGE" />
</class>
</hibernate-mapping>

6. src/main/resources下,新建hibernate.cfg.xml定义数据库连接信息等:

<!DOCTYPE hibernate-configuration SYSTEM
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">
org.hsqldb.jdbcDriver
</property>
<property name="hibernate.connection.url">
jdbc:hsqldb:hsql://localhost
</property>
<property name="hibernate.connection.username">
sa
</property>

<property name="hibernate.dialect">
org.hibernate.dialect.HSQLDialect
</property>
<!-- Use the C3P0 connection pool provider -->
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.timeout">300</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>
<!-- Show and print nice SQL on stdout -->
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<!-- List of XML mapping files -->
<mapping resource="Message.hbm.xml" />
</session-factory>
</hibernate-configuration>

7. src/main/java新建HibernateUtil类:

package com.shev.hibernate_helloworld;

import org.hibernate.HibernateException;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.hibernate.tool.hbm2ddl.SchemaValidator;

public class HibernateUtil {
private static SessionFactory sessionFactory;

static {
Configuration cfg = new Configuration().configure();

//SchemaExport是hibernate自带的操作数据库和产生DDL的工具类。
SchemaExport schemaExport = new SchemaExport(cfg);

//注意这里第一个参数表示是否输出到控制台,第二个参数表示是否在数据库中执行。这里这样用的目的是,避免每次都去新create一个表,因为默认生成的DDL,当发现有表存在时,会自动删除。因此最好的办法是输出SQL,让DBA去创建。
schemaExport.create(true, false);

//如果表跟当前定义不匹配,将会抛出异常。
new SchemaValidator(cfg).validate();

sessionFactory = cfg.buildSessionFactory();
}

public static SessionFactory getSessionFactory() {
return sessionFactory;
}

public static void shutdown() {
getSessionFactory().close();
}
}

8. src/main/java下新建HellowWorld类:

package com.shev.hibernate_helloworld;

import java.util.Iterator;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;

public class HelloWorld {
public static void main(String[] args) {
System.out.println(System.getProperty("user.dir"));//

// First unit of work
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = session.beginTransaction();

Message message = new Message("Hello World");
Long msgId = (Long)session.save(message);
tx.commit();
session.close();

Session newSession = HibernateUtil.getSessionFactory().openSession();
Transaction newTx = newSession.beginTransaction();
List messages = newSession.createQuery("from Message m order by m.text asc").list();
System.out.println(messages.size() + " message(s) found:");

for (Iterator it = messages.iterator(); it.hasNext(); ) {
Message msg = (Message)it.next(); System.out.println(msg.getText()); } newTx.commit(); newSession.close(); HibernateUtil.shutdown(); }}

9. 启动hsqldb.Server:

C:\Users\CW>java -classpath C:\Users\CW\.m2\repository\org\hsqldb\hsqldb-j5\2.2.4\hsqldb-j5-2.2.4.jar org.hsqldb.Server

10. 启动hsqldbManager:

C:\Users\CW>java -classpath C:\Users\CW\.m2\repository\org\hsqldb\hsqldb-j5\2.2.4\hsqldb-j5-2.2.4.jar org.hsqldb.util.DatabaseManagerSwing -url jdbc:hsqldb:hsql://localhost/ -driver org.hsqldb.jdbcDriver

11. maven package打包

12. 运行HelloWorld.java,第一次会抛出异常,不用管它,只需要将下面的语句复制到hsqldbManager中执行:

alter table MESSAGES
drop constraint FK_NEXT_MESSAGE //这两句忽略,可能会报错

drop table MESSAGES if exists

create table MESSAGES (
MESSAGE_ID bigint not null,
MESSAGE_TEXT varchar(255),
NEXT_MESSAGE_ID bigint,
primary key (MESSAGE_ID)
)

alter table MESSAGES
add constraint FK_NEXT_MESSAGE
foreign key (NEXT_MESSAGE_ID)
references MESSAGES

13. 再次运行HellowWorld.java:

...

Hibernate:
select
max(MESSAGE_ID)
from
MESSAGES
Hibernate:
insert
into
MESSAGES
(MESSAGE_TEXT, NEXT_MESSAGE_ID, MESSAGE_ID)
values
(?, ?, ?)
Hibernate:
select
message0_.MESSAGE_ID as MESSAGE_1_0_,
message0_.MESSAGE_TEXT as MESSAGE_2_0_,
message0_.NEXT_MESSAGE_ID as NEXT_MES3_0_
from
MESSAGES message0_
order by
message0_.MESSAGE_TEXT asc
1 message(s) found:
Hello World
九月 09, 2013 11:03:22 上午 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl stop
INFO: HHH000030: Cleaning up connection pool [jdbc:hsqldb:hsql://localhost]

hsqldbManager里面的界面:

时间: 2024-08-28 21:11:58

hibernate + maven: helloworld的相关文章

Spring MVC + Hibernate + Maven: Crud操作示例

Alexey是一个在使用Java,TestNG 和Selenium的自动化WEB应用程序中有丰富经验的测试开发者.他如此的喜欢QA以至于在下班后他为初级QA工程师提供培训课程. 在这篇文章中我想介绍一个Spring MVC + Hibernate + Maven例子.这组技术主要涉及一些基础知识,我想在每一个必要的地方详细解释它.本篇话题范围以外的更多资源,我会提供链接方便你阅读.在文章的最后,我将发布一个GitHub的链接. 目标 示例web应用程序是基于Spring MVC, Hiberna

Maven– HelloWorld实例

Maven– HelloWorld实例 maven安装好后,可以通过HelloWorld项目来体验一下maven是如何构建项目的.Maven项目的核心是pom.xml(就像Ant的build.xml一样),用来构建和发布项目.我们所说的建立maven项目,其实就是建立java项目或web项目,和普通项目不同的是,maven项目的工程目录结构需要按照maven的标准进行建立,并且带有pom.xml文件,这样才能利用maven命令构建和发布工程. 下面利用maven Archetype来创建Hell

Hibernate+maven+mysql

最近在研究hibernate,想建立一个简单的Hibernate+maven+mysql工程,网上找了一大堆的示例,要么看不懂结构,要么就是缺少必要文件.总之都没有成功,结果无意在一个外文网上找了一个实例,惊叹于人家的排版.也不得不感叹的说下浩瀚的百度里,想找到自己想要的东西是多么难啊! 以下借鉴人家文章和内容并做部分补充,以供初学者一起分享: (准备工作myeclipse的安装+maven的下载+mysql的配置略过) 1.mysql中建一个mkyong的数据库,其下面新建一个stock的空表

Jetty和Maven HelloWorld

ApacheMaven是一个软件项目管理和理解工具.基于项目对象模型(POM)内容,Maven能够通过信息中心管理一个项目构建.报告和文档.它是一个理想的工具用来构建Web应用项目.这项目可以使用Jetty Maven插件在部署模式下运行Web应用. 你能使用Maven来构建嵌入式Jetty应用程序和标准的基于Web应用. 为了理解使用Jetty构建和运行的基本操作,首先阅读: 1) Jetty HelloWorld教程 http://wiki.eclipse.org/Jetty/Tutoria

jbpm使用配置(spring+hibernate+maven项目环境)

Maven 依赖名包                 <dependency> <groupId>org.jbpm.jbpm4</groupId> <artifactId>jbpm-api</artifactId> <version>4.4</version> </dependency> <dependency> <groupId>org.jbpm.jbpm4</groupId&g

Hibernate笔记一:HIbernate配置-HelloWorld

hibernate介绍: Hibernate是一个开源的对象关系映射框架,它对JDBC进行了轻量级的对象封装,使Java程序员可以随心所欲的使用对象编程思维来操纵数据库. 它不仅提供了从java类到数据库表之间的映射,也提供了数据查询和恢复机制.相对于使用JDBC和SQL来手工操作数据库,Hibernate可以大大减少 操作数据库的工作量.另外Hibernate可以利用代理模式简化载入类的过程,这将大大减少利用Hql从数据库提取数据的代码编写量,从而节约开发时间 和开发成本Hibernate可以

hibernate的helloworld实现

首先要新建一个 web project,然后新建一个lib的文件夹并导入相应的jar包 hibernate开发步骤: 1.创建hibernate配置文件 2.创建持久化类 3.创建对象关系映射文件 如下: 相应的jar包如下: (jar包去 hibernate文件中找) hibernate.cfg.xml代码如下: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-conf

Hibernate之HelloWorld

1. 步骤 0. 导入相关Jar包. 1. 编写Hibernate的持久化文件 (默认为hibernate.cfg.xml). 2. 编写持久化类. 3. 创建对象 - 关系文件(.htm.xml文件). 4. 通过hibernate的API 编写访问数据库的代码. 2. 具体代码实现 1. 创建hibernate的配置文件 - hibernate.cfg.xml文件 1)项目-右键-new-other-hibernate下-cfg.xml 1 <?xml version="1.0&quo

hibernate学习(1)——helloworld

1. 框架体系结构 2. hibernate入门 2.1 ORM框架 Hibernate是一个数据持久化层的ORM框架. Object:对象,java对象,此处特指JavaBean Relational:关系,二维表,数据库中的表. Mapping:映射|映射元数据,对象中属性,与表的字段,存在对应关系. 2.2   什么是hibernate 1) Hibernate是轻量级JavaEE应用的持久层解决方案,是一个关系数据库ORM框架 2)ORM 就是通过将Java对象映射到数据库表,通过操作J