Hibernate 4 初试

第一次使用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查询,不过还没弄明白怎么用。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。