第一次使用Hibernate,基本還算順利的實現了增長和查找。java
版本:Hibernate4.3.8mysql
開發環境:jdk1.7 Intellij Idea14sql
包結構很是簡單數據庫
一、建立數據庫api
很簡單,test數據庫,包含表user_info,列:userid,username,password。session
二、寫配置文件app
Hibernate有個配置文件*.cfg.xml,固然起其餘的名字其實也同樣能用,可能在自動獲取配置文件的時候會出錯。ui
HibernateConfig.cfg.xml以下:url
<?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是實體類的映射文件,內容以下:spa
<?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查詢,不過還沒弄明白怎麼用。