Hibernate的总结

1.hibernate的作用,简化对数据库的编码,使开发人员不必再与复杂的sql语句打交道

 

做项目大部分都需要用JAVA来链接数据库,比如你要做一个会员注册的 页面,那么 获取到用户填写的 基本信后,你要把这些基本信息存入数据库对应的表中,不用hibernate还有mybatis之类的框架,都不用的话就得用JDBC,也就是JAVA自己的,用这个东西你要写很多的代码,比如保存注册信息 你就写inser的SQL语句,用了hibernate,你只需要把存储注册信息的那个类,用一句hibernate的代码就可以保存了,比如save(user).不用写任何SQL语句,它会自动帮你生成SQL并到数据库执行,这就是HIBERNATE的作用

    例子:   对数据库执行插入操作

            一般情况: insert into Student(name) values('zhangsan');

           hibernate中:Student a=new Student();

                                a.setName("zhangsan");

                                HibernateInitialize,getSession().save(a);

 

2.Hibernate通过读取xml配置文件加载数据库的配置信息,该配置文件默认存放在classPath的根目录下面

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">

<hibernate-configuration>

	<session-factory>
		<property name="dialect"><!--指定数据库使用的方言-->
			org.hibernate.dialect.MySQLDialect
		</property>
		<property name="connection.url"><!--连接数据库的URL地址-->
			jdbc:mysql://localhost:3306/db_database16
		</property>
		<property name="connection.username">root</property><!--连接数据库的用户名-->
		<property name="connection.password">admin</property><!--连接数据库的密码-->
		<property name="connection.driver_class"><!--连接数据库用的驱动-->
			com.mysql.jdbc.Driver
		</property>
		<mapping resource="com/wgh/model/TbMessage.hbm.xml" /><!--持久化类映射文件-->

	</session-factory>

</hibernate-configuration>

 

 3. 持久化类:根据数据库中的表生成一个类,这个类的属性与表中的属性一一对应,这种方式叫映射

   表的字段和类属性的映射,表的字段类型和类属性的数据类型的映射   

                   每个属性都有setXXX()和getXXX()方法

 

4.如何实现映射?  通过xml文档来实现

   示例代码如下:

   class中name表示类名,table表示表名,catalog表示数据库的名字(一般不用写,因为配置文件中有)

<?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">

<hibernate-mapping>
    <class name="com.wgh.model.TbMessage" table="tb_message" catalog="db_database16">

    <id name="id" column="id" type="int"> 
    	<generator class="increment"/>	    </id>
        
        <property name="writer" type="java.lang.String">
            <column name="writer" length="45" not-null="true">
                <comment>留言人</comment>
            </column>
        </property>
        <property name="content" type="java.lang.String">
            <column name="content" length="200" not-null="true">
                <comment>留言内容</comment>
            </column>
        </property>
        <property name="sendTime" type="java.sql.Timestamp">
            <column name="sendTime" length="19" not-null="false">
                <comment>留言时间</comment>
            </column>
        </property>
    </class>
</hibernate-mapping>

 

5.Session对象是Hibernate中数据库持久化的核心,它负责Hibernate的所有持久化操作,通过它,可以对数据库实现增删查改操作.但是session对象不是线程安全的,所以要创建一个线程安全的session对象,用到了ThreadLocal开发模式,示例代码如下:

package com.wgh;


import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import com.wgh.model.TbMessage;

public class HibernateUtil {

    static SessionFactory sessionFactory;
    private Session session=null;
    private Transaction tx =null;
    //初始化Hibernate,创建SessionFactory实例,只在该类被加载到内存时执行一次
    static{
        try{
           Configuration config = new Configuration().configure();
            //config.addClass(TbMessage.class);
            sessionFactory = config.buildSessionFactory();
        } catch (Exception e) {
            System.out.println("static块中:"+e.getMessage());
        }
    }
    //开启session
    public void openSession() {
        session = sessionFactory.openSession();
        tx = session.beginTransaction();//开启事务
    }
    //获取留言信息列表
    public List<TbMessage> listMessage(){
	    	openSession();//开启session
	    	 String hql="FROM TbMessage m ORDER BY m.sendTime DESC";	//降序查询全部留言信息
	         List<TbMessage> list=null;
	         try{
	             Query query=session.createQuery(hql);
	             list=(List<TbMessage>)query.list();
	         }catch(Exception e){
	             System.out.println("查询时的错误信息:"+e.getMessage());
	         }finally{
	             session.close();
	         }
	         return list;

    }
    //获取指定留言信息
    public TbMessage getMessage(int id){
    	openSession();//开启session
    	TbMessage tbMessage=(TbMessage)session.get(TbMessage.class, id);//通过get方法查询指定ID的留言信息
    	session.close();	//关闭session
    	return tbMessage;
    }
    
    //修改留言信息
    public String updateMessage(TbMessage message){
    	try{
	    	openSession();//开启session
	    	//在应用update()方法时,应该先调用get()方法加载数据,然后再调用update()方法更新数据
	    	TbMessage m=(TbMessage)session.get(TbMessage.class,message.getId());
	    	m.setWriter(message.getWriter());
	    	m.setContent(message.getContent());
	    	session.update(m);//应用update()方法修改留言信息到数据库
	    	tx.commit();     //提交事务
	    	closeSession();//关闭session
	    	return "留言信息修改成功!";
    	}catch(Exception e){
    		e.printStackTrace();
    		tx.rollback();//事务回滚
    		
    		return "修改留言信息失败!";
    	}
    }
    //关闭session
    public void closeSession() {
        session.close();
    }
    
}

 

  

 

你可能感兴趣的:(Hibernate)