搭建一个单纯学习hibernate的项目详解编程语言

 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
 
    <groupId>crazyjava</groupId> 
    <artifactId>hibernateTest</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 
 
    <name>hibernateTest</name> 
    <url>http://maven.apache.org</url> 
 
    <properties> 
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 
 
    <dependencies> 
        <dependency> 
            <groupId>junit</groupId> 
            <artifactId>junit</artifactId> 
            <version>4.10</version> 
            <scope>test</scope> 
        </dependency> 
       <!-- mysql的依赖包 --> 
        <dependency> 
            <groupId>mysql</groupId> 
            <artifactId>mysql-connector-java</artifactId> 
            <version>5.1.38</version> 
        </dependency> 
        <!-- Hibernate的依赖包 --> 
        <dependency> 
            <groupId>org.hibernate</groupId> 
            <artifactId>hibernate-core</artifactId> 
            <version>4.3.11.Final</version> 
        </dependency> 
        <!-- log4j --> 
        <dependency> 
            <groupId>log4j</groupId> 
            <artifactId>log4j</artifactId> 
            <version>1.2.17</version> 
        </dependency> 
    </dependencies> 
</project>
<?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> 
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
        <property name="hibernate.connection.password">root</property> 
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate</property> 
        <property name="hibernate.connection.username">root</property> 
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property> 
        <property name="hbm2ddl.auto">update</property> 
        <property name="show_sql">true</property>         
        <mapping class="org.crazyit.app.domain.News"/> 
        <mapping class="org.crazyit.app.domain.Person"/> 
        <mapping class="org.crazyit.app.domain.Address"/> 
    </session-factory> 
</hibernate-configuration>

第二个是hbm文件 hibernate.cfg.xml

下面是hibernatutils

package lee; 
 
import org.hibernate.*; 
import org.hibernate.cfg.*; 
import org.hibernate.service.*; 
import org.hibernate.boot.registry.*; 
 
public class HibernateUtil 
{ 
	public static final SessionFactory sessionFactory; 
 
	static 
	{ 
		try 
		{ 
			// 使用默认的hibernate.cfg.xml配置文件创建Configuration实例 
			Configuration cfg = new Configuration() 
				.configure(); 
			// 以Configuration实例来创建SessionFactory实例 
			ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder() 
				.applySettings(cfg.getProperties()).build(); 
			sessionFactory = cfg.buildSessionFactory(serviceRegistry); 
		} 
		catch (Throwable ex) 
		{ 
			System.err.println("Initial SessionFactory creation failed." + ex); 
			throw new ExceptionInInitializerError(ex); 
		} 
	} 
 
	// ThreadLocal可以隔离多个线程的数据共享,因此不再需要对线程同步 
	public static final ThreadLocal<Session> session 
		= new ThreadLocal<Session>(); 
 
	public static Session currentSession() 
		throws HibernateException 
	{ 
		Session s = session.get(); 
		// 如果该线程还没有Session,则创建一个新的Session 
		if (s == null) 
		{ 
			s = sessionFactory.openSession(); 
			// 将获得的Session变量存储在ThreadLocal变量session里 
			session.set(s); 
		} 
		return s; 
	} 
 
	public static void closeSession() 
		throws HibernateException 
	{ 
		Session s = session.get(); 
		if (s != null) 
			s.close(); 
		session.set(null); 
	} 
} 

  

下面是实体类和测试类

package lee; 
 
import org.hibernate.*; 
import org.hibernate.cfg.*; 
import org.hibernate.service.*; 
import org.hibernate.boot.registry.*; 
import org.crazyit.app.domain.*; 
 
 
public class NewsManager 
{ 
    public static void main(String[] args) 
        throws Exception 
    { 
        // 实例化Configuration, 
        Configuration conf = new Configuration() 
        // 不带参数的configure()方法默认加载hibernate.cfg.xml文件, 
        // 如果传入abc.xml作为参数,则不再加载hibernate.cfg.xml,改为加载abc.xml 
            .configure(); 
        ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder() 
            .applySettings(conf.getProperties()).build(); 
        // 以Configuration实例创建SessionFactory实例 
        SessionFactory sf = conf.buildSessionFactory(serviceRegistry); 
        // 创建Session 
        Session sess = sf.openSession(); 
        // 开始事务 
        Transaction tx = sess.beginTransaction(); 
        // 创建消息对象 
        News n = new News(); 
        // 设置消息标题和消息内容 
        n.setTitle("疯狂Java联盟成立了"); 
        n.setContent("疯狂Java联盟成立了," 
            + "网站地址http://www.crazyit.org"); 
        // 保存消息 
        sess.save(n); 
        // 提交事务 
        tx.commit(); 
        // 关闭Session 
        sess.close(); 
        sf.close(); 
    } 
}
package org.crazyit.app.domain; 
 
import javax.persistence.*; 
 
@Entity 
@Table(name="news_inf") 
public class News 
{ 
    // 消息类的标识属性 
    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    private Integer id; 
    // 消息标题 
    private String title; 
    // 消息内容 
    private String content; 
 
    // id的setter和getter方法 
    public void setId(Integer id) 
    { 
        this.id = id; 
    } 
    public Integer getId() 
    { 
        return this.id; 
    } 
 
    // title的setter和getter方法 
    public void setTitle(String title) 
    { 
        this.title = title; 
    } 
    public String getTitle() 
    { 
        return this.title; 
    } 
 
    // content的setter和getter方法 
    public void setContent(String content) 
    { 
        this.content = content; 
    } 
    public String getContent() 
    { 
        return this.content; 
    } 
}

 

package org.crazyit.app.domain; 
 
import lee.HibernateUtil; 
 
import org.hibernate.Session; 
import org.hibernate.Transaction; 
import org.junit.After; 
import org.junit.Before; 
import org.junit.Test; 
 
public class TestQuery { 
    private Session session = null; 
    private Transaction tx = null; 
 
    @Before 
    public void before() { 
        session = HibernateUtil.currentSession(); 
        tx = session.beginTransaction(); 
    } 
    @Test 
    public void test1() { 
        Person p = new Person(); 
        // 设置Person的name为crazyit字符串 
        p.setName("crazyit"); 
        p.setAge(21); 
        // 创建一个瞬态的Address对象 
        Address a = new Address("广州天河"); 
        // 设置Person和Address之间的关联关系 
        // p.setAddress(a); 
        a.setPerson(p); 
        // 持久化Address对象 
        session.persist(a); 
        // 持久化Person对象 
        session.save(p); 
    } 
 
    @After 
    public void after() { 
        tx.commit(); 
        HibernateUtil.closeSession(); 
    } 
}

使用junit更好

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/15405.html

(0)
上一篇 2021年7月19日 17:44
下一篇 2021年7月19日 17:44

相关推荐

发表回复

登录后才能评论