maven+hibernate+hsqldb 集成

来源:互联网 发布:易语言可以解析json吗? 编辑:程序博客网 时间:2024/04/27 22:40

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

mvn archetype:generate -DgroupId=maven.demo.start -DartifactId=HibernateDemo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false  
Maven命令执行到Generating Project in Batch mode 卡住,原因是网络带宽不足问题!需要下载一个约4.1M的xml文件。网速好可以多等几分钟,还是不行则参考Solution:Maven命令执行到Generating Project in Batch mode 卡住。 我的是多等了下就好了。


2.修改pom文件,最简单的helloworld只需要增加hibernate和hsqldb(如果安装了mysql等数据库可以用本地数据库,不用下载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/maven-v4_0_0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>maven.demo.start</groupId>  <artifactId>HibernateDemo</artifactId>  <packaging>jar</packaging>  <version>1.0-SNAPSHOT</version>  <name>HibernateDemo</name>  <url>http://maven.apache.org</url>  <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.3.11.Final</version></dependency><dependency><groupId>org.hsqldb</groupId><artifactId>hsqldb-j5</artifactId><version>2.2.4</version></dependency>  </dependencies></project>

3. 新建一个类, 在src/main/java下新建一个maven.demo.start包,并建一个Message 类。

package maven.demo.start;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;}}

4.src/main/ 下创建resources文件夹,在resource下新建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="maven.demo.start.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>

5.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><property name="hibernate.hbm2ddl.auto">update</property><!-- List of XML mapping files --><mapping resource="Message.hbm.xml" /></session-factory></hibernate-configuration>


6.src/main/java新建maven.demo.start.HibernateUtil类:

package maven.demo.start;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;import org.hibernate.boot.registry.StandardServiceRegistryBuilder;import org.hibernate.service.ServiceRegistry;public class HibernateUtil {private static SessionFactory sessionFactory = null;private static ServiceRegistry serviceRegistry = null;private static Configuration cfg = null;static {cfg = new Configuration().configure();    serviceRegistry = new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();sessionFactory = cfg.buildSessionFactory(serviceRegistry);}public static SessionFactory getSessionFactory() {return sessionFactory;}public static void shutdown() {getSessionFactory().close();}}

7.src/main/java下新建maven.demo.start.HellowWorld类:

package maven.demo.start;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 workSession 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();}}

8. 启动hsqldb.Server: cmd进入 hsqldb-j5-2.2.4.jar目录。(一般在C:\Users\Adminstrator\.m2\repository\org\hsqldb\hsqldb-j5\2.2.4\hsqldb-j5-2.2.4.jar 路径下,如果修改了maven的仓库地址,则改为对应的repository目录下

java -cp hsqldb-j5-2.2.4.jar org.hsqldb.Server

9. 启动hsqldbManager:cmd进入 hsqldb-j5-2.2.4.jar目录。(一般在C:\Users\Adminstrator\.m2\repository\org\hsqldb\hsqldb-j5\2.2.4\hsqldb-j5-2.2.4.jar 路径下,如果修改了maven的仓库地址,则改为对应的repository目录下

java -cp hsqldb-j5-2.2.4.jar org.hsqldb.util.DatabaseManagerSwing -url jdbc:hsqldb:hsql://localhost/ -driver org.hsqldb.jdbcDriver

10.maven package打包: 运行命令 mvn package

11.运行HelloWorld.java。 进入项目目录,使用java命令运行HelloWorld:

java -cp target/HibernateDemo-1.0-SNAPSHOT.jar  maven.demo.startHelloWorld


原来mvn package 打包未将项目依赖的jar一起打包到HibernateDemo-1.0-SNAPSHOT.jar。所以用java命令运行HelloWorld类的main方法总是报错。

正确的运行方法是(使用Maven运行Java main的3种方式):

mvn exec:java -Dexec.mainClass="maven.demo.start.HelloWorld"  






0 0