首页 > 代码库 > 【笔记——hibernate】关于Hibernate 4.3.5的初步认识

【笔记——hibernate】关于Hibernate 4.3.5的初步认识

连接数据库的一个框架,Orm框架的一种。

一、下载:http://hibernate.org/

二、配置:

1、导入必须的包

hibernate-release-4.3.5.Final\lib\required(必须的jar)

 

如果需要时用annotataion的话,导入:

hibernate-release-4.3.5.Final\lib\jpa(jap相关的jar)

hibernate-release-4.3.5.Final\lib\jpa-metamodel-generator(jpa生成器)

 

javaWeb放到WebContent\WEB-INF\lib目录。

javaSe放到任意文件夹,然后导入构建路径。

         2、配置hibernate.cfg.xml

                   放到src的根目录,基本内容如下

                  

                  <?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-configuration PUBLIC

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

           <session-factory>

            <!-- JDBC连接设置 -->

            <property name="connection.driver_class">com.mysql.jdbc.Driver</property>

            <property name="connection.url">jdbc:mysql://localhost/dinnersystem</property>

            <property name="connection.username">root</property>

            <property name="connection.password">303269789</property>

            <!-- 连接池配置,使用c3p0连接池 -->

            <property name="hibernate.c3p0.max_size">20</property>

            <property name="hibernate.c3p0.min_size">1</property>

            <property name="hibernate.c3p0.timeout">1800</property>

           <property name="hibernate.c3p0.max_statements">50</property>

            <property name="hibernate.c3p0.idle_test_period">3000</property>

            <!-- 数据库语言 -->

            <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

            <!-- sql设置 -->

            <property name="show_sql">true</property>

            <property name="format_sql">true</property>

            <!-- 持久类设置所有需要持久的类要在这里标明,以下是针对annotation注释的类 -->

            <mapping class="com.kirning.android.entity.Test" />

            </session-factory>

</hibernate-configuration>

 

 

                   3、配置持久类

 

只存在属性和getter/setter方法的类,其中需要在类名上加Annatation标示@Entity表示这是一个持久类。以及在id上添加@Entity,标示这是一个id对应数据库中的关键字,每一个持久类都必须在hibernate.cfg.xml中进行备案,否则抛出异常,无法使用。

@Entity

public class Test {

   

           private int id;

           private String name;

           private String pass;

   

           @Id

           public int getId() {

               return id;

           }

           public void setId(int id) {

               this.id = id;

           }

           public String getName() {

              return name;

           }

           public void setName(String name) {

              this.name = name;

           }

           public String getPass() {

               return pass;

           }

           public void setPass(String pass) {

              this.pass = pass;

           }

}

 

4、如需使用log4j,则下载

apache-log4j-1.2.17         http://pan.baidu.com/share/link?shareid=121565833&uk=2047106924

slf4j-1.7.7                            http://pan.baidu.com/share/link?shareid=123250651&uk=2047106924

apache-log4j-1.2.17/log4j-1.2.17.jar

slf4j-1.7.7/slf4j-log4j12-1.7.7.jar

进入hibernate-release-4.3.5.Final\project\etc把

log4j.properties放到src根目录即可。

三、使用

         1、获取Session

public class HibernateUtil {

 

    private static final SessionFactory sessionFactory = buildSessionFactory();

 

    private static SessionFactory buildSessionFactory() {

       try {

 

           // 载入设置

           Configuration configuration = new Configuration().configure();

           // 创建serviceRegistry

           ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()

                  .applySettings(configuration.getProperties()).build();

           // 获取sessionFactory

           SessionFactory sessionFactory = configuration

                  .buildSessionFactory(serviceRegistry);

           return sessionFactory;

       } catch (Throwable ex) {

           System.err.println("Initial SessionFactory creation failed." + ex);

           throw new ExceptionInInitializerError(ex);

       }

    }

 

    public static SessionFactory getSessionFactory() {

       return sessionFactory;

    }

 

}

 

                   可建立一个这样的工具类,方便获取Session 这是根据4.3.5官方文档中的事例以及网上的查询得来的结果,不知道为什么官方的用不了,有错误。

         Session里封装着hibernate对数据库访问的方法,所有必需要获得Session。

         1、存储:

                   首先,需要实例化一个持久类。并使用Setter方法把数据放进去。然后调用session的save方法。

e.g:

         public class TestPost {

   

    public void test(){

       Test test = new Test();

       test.setName("test");

       test.setPass("test");

      

       //获得Session

       Session se = HibernateUtil.getSessionFactory().openSession();

       //开始事务处理

       se.beginTransaction();

       //保存到数据库

       se.save(test);

       //提交事务

       se.getTransaction().commit();

    }

}

    2、查询:

       a)、根据关键字查询:

           public class TestPost {

   

    public void test(){ 

      

       //获得Session

       Session se = HibernateUtil.getSessionFactory().openSession();

       //开始事务处理

       se.beginTransaction();

       //0是id,hibernate会根据id把数据拿出来并填充到Test类的各个属性返回一个Object对象,强转即可。

       Test test = (Test)se.get(Test.class, 0);

       //提交事务

       se.getTransaction().commit();

        }

}

    b)、根据关键字查询

       public class TestPost {

   

        public void test(){ 

      

       //获得Session

       Session se = HibernateUtil.getSessionFactory().openSession();     

       //关键字

       String key = "tom";

       //开始事务处理

       se.beginTransaction();

       //创建Criteria对象    

       Criteria cr = se.createCriteria(Test.class);

       //添加条件

       cr.add(Restrictions.eq("name", key));

       //返回结果集

       List<Test> list = cr.list();

       //提交事务

       se.getTransaction().commit();

        }

}

    c)获取前10条数据

       public class TestPost {

   

    public void test(){ 

      

       //获得Session

       Session se = HibernateUtil.getSessionFactory().openSession();     

       //开始事务处理

       se.beginTransaction();

       //创建Criteria对象    

       Criteria cr = se.createCriteria(Test.class);

       //这里使用了HQL语句

       Query query = se.createQuery("from MenuTable order by id");

       query.setFirstResult(0);

       query.setMaxResults(10);

       //返回结果集

       List<Test> list = cr.list();

       //提交事务

       se.getTransaction().commit();

      

 

        }

}

 

    3、修改数据

       这个的话……先查询出来,在保存进去就好(*^__^*) !