前言
今晚看了一些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)代码如下
扫描二维码关注公众号,回复:
11518442 查看本文章
![](/qrcode.jpg)
<?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了