引言:使用连接数据库来创建实体类,很快就学会了,但是对于怎么用hibernate创建数据表确实用了两天的时间,记录下这次学习的过程。
1、在一开始怎么都搜不到资料,后来才明白,在搜的时候要加正向的,用数据库创建实体类是反向,用实体类创建数据表是正向的,这样搜就可以了
2、在一开始的时候,总是执着于IDE和插件的问题,对于所遇到的问题没有进行深入的研究,导致浪费掉了大量的时间(最后还是没搞定)
3、总是执着于教程上的操作方式,到最后才发现,在新版本里的写法是不一样的,坑之又坑
4、浪费时间最长的是如何使用hibernate用实体类生成hbm.xml文件,在教程里看老师用的挺溜的,因为电脑的原因,ide、插件安装失败,所以最后是只能是手写了
1、创建hibernate项目:参考资料:https://blog.csdn.net/fighting_sxw/article/details/80566295(友情提示:注意测试时新版本与旧版本的书写方式)
2、在使用hibernate创建数据表需要四个主要文件:实体类,实体类对应的映射文件(后缀名为hbm.xml结尾),hibernate的配置文件(以cfg.xml结尾),以及测试类
3、对应的主要内容如下:
实体类:
package com.hibernate.entity;
import java.util.Date;
public class Students {
private int sid;
private String sname;
private String gender;
private Date birthday;
private String address;
public Students(){
}
public Students(int sid, String sname, String gender, Date birthday, String address) {
this.sid = sid;
this.sname = sname;
this.gender = gender;
this.birthday = birthday;
this.address = address;
}
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "Students{" +
"sid=" + sid +
", sname='" + sname + '\'' +
", gender='" + gender + '\'' +
", birthday=" + birthday +
", address='" + address + '\'' +
'}';
}
}
实体类对应的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>
<class name="com.hibernate.entity.Students" table="Students">
<id name="sid" type="int">
<column name="SID"/>
<generator class="assigned"/>
</id>
<property name="sname" type="java.lang.String">
<column name="SNAME"/>
</property>
<property name="gender" type="java.lang.String">
<column name="GENDER"/>
</property>
<property name="birthday" type="java.util.Date">
<column name="BIRTHDAY"/>
</property>
<property name="address" type="java.lang.String">
<column name="ADDRESS"/>
</property>
</class>
</hibernate-mapping>
hibernate的cfg文件
<?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.url">jdbc:mysql://localhost:3306/rushi</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.username">root</property>
<property name="connection.password">Sys935269</property>
<!-- DB schema will be updated if needed -->
<!-- <property name="hbm2ddl.auto">update</property> -->
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<!--自动生成-->
<property name="hbm2ddl.auto">create</property>
<!--数据库方言-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL55Dialect</property>
<!--加载资源-->
<mapping resource="com/hibernate/entity/Students.hbm.xml"/>
</session-factory>
</hibernate-configuration>
4、这里对测试类重点介绍下,测试的时候新版本与旧版本可能会有所不同,按照教程可能永远都找不出问题所在(参考资料:https://blog.csdn.net/bingjianit/article/details/68954250)
package com.hibernate.entity;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.junit.After;
import org.junit.Before;
import java.util.Date;
public class Test {
private SessionFactory sessionFactory;
private Session session;
private Transaction transaction;
@Before
public void init() {
//创建配置对象
//Configuration configure = new Configuration().configure();
//创建服务注册对象
//ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
以上为旧版本的写法,若是不注意,就会报org.hibernate.MappingException: Unknown entity: com.hibernate.entity.Student这个错误
StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();
//创建会话工厂对象
SessionFactory sessionFactory = new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();
//会话对象
session = sessionFactory.openSession();
//开启事务
transaction = session.beginTransaction();
}
@After
public void destory() {
//提交事务
transaction.commit();
//关闭会话
session.close();
//关闭会话工厂
sessionFactory.close();
}
@org.junit.Test
public void TestSaveStudents() {
//生成学生对象
Students s = new Students(2, "张三丰", "南", new Date(), "武当山");
session.save(s);
}
}
程序运行结束,可能提示运行失败,但是数据已经存在表格里了,不确定的可以去数据里查看下
格言:从不熟悉到熟悉是一个过程,无需恐惧,