hibernate_5.2.9与mysql_5.7.17碰到的一系列错误。。。
写在前边的话:看视频,看书,关于hibernate与mysql都是一些旧版本的资料。现在去找那些hibernate与mysql又不是那么容易,于是就按照旧版本的方法处理新版本的问题,出了一大堆乱子!问度娘,问谷狗终于整好了,简单介绍一下自己的心路历程吧。
IDE版本:spring-tool-suite-3.8.2.RELEASE-e4.6.1-win32-x86_64;
hibernate版本:hibernate-release-5.2.9.Final;
mysql版本:mysql-5.7.17-winx64;
1.首先建一个简单的Java项目,主要为了学习hibernate,应该不用建动态web项目吧,博主风骚的给项目取了一个名字,叫做hibernate,哈哈;
2.在hibernate中新建一个lib文件夹,用来放置需要的jar包;
3.把\hibernate-release-5.2.9.Final\lib\required包中的10个可爱的jar包复制到lib文件夹下,还没完事呢。。。再找到我收藏许久的mysql-connector-java-5.1.40-bin.jar包,同样也拷进lib文件夹下,该包已经和mysql_5.7.17发生了多次基情的碰撞,肯定没问题;
4.选中这11个包,右键bulid path-add to build path加到开发环境里;
5.伦家要开始配置hibernate.cfg.xml了,在这里,出现了第一个不兼容的问题----mysql方言问题;
<?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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.password">123456</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<property name="hibernate.hbm2ddl.auto">create</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.show_sql">true</property>
<mapping resource="com/model/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
就是用蓝色标出的那一行(红色那一行待会儿再说)!一定要注意,如果是5.2以后版本的mysql,方言要写成org.hibernate.dialect.MySQL5InnoDBDialect而不是org.hibernate.dialect.MySQLInnoDBDialect;为啥嘞,看一下控制台显示的sql语句就知道了,mysql背锅。。。
6.建立一个包---com.model,包中建立User类,代码如下:
package com.model;
public class User {
private int id;
private String username;
private String password;
private String nickname;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
}
7.在com.model包中建立Users.hbm.xml,要与user类发生摩擦哦!
<?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-4-4 15:59:01 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="com.model.User" table="USER">
<id name="id" type="int">
<column name="ID" />
<generator class="native" />
</id>
<property name="username" type="java.lang.String">
<column name="USERNAME" />
</property>
<property name="password" type="java.lang.String">
<column name="PASSWORD" />
</property>
<property name="nickname" type="java.lang.String">
<column name="NICKNAME" />
</property>
</class>
</hibernate-mapping>
8.在---com.test包中编写测试类,测试一下hibernate与mysql是否发生(性)关系,哈哈!
package com.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
import com.model.User;
public class TestUser {
@Test
public void test01() {
Configuration configuration = new Configuration().configure();
SessionFactory sessionFactorn = configuration.buildSessionFactory();
Session session = sessionFactorn.getCurrentSession();
//开启事务
session.beginTransaction();
//实例化用户
User u = new User();
u.setUsername("hls");
u.setNickname("韩菱纱");
u.setPassword("123");
//保存数据
session.save(u);
//提交事务;
session.getTransaction().commit();
}
}
划重点了!!!红色背景部分为hibernate——5.X版本生成session的方式,而4.X版本生成session的方式需要ServiceRegistry。还记得上边的红字么,当5.X以上版本需要在配置文件中添加。通过这种方式生成的session在transaction.commit();后会自动关闭!
9.运行此测试类,发现可以用了!伦家是萌新,大神给点指导意见,萌新可以按照我的方法一试!么么~~~
补图:
文件结构图---

运行结果图---

