idea 结合maven开发hibernate实例

来源:互联网 发布:淘宝标题带特价 编辑:程序博客网 时间:2024/06/07 17:27

    intellij idea编辑器是我刚刚接触了两个星期左右的开发工具,说实话这个开发工具很强大,集成了很多功能,估计要花一段较长时间才能基本上掌握它的功能,其中它集成了maven这个插件,现在它是很火的管理JavaEE项目的框架,我是刚刚接触很多东西还不是很懂,不过学了一点知道这个框架确实牛逼,管理方便,打包也方便。建议学JavaWEB和JavaEE的IT从事者学学它,因为现在很多公司都已经用到了这个maven的框架了。我用idea结合maven开发hibernate遇到了bug个,由于我是初用idea,初学maven和hibernate,被这个bug搞了两天后才解决,这过程寻求了三位师兄都没解决,被网上的同行网友给解决,在这里我非常的谢谢他,也谢谢其中一位帮我和指导我的同行网友。好了现在我就结合bug说一下用idea14.0.2结合maven3.0开发hibernate3.0的入门级例子吧。

步骤:

1建立maven项目:

到这里一个maven的项目建好了现在是已引入hibernate相关包了。

2首先该项目会自动创建pom.xml文件,只要你在这文件配置,就可以自动的引入对应版本的jar包了。以下是hibernate的pom.xml配置:

<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.scau.beyondboy</groupId>  <artifactId>Hibernate</artifactId>  <version>1.0-SNAPSHOT</version>  <packaging>jar</packaging>  <name>Hibernate</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>    <!-- 添加Hibernate依赖 -->    <dependency>      <groupId>org.hibernate</groupId>      <artifactId>hibernate-core</artifactId>      <version>3.6.0.Final</version>    </dependency>    <!-- 添加Log4J依赖 -->    <dependency>      <groupId>log4j</groupId>      <artifactId>log4j</artifactId>      <version>1.2.16</version>    </dependency>    <dependency>      <groupId>org.slf4j</groupId>      <artifactId>slf4j-api</artifactId>      <version>1.6.1</version>    </dependency>    <dependency>      <groupId>org.slf4j</groupId>      <artifactId>slf4j-nop</artifactId>      <version>1.6.4</version>    </dependency>    <!-- 添加javassist -->    <dependency>      <groupId>javassist</groupId>      <artifactId>javassist</artifactId>      <version>3.11.0.GA</version>    </dependency>    <dependency>      <groupId>mysql</groupId>      <artifactId>mysql-connector-java</artifactId>      <version>5.1.17</version>    </dependency>    <dependency>      <groupId>org.slf4j</groupId>      <artifactId>slf4j-nop</artifactId>      <version>1.6.4</version>    </dependency>  </dependencies></project>

配置完后,Maven的侧栏会出现很多jar包,如图:

3创建文件和选择hibernate框架如图:

4相关配置和类的代码:

hibernate.cfg.xml的配置:

<?xml version='1.0' encoding='utf-8'?><!DOCTYPE hibernate-configuration PUBLIC    "-//Hibernate/Hibernate Configuration DTD//EN"    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration>  <session-factory>      <!-- 指定连接数据库所用的驱动 -->      <property name="connection.driver_class">com.mysql.jdbc.Driver</property>      <!-- 指定连接数据库的url,hibernate连接的数据库名 -->      <property name="connection.url">jdbc:mysql://localhost/hibernate</property>      <!-- 指定连接数据库的用户名 -->      <property name="connection.username">root</property>      <!-- 指定连接数据库的密码 -->      <property name="connection.password">32147</property>      <!-- 指定连接池里最大连接数 -->      <property name="hibernate.c3p0.max_size">20</property>      <!-- 指定连接池里最小连接数 -->      <property name="hibernate.c3p0.min_size">1</property>      <!-- 指定连接池里连接的超时时长 -->      <property name="hibernate.c3p0.timeout">5000</property>      <!-- 指定连接池里最大缓存多少个Statement对象 -->      <property name="hibernate.c3p0.max_statements">100</property>      <property name="hibernate.c3p0.idle_test_period">3000</property>      <property name="hibernate.c3p0.acquire_increment">2</property>      <property name="hibernate.c3p0.validate">true</property>      <!-- 指定数据库方言 -->      <property name="dialect">org.hibernate.dialect.MySQLDialect</property>      <!-- 根据需要自动创建数据库 -->      <property name="hibernate.hbm2ddl.auto">update</property>      <!-- 显示Hibernate持久化操作所生成的SQL -->      <property name="sfhow_sql">true</property>      <!-- 将SQL脚本进行格式化后再输出 -->      <property name="hibernate.format_sql">true</property>      <mapping resource="com/scau/beyondboy/domain/News.hbm.xml"/>  </session-factory></hibernate-configuration>
现在main/resources下创建com.scau.beyondboy.domain的这四个文件夹,然后在创建News.hbm.xml,该代码:

