今天抽个时间写个关于用Eclipse none和hibernate创建一个hibernate的小例子
一、新建一个Java项目
二、手动添加src和test文件夹,然后java build path ,手动添加hibernate和mysql的相关jar包,并引入junit4的相关支持
此处没有添加lib目录
三、此时的相关目录结构为
注意 此处我引用的是hibernate5.1.0,
四、创建相应的目录,此处不做深处介绍,目录为下:
五、相应的代码:
Stu.java
public class Stu {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Stu(int id, String name) {
super();
this.id = id;
this.name = name;
}
public Stu() {
super();
}
@Override
public String toString() {
return "Stu [id=" + id + ", name=" + name + "]";
}
}
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>
<property name="connection.username">root</property>
<property name="connection.password">xq1996621</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql:///testhibernate1?useUnicode=true&characterEncoding=UTF-8</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="hbm2ddl.auto">create</property>
<mapping resource="Stu.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Stu.hbm.xml
<?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 Oct 24, 2016 3:56:46 PM by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="Stu" table="STU">
<id name="id" type="int">
<column name="ID" />
<generator class="assigned" />
</id>
<property name="name" type="java.lang.String">
<column name="NAME" />
</property>
</class>
</hibernate-mapping>
stutest1.java
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/*
*
* 在使用hibernate5版本时 出现logging包重复的现象 导致测试出现错误 删除jboss-logging-3.1.0.GA即可正常运行
*
*
*
*/
public class stutest1 {
@Test
public void save(){
SessionFactory seFactory = null;
final StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();
try{
seFactory = new MetadataSources( registry ).buildMetadata()
.buildSessionFactory();
} catch(Exception e){
StandardServiceRegistryBuilder.destroy( registry );
}
//2.创建一个Session对象
Session session = seFactory.openSession();
//3.开启事务
session.beginTransaction();
//4.执行操作
session.save(new Stu(1,"ssss"));
/*
//!!!!写hql语句,from 类名(区分大小写)
String hql = "from UserInfo";
@SuppressWarnings("unchecked")
List<UserInfo> list = session.createQuery(hql).list();
for(UserInfo u : list){
System.out.println(u);
}
*/
//5.提交事务
session.getTransaction().commit();
//6.关闭Session
session.close();
//7.关闭SessionFactory
seFactory.close();
}
}
我在运行中也出现了错误,首先sessionFactory在hibernate5后就改了,要用上面的方法才能正确的获得sessionFactory
其次,在直接引入hibernate5的required包的的全部jar时,会出现jar包重复错误,此时按照上面的注释方法可以解决