標籤:
第一次使用Hibernate,基本還算順利的實現了增加和尋找。
版本:Hibernate4.3.8
開發環境:jdk1.7 Intellij Idea14
包結構非常簡單
1、建立資料庫
很簡單,test資料庫,包含表user_info,列:userid,username,password。
2、寫設定檔
Hibernate有個設定檔*.cfg.xml,當然起其他的名字其實也一樣能用,可能在自動擷取設定檔的時候會出錯。
HibernateConfig.cfg.xml如下:
<?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"><!-- Generated by MyEclipse Hibernate Tools. --><hibernate-configuration> <session-factory> <property name="connection.driver_class"> org.gjt.mm.mysql.Driver </property> <property name="connection.url"> jdbc:mysql://localhost:3306/test </property> <property name="connection.username">root</property> <property name="connection.password">123456</property> <property name="dialect"> org.hibernate.dialect.MySQLDialect </property> <property name="show_sql">true</property> <mapping resource="cfg/BUser.hbm.xml" /> </session-factory></hibernate-configuration>
這設定檔比較容易理解,主要是設定資料庫串連的資訊,看一眼就明白了。cfg/BUser.hbm.xml是實體類的對應檔,內容如下:
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Mapping file autogenerated by MyEclipse - Hibernate Tools--><hibernate-mapping> <class name="bean.BUser" table="user_info"> <id name="userid" type="java.lang.Integer"> <column name="userid" /> <generator class="increment" /> </id> <property name="username" type="java.lang.String"> <column name="username" length="30" /> </property> <property name="password" type="java.lang.String"> <column name="password" length="30" /> </property> </class></hibernate-mapping>
說起來相當是又寫了一遍實體類的意思,內容更易於理解,<generator class="increment" />這一行是id自增。
寫過設定檔,下一步是建立Session,Session可以算是Hibernate的入口,4.0之後建立session的方法略有不同,代碼如下:
try { Configuration config = new Configuration().configure("/cfg/HibernateConfig.cfg.xml"); ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build(); //Hibernate4.0新特性:使用ServiceRegistry建立sessionFactory sessionFactory = config.buildSessionFactory(sr); } catch(Throwable e) { throw new ExceptionInInitializerError(e); } public Session getSession(){ Session s = (Session)session.get(); if(s==null||!s.isOpen()){ s = sessionFactory.openSession(); session.set(s); } return s; }
主要是多了個ServiceRegistry,在建立的時候記得一定要調用applySettings這個方法再build(),否則會報錯。
簡單的添加方法:
public void add(Map<String,Object> info){ Session s = getSession(); Transaction transaction = s.beginTransaction(); BUser user = new BUser(); user.setPassword((String) info.get("password")); user.setUsername((String) info.get("username")); s.save(user); transaction.commit(); s.close(); }
其實如果圖意省事,簡單的寫個BUser傳進來也是一樣的,代碼還能更簡潔。
下面是更簡單的查詢方法:
public void query(){ Session s = getSession(); Criteria criteria = s.createCriteria(BUser.class); criteria.add(Restrictions.eq("username","uname")); System.out.println(criteria.list()); }
這是使用api查詢,還可以使用HQL和SQL查詢,不過還沒弄明白怎麼用。
Hibernate 4 初試