使用hibernate5.2.10编写hibernate helloworld

来源:互联网 发布:如何选择理财产品 知乎 编辑:程序博客网 时间:2024/05/20 23:36

今天刚开始学习Hibernate,在写 helloworld过程中,通过 Hibernate API 编写访问数据库的代码时出现错误。原因是最新版本5.2.10已经不再使用 ServiceRegistry 来获得 SessionFactory。具体代码:      (oracle数据库)

SessionFactory sessionFactory;  Session session;  Transaction transaction;//创建 Configuration 对象:对应 hibernate 的基本配置信息和 对象关系映射信息Configuration configuration = new Configuration().configure();//5.2.10版本.调用Configuration的buildSessionFactory()方法返回一个SessionFactory对象 sessionFactory = configuration.buildSessionFactory();  //4.x版本. 创建一个 ServiceRegistry 对象: hibernate 4.x 新添加的对象//hibernate 的任何配置和服务都需要在该对象中注册后才能有效.//ServiceRegistry serviceRegistry = //new ServiceRegistryBuilder().applySettings(configuration.getProperties())//                            .buildServiceRegistry();//sessionFactory = configuration.buildSessionFactory(serviceRegistry);//从SessionFactory 中获取 Session 对象session = sessionFactory.openSession();  //开启事务transaction = session.beginTransaction();//执行保存操作News news = new News("Java","LOVEYIYI",new Date(new java.util.Date().getTime()));session.save(news);//提交事务transaction.commit();//关闭 Sessionsession.close();//关闭 SessionFactorysessionFactory.close();
代码实现后,用JUit4测试会出现 Disabling contextual LOB creation as createClob() method threw error : java.lang 异常,这是因为Hibernate默认获取方式是jdbc,如果使用连接池的方式的话,需要在src下新建一个hibernate.properties,或者在配置文件里,写上一句  hibernate.temp.use_jdbc_metadata_defaults=false


以下为helloworld全部代码:


News.java

import java.sql.Date;public class News {private Integer id;private String title;private String author;private Date datetime;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public Date getDatetime() {return datetime;}public void setDatetime(Date datetime) {this.datetime = datetime;}public News(String title, String author, Date datetime) {super();this.title = title;this.author = author;this.datetime = datetime;}public News() {super();// TODO Auto-generated constructor stub}@Overridepublic String toString() {return "News [id=" + id + ", title=" + title + ", author=" + author + ", datetime=" + datetime + "]";}}

hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration>        <session-factory>            <!-- 配置连接数据库的基本信息 -->    <property name="connection.username">scott</property>    <property name="connection.password">tiger</property>    <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>    <property name="connection.url">jdbc:oracle:thin:@localhost:1521:ORCL</property>        <!-- 配置 hibernate 的基本信息 -->    <!-- hibernate 所使用的数据库方言 -->    <property name="dialect">org.hibernate.dialect.Oracle9iDialect</property>        <!-- 执行操作时是否在控制台打印SQL -->    <property name="show_sql">true</property>        <!-- 是否对 SQL 进行格式化 -->    <property name="hibernate.format_sql">true</property>        <!-- 指定自动生成数据表的策略 -->    <property name="hbm2ddl.auto">update</property>        <!-- 指定关联的 .hbm.xml文件 -->        <mapping resource="com/loveyiyi/hibernate/helloworld/News.hbm.xml"/>        </session-factory></hibernate-configuration>

News.hbm.xml(本人使用了 hibernate tools,该代码为生成代码)

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2017-9-12 11:20:46 by Hibernate Tools 3.5.0.Final --><hibernate-mapping>    <class name="com.loveyiyi.hibernate.helloworld.News" table="NEWS">               <id name="id" type="java.lang.Integer">            <column name="ID" />            <!-- 指定主键的生成方式 ,native:使用数据库本地方式-->            <generator class="native" />        </id>               <property name="title" type="java.lang.String">            <column name="TITLE" />        </property>               <property name="author" type="java.lang.String">            <column name="AUTHOR" />        </property>               <property name="datetime" type="java.sql.Date">            <column name="DATETIME" />        </property>            </class></hibernate-mapping>

HibernateTest.java

import static org.junit.Assert.*;import java.sql.Date;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.boot.registry.StandardServiceRegistryBuilder;import org.hibernate.cfg.Configuration;import org.hibernate.service.ServiceRegistry;import org.junit.Test;public class HibernateTest {@Testpublic void test() {SessionFactory sessionFactory;  Session session;  Transaction transaction;//创建 Configuration 对象:对应 hibernate 的基本配置信息和 对象关系映射信息Configuration configuration = new Configuration().configure();//调用Configuration的buildSessionFactory()方法返回一个SessionFactory对象 sessionFactory = configuration.buildSessionFactory();  //从SessionFactory 中获取 Session 对象session = sessionFactory.openSession();  //开启事务transaction = session.beginTransaction();//执行保存操作News news = new News("C#","C++",new Date(new java.util.Date().getTime()));session.save(news);//提交事务transaction.commit();//关闭 Sessionsession.close();//关闭 SessionFactorysessionFactory.close();}}

最后感谢这两位朋友,看了他们的文章和网上各种论坛里的评论我才茅塞顿开

http://blog.csdn.net/bakbeom/article/details/77850909
http://blog.csdn.net/xinteng2012/article/details/38709653

原创粉丝点击