前期准备:
官网下载 :hibernate-release-4.3.5.Final 。需要用到其中lib文件夹下-> 【 required文件夹下全部jar包】 和 【optional - > c3p0下全部jar包】
mysql连接包: mysql-connector-java-xxxx-bin.jar <- 我的版本好像有点问题,jar包版本不对,之后会报一个
INFO: HHH000424: Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException但不会影响数据的插入.
每个人的MYSQL版本不一样,挑合适的应该就没问题了,我懒得弄.
日志包: 应该是要的,我没加!但是一样会出log。如果要加,按照马士兵几年前的教程,应该是slf4j的api 和具体的jar包。去官网下。
项目结构如下,和马士兵Hibernate第一课一样。
首先是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>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://127.0.0.1:3306/myhibernate</property>
<property name="connection.username">root</property>
<property name="connection.password">10041004</property>
<!-- Use the c3p0 connection pool provider -->
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.timeout">300</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<!-- <property name="hbm2ddl.auto">update</property> -->
<mapping resource="com/wulv/hibernate/model/Student.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Student类:
package com.wulv.hibernate.model;
public class Student {
private Long id;
private String name;
private int age;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
相应的Student.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.wulv.hibernate.model.Student" table="student">
<id name="id">
<generator class="increment"></generator>
</id>
<property name="name"></property>
<property name="age"></property>
</class>
</hibernate-mapping>
因为4之后配置文件读入SessionFactory生成很啰嗦. 网上找了个HibernateUtil.使用的时候直接getSessionFactory();就行.
代码如下:
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
public class HibernateUtil {
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
Configuration configuration = new Configuration().configure();
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties()).build();
SessionFactory sessionFactory = configuration
.buildSessionFactory(serviceRegistry);
return sessionFactory;
} catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
Main: StudentTest.java
import org.hibernate.Session;
import com.wulv.hibernate.model.Student;
public class StudentTest {
public static void main(String[] args) {
Student s=new Student();
s.setName("s1");
s.setAge(23);
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
session.save(s);
session.getTransaction().commit();
session.close();
HibernateUtil.getSessionFactory().close();
}
}
结果如下:
Mysql