zoukankan      html  css  js  c++  java
  • 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查询,不过还没弄明白怎么用。

  • 相关阅读:
    在Salesforce中创建Approval Process
    用C#基于WCF创建TCP的Service供Client端调用
    用 C# 实现一个简单的 Rest Service 供外部调用
    在Salesforce中将 Decimal 数据转换成美元格式
    在Asp.Net MVC中PartialView与EditorFor和DisplayFor的区别
    在Salesforce中对某一个Object添加自定义的Button和Link
    【LeetCode】227. Basic Calculator II
    【LeetCode】226. Invert Binary Tree
    【LeetCode】225. Implement Stack using Queues
    【LeetCode】224. Basic Calculator
  • 原文地址:https://www.cnblogs.com/Ayanami-Blob/p/4305065.html
Copyright © 2011-2022 走看看