搭建一个单纯学习hibernate的项目
2015-10-24 23:51
351 查看
<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更好
相关文章推荐
- 使用IronPython给.Net程序
- 河北省民间组织管理系统项目分析
- 最近看到一个很不错的特效网站
- C语言-推箱子游戏代码
- bootstrap经验http://v3.bootcss.com/
- Single Round Match 671 Round 1 - Division II, Level Three(状压DP)(略难)
- android robolectric 单元测试的简单使用
- OpenS-CAD, a simple 2D CAD application
- 安卓 OnLongClickListener接口简介 以及案例
- Spark修炼之道(高级篇)——Spark源码阅读:第四节 Stage划分
- C语言传参不支持引用
- 关于招聘的面试和笔试
- Apache的ab工具
- 2015第43周六再看长征
- 《大道至简》第四章读后感
- 作为前端这些你不能不知道--浏览器基础篇
- Elasticsearch集群入门2
- UVa 1347 例题9-3 旅行 (双调欧几里得旅行商问题)
- ios CAEmitterCells学习文档
- IOS--UIAlertViewDelegate对对话框的事件处理方法