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

  • 相关阅读:
    Swift学习-Property
    Swift学习-protocol
    Swift学习-Class
    Swift学习-Enumerate、Structure
    iOS“此时无法下载应用”解决办法
    iTunes Connect用户职能与权限
    TestFlight Beta Testing 开发指南中英对照
    梳理一下KVC
    mac下使用github 上传代码(转)
    运用Runtime全局修改UILabel的默认字体
  • 原文地址:https://www.cnblogs.com/Ayanami-Blob/p/4305065.html
Copyright © 2020-2023  润新知