Hibernate学习------01

前言

今晚看了一些Hinernate的入门视频,顺便照着敲了一边入门程序,其中遇到了一些问题,便记录在此,欢迎借鉴学习或给予指教

以下配置demo以hibernate-5.2.12.Final版本为例

如需下载此版本,下载链接在此 点击打开链接


一.基本配置

1.导入必要jar文件

也就是hibernate中的hibernate-release-5.2.12.Final/lib/required下的所有jar包



2.编写Hibernate配置文件(hibernate.cfg.xml)

使用MyEclipse新建一个xml(Basic Templates) 文件,点击next选择下图这个DTD ,以便代码提示


配置文件(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>
	<!-- 配置datasource 连接信息-->
	<property name="connection.driver_class">
		com.mysql.jdbc.Driver
	</property>
	<property name="connection.url">
		jdbc:mysql://localhost:3306/study?useUnicode=true&characterEncoding=utf-8
	</property>
	<property name="connection.username">root</property>
	<property name="connection.password">1234</property>
    <!--设置方言-->
   <property name="hibernate.dialect">
   		org.hibernate.dialect.MySQL5InnoDBDialect
   </property>

	<!-- 根据映射关系自动生成数据表 -->
	<property name="hbm2ddl.auto">create</property>
	<!-- 在控制台显示SQL -->
	<property name="show_sql">true</property>
	<property name="format_sql">true</property>

	<!-- 指定映射文件路径 -->
	<mapping resource="day01/user.hbm.xml" />
</session-factory>
</hibernate-configuration>

这里有几点需要注意的:

上面代码 设置方言处 ,因为:

我第一次运行报错,错误信息如下

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 
You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version for the right syntax to use near 'type=InnoDB' at line 7

结果查询最终得知
(1)某些版本的mysql不支持type写法。
(2)实际上,在MySQL5.0以前,type=InnoDB是有效的SQL语句,MySQL5.0之后,type=InnoDB不再有效了。

解决方法即是:
修改hibernate.cfg.xml中的dialect属性,将

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

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

3.编写Hibernate映射文件(user.hbm.xml)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="day01.entity">
	<!-- 配置映射关系,java类与表进行映射 -->
	<class name="User" table="t_user">
		<!-- 将列和属性进行映射 -->
		<!-- id用来配置主键列,name指类中的属性,column指表中的列 -->
		<id name="id" column="id">
			<!-- 指定主键生成策略 -->
			<generator class="native"></generator>
		</id>
		<property name="username" column="name"></property>
		<property name="passwd" column="passwd"></property>
		<property name="age" column="age"></property>
	</class>
</hibernate-mapping>

4.编写测试类


编写测试了时,有需要注意的地方,我之前遇到一个错误,如下


org.hibernate.MappingException: Unknown entity

刚开始以为时映射文件配置有问题,然后,最终发现时hibernate版本问题,如果你使用的是5.X版本的,则java代码应该如我下面

所写的那样配置注册sessionFactory


import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.service.ServiceRegistry;
import org.junit.Before;
import org.junit.Test;

import day01.entity.User;

public class Test01_HelloWorld {
	  private SessionFactory sessionFactory;
	  private Session session;
	  private Transaction transaction;

	 @Before
	    public void init() {
	        //创建服务注册对象
	        ServiceRegistry serviceRegistry = 
	        		new StandardServiceRegistryBuilder().configure().build();
	        //创建会话工厂对象
	        sessionFactory = 
	        		new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();
	        //会话对象
	        session = sessionFactory.openSession();
	        //开启事务
	        transaction = session.beginTransaction();
	    }

	    @Test
	    public void testSaveStudents() {
	        try{
	        	session.save(new User(null, "Allan", "123456", 12));
		        transaction.commit();
	        }catch(Exception e){
	        	transaction.rollback();
	        }finally{
	        	session.close();
		        sessionFactory.close();
	        }
	    }
}
这样就可以完美运行这个helloworld小demo了

猜你喜欢

转载自blog.csdn.net/Allan_Bst/article/details/79059268
今日推荐