<?xml version="1.0" encoding="gb2312"?><!-- 指定Hiberante3映射文件的DTD信息 --><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><!-- hibernate-mapping是映射文件的根元素 --><hibernate-mapping package="com.scau.beyondboy.domain"><!-- 每个class元素对应一个持久化对象 --><class name="News" table="news_table"><!-- id元素定义持久化类的标识属性 --><id name="id"><generator class="native"/></id><!-- property元素定义常规属性 --><property name="title" not-null="true"/><property name="content"/><!-- 通过formula指定该属性值没有对应的实际数据列该属性值将由系统根据表达式来生成--><property name="fullContent" formula="(select concat(nt.title,nt.content)  from news_table nt where nt.id= id)"/> </class></hibernate-mapping>
持久化对象放在main/java/com/scau/beyondboy/domain下,该News类的代码:

package com.scau.beyondboy.domain;public class News{//消息类的标识属性private Integer id;//消息标题private String title;//消息内容private String content;//消息全部内容,由系统根据公式生成private String fullContent;//id属性的setter和getter方法public void setId(Integer id){this.id = id;}public Integer getId(){return this.id;}//title属性的setter和getter方法public void setTitle(String title){this.title = title;}public String getTitle(){return this.title;}//content属性的setter和getter方法public void setContent(String content){this.content = content;}public String getContent(){return this.content;}//fullContent属性的setter和getter方法public void setFullContent(String fullContent){this.fullContent = fullContent;}public String getFullContent(){return this.fullContent;}}
生成操作工厂的类是放在main/java下,该NewsManager类的代码:

import com.scau.beyondboy.domain.News;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;public class NewsManager{public static void main(String[] args) throws Exception{//实例化Configuration,这行代码默认加载hibernate.cfg.xml文件Configuration conf = new Configuration().configure();//以Configuration创建SessionFactorySessionFactory sf = conf.buildSessionFactory();//实例化SessionSession sess = sf.openSession();//开始事务Transaction tx = sess.beginTransaction();//创建消息实例News n = new News();//设置消息标题和消息内容n.setTitle("scau");n.setContent("beyondboy");//保存消息sess.save(n);/*News n2 = (News) sess.get(News.class, 1);//输出fullContent属性值System.out.println(n2.getFullContent());*///提交事务tx.commit();//关闭Sessionsess.close();}}
5: 配置数据库:

6最后一步编译执行:



到这里,基本步骤做完了,一下是测试结果图:


说完了这些,我就说说我遇到了一个非常细小的bug,搞了我两天才解决,以下是错误hibernate.cfg.xml配置和错误运行:


<?xml version='1.0' encoding='utf-8'?><!DOCTYPE hibernate-configuration PUBLIC        "-//Hibernate/Hibernate Configuration DTD//EN"        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><!--suppress HibernateConfigDomInspection --><hibernate-configuration>    <session-factory>        <!--数据库配置-->        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>        <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>        <property name="connection.username">root</property>        <property name="connection.password">32147</property>        <!--指定数据库方言-->        <property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>        <property name="hbm2ddl.auto">update</property>        <property name="show_sql">true</property>        <property name="hibernate.format_sql">true</property>        <mapping resource="News.hbm.xml"/>        <!-- DB schema will be updated if needed -->        <!-- <property name="hbm2ddl.auto">update</property> -->    </session-factory></hibernate-configuration>

后来一位同行网友指出是以下方言的配置错了:

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

改为:

       <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
就不会有错了,在这里我真很感谢那位It网友,要不是他我到现在还不知道错在哪里。










1 0
原创粉丝点击