Hibernate 4 初試

第一次使用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查詢,不過還沒弄明白怎麼用。

相關文章
相關標籤/搜索