Hibernate入门

来源:互联网 发布:江南大学北美学院 知乎 编辑:程序博客网 时间:2024/06/16 16:33

1、在pom中引入hibernate和h2内存数据库

<dependency>  <groupId>com.h2database</groupId>  <artifactId>h2</artifactId>  <version>1.3.176</version></dependency><dependency>  <groupId>org.hibernate</groupId>  <artifactId>hibernate-core</artifactId>  <version>4.3.1.Final</version></dependency>

2、目录结构及代码

hibernate.cfg.xml放在代码之外,和最终的class目录平级。

user.hbm.xml放在包内,和class文件同包。


<!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">org.h2.Driver</property><property name="hibernate.connection.url">jdbc:h2:./h2db/sxaz42b4</property><property name="hibernate.connection.username">sa</property><property name="hibernate.connection.password">sa</property><property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property><property name="hibernate.hbm2ddl.auto">update</property><property name="hibernate.show_sql">true</property><mapping resource="gaofeng/db/User.hbm.xml" /></session-factory></hibernate-configuration>
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC       "-//Hibernate/Hibernate Mapping DTD 3.0//EN"      "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping>    <class name="gaofeng.db.User" table="User">        <id name="Id" column="Id"> <generator class="increment" />  </id>        <property name="name" column="name" />    </class></hibernate-mapping>

package gaofeng.db;public class User {public int getId() {return Id;}public void setId(int id) {Id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}private int Id;private String name;}

package gaofeng.db;import java.util.List;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.boot.registry.StandardServiceRegistryBuilder;import org.hibernate.cfg.Configuration;import org.hibernate.service.ServiceRegistry;public class UserDao {public Session session;public List<User> getAll(){@SuppressWarnings("unchecked")List<User> users = session.createQuery("from User").list();for (User user : users) {System.out.println(user.getId() + ":" + user.getName());}return users;}public List<User> getOnePage(){@SuppressWarnings("unchecked")List<User> users = session.createQuery("from User").setFirstResult(2).setMaxResults(2).list();for (User user : users) {System.out.println(user.getId() + ":" + user.getName());}return users;}public User load(int id){try{return (User) session.load(User.class, id);}catch(Exception e){e.printStackTrace();}return null;}public void add(User user){Transaction transaction = session.beginTransaction();try{session.save(user);transaction.commit();}catch(Exception e){transaction.rollback();}}public void del(User user){Transaction transaction = session.beginTransaction();try{session.delete(user);;transaction.commit();}catch(Exception e){transaction.rollback();}}public void update(User user){Transaction transaction = session.beginTransaction();try{session.update(user);transaction.commit();}catch(Exception e){transaction.rollback();}}public void init(){        Configuration cfg=new Configuration().configure();        StandardServiceRegistryBuilder ssrb=new StandardServiceRegistryBuilder().applySettings(cfg.getProperties());        ServiceRegistry service= ssrb.build();        SessionFactory factory=cfg.buildSessionFactory(service);        session= factory.openSession();        }public void closeSession() {if(session!=null) session.close();}}

package gaofeng.db;import org.hibernate.Transaction;import org.junit.After;import org.junit.Before;import org.junit.Test;public class UserDaoTest {UserDao dao = new UserDao();@Beforepublic void setUp() throws Exception {dao.init();}@Afterpublic void tearDown() throws Exception {dao.getAll();dao.closeSession();}@Testpublic void test() {User user = new User();user.setId(2);user.setName("gaofeng"+System.currentTimeMillis());Transaction trx =  dao.session.beginTransaction();dao.session.saveOrUpdate(user);trx.commit();}@Testpublic void test2() {User user = dao.load(2);user.setName("gaofeng"+System.currentTimeMillis());Transaction trx =  dao.session.beginTransaction();dao.session.saveOrUpdate(user);dao.session.clear();trx.commit();}@Testpublic void test3() {Transaction trx =  dao.session.beginTransaction();dao.session.createSQLQuery("update User set name='gaofeng' ").executeUpdate();trx.commit();}}

4、会话工厂是一个重量级对象,线程安全的,里面有大量的二级缓存,原则上一个数据库只应该有一个会话工厂。

      会话时一个轻量级对象,非线程安全,里面有缓存信息,有会话池管理,可以随用随创建。
5、对象有瞬时态,离线态,持久化态。 持久化态时,不管中间做了多少次操作,只是最终关闭会话时,与持久化池中的内容比较,不相同,才发update语句。

update、save、deltete、需要提交事务。

load默认是延迟加载的,get不是延迟加载的。

由于load的记录可能不存在,所以入库时,尽量用saveOrUpdate。

clear可以清除当前会话中的操作。

0 0
原创粉丝点击