zoukankan      html  css  js  c++  java
  • 对象生成Hibernate框架简述

    每日一贴,今天的内容关键字为对象生成

        Hibernate的核心件组
    在基于MVC计设模式的JAVA WEB应用中,Hibernate可以作为模型层/据数访问层。它通过配置文件(hibernate.propertieshibernate.cfg.xml)和映射文件(***.hbm.xml)JAVA对象或PO(Persistent Object,久持化对象)映射到据数库中的据数库,然后通过操纵PO,对据数表中的据数停止增,删,改,查等操纵。
    除配置文件,映射文件和久持化类外,Hibernate的核心件组括包以下几部份:
    a)
    Configuration:用来读取Hibernate配置文件,并生成SessionFactory对象。
    b)
    SessionFactory接口:发生Session实例厂工。
    c)
    Session接口:用来操纵PO。它有get(),load(),save(),update()delete()等方法用来对PO停止载加,保存,更新及删除等操纵。它是Hibernate的核心接口。
    d)
    Query接口:用来对PO停止询查操。它可以从SessioncreateQuery()方法生成。
    e)
    Transaction接口:用来管理Hibernate事务,它要主方法有commit()rollback(),可以从SessionbeginTrancation()方法生成。

        Persistent Object
    久持化对象可所以通普的Javabeans,一惟特别的是它们与(仅一个)Session相关联。JavaBeansHibernate中存在三种态状:
    1.
    时临态状(transient):当一个JavaBean对象在存内中伶仃存在,不与据数库中的据数有任何关联关系时,那么这个JavaBeans对象就称为时临对象(Transient Object)
    2.
    久持化态状(persistent):当一个JavaBean对象与一个Session相关联时,就成变久持化对象(Persistent Object)
    3.
    脱管态状(detached):在这个Session被关闭的同时,这个对象也会离开久持化态状,就成变脱管态状(Detached Object),可以被应用程序的任何层由自用使,例如可以做与表示层打交道的据数舆对象(Data Transfer Object)

        Hibernate的行运进程
    Hibernate的行运进程如下:
    A:
    应用程序先调用Configration类,该类读取Hibernate的配置文件及映射文件中的信息,并用这些信息生成一个SessionFactpry对象。
    B:
    然后从SessionFactory对象生成一个Session对象,并用Session对象生成Transaction对象;可通过Session对象的get(),load(),save(),update(),delete()saveOrUpdate()等方法对PO停止载加,保存,更新,删除等操纵;在询查的情况下,可通过Session对象生成一个Query对象,然后利用Query对象行执询查操纵;如果没有异常,Transaction对象将提交这些操纵结果到据数库中。

        Hibernate简略示例:
    据数:

        create table T_register
    (
        id    int primary key,
        userName varchar(30),
        userPwd varchar(30),
        sex varchar(10),
        age int
    )

        
    视图层:注册面页register.jsp

        <%@ page language="java" contentType="text/html; charset=GBK"
        pageEncoding="GBK"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=GBK">
    <title>Insert title here</title>
    </head>
    <body>

    <form action="servlet/RegisterServlet" method="POST">
        用户名:<input type="text" name="userName" /><BR>
          码:<input type="text" name="userPwd" /><BR>
          别:<input type="text" name="sex" /><BR>
          龄:<input type="text" name="age" /><BR>
        <input type="submit" value="save" />
    </form>
    </body>
    </html>

        
    计设久持化类TRegister.java

        
    package hibernate.PO;
    /**
     * 久持化类
     */

    public class TRegister  implements java.io.Serializable {


        // Fields    

         private Integer id;
         private String userName;
         private String userPwd;
         private String sex;
         private Integer age;


        // Constructors

        /** default constructor */
        public TRegister() {
        }

        /** minimal constructor */
        public TRegister(Integer id) {
            this.id = id;
        }
        
        /** full constructor */
        public TRegister(Integer id, String userName, String userPwd, String sex, Integer age) {
            this.id = id;
            this.userName = userName;
            this.userPwd = userPwd;
            this.sex = sex;
            this.age = age;
        }

       
        // Property accessors

        public Integer getId() {
            return this.id;
        }
        
        public void setId(Integer id) {
            this.id = id;
        }

        public String getUserName() {
            return this.userName;
        }
        
        public void setUserName(String userName) {
            this.userName = userName;
        }

        public String getUserPwd() {
            return this.userPwd;
        }
        
        public void setUserPwd(String userPwd) {
            this.userPwd = userPwd;
        }

        public String getSex() {
            return this.sex;
        }
        
        public void setSex(String sex) {
            this.sex = sex;
        }

        public Integer getAge() {
            return this.age;
        }
        
        public void setAge(Integer age) {
            this.age = age;
        }
    }

        计设Hibernate配置文件hibernate.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.username">root</property>
        <property name="connection.url">
            jdbc:mysql://localhost:3306/study
        </property>
        <property name="dialect">
            org.hibernate.dialect.MySQLDialect
        </property>
        <property name="myeclipse.connection.profile">MySQL5.0</property>
        <property name="connection.password">root</property>
        <property name="connection.driver_class">
            org.gjt.mm.mysql.Driver
        </property>
        <property name="show_sql">true</property>
        <mapping resource="hibernate/PO/TRegister.hbm.xml" />

    </session-factory>

    </hibernate-configuration>

        计设映射文件TRegister.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="hibernate.PO.TRegister" table="t_register">
            <id name="id" type="java.lang.Integer">
                <column name="id" />
                <!-- 我在MYSQL中并没有设置该字段递增,但在Hibernate中然依可以设置为递增 -->
                <generator class="increment" />
            </id>
            <property name="userName" type="java.lang.String">
                <column name="userName" length="30" />
            </property>
            <property name="userPwd" type="java.lang.String">
                <column name="userPwd" length="30" />
            </property>
            <property name="sex" type="java.lang.String">
                <column name="sex" length="10" />
            </property>
            <property name="age" type="java.lang.Integer">
                <column name="age" />
            </property>
        </class>
    </hibernate-mapping>

        计设hibernate基础类HibernateUtil.java

        package hibernate;
    /**
     * hibernate 基础类
     * @author fengyan
     * date 2007-01-09 02:32
     */
    import org.hibernate.HibernateException;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;

    public class HibernateUtil {
        
        private static final SessionFactory sessionFactory;
        
        static
        {
            try
            {
                Configuration config = new Configuration().configure("/hibernate/hibernate.cfg.xml");
                sessionFactory = config.buildSessionFactory();
            }
            catch(Throwable e)
            {
                throw new ExceptionInInitializerError(e);
            }
        }
        
        public static final ThreadLocal session = new ThreadLocal();
        
        public static Session currentSession() throws HibernateException
        {
            Session s = (Session)session.get();
            //Open a new Session,if this Thread has none yet
            if(s == null || !s.isOpen())
            {
                s = sessionFactory.openSession();
                session.set(s);
            }
            return s;
        }
        
        public static void closeSession() throws HibernateException
        {
            Session s = (Session)session.get();
            session.set(null);
            if(s != null)
                s.close();
        }

    }

        计设制控类

        package hibernate.servlet;
    /**
     * @author fengyan
     * date  2007-01-09 02:44
     * 计设Hibernate制控类
     */
    import hibernate.HibernateUtil;
    import hibernate.PO.TRegister;

    import java.io.IOException;
    import java.io.PrintWriter;

    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import org.hibernate.HibernateException;
    import org.hibernate.Session;
    import org.hibernate.Transaction;

    public class RegisterServlet extends HttpServlet {

        private static final String CONTENT_TYPE = "text/html;charset=GBK";
        public void init() throws ServletException {
            // Put your code here
        }
        public void destroy() {
            super.destroy(); // Just puts "destroy" string in log
            // Put your code here
        }

        
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {

            response.setContentType(CONTENT_TYPE);
            request.setCharacterEncoding("GBK");
            
            PrintWriter out = response.getWriter();
            
            String userName = request.getParameter("userName");
            String userPwd = request.getParameter("userPwd");
            String sex = request.getParameter("sex");
            int age = Integer.parseInt(request.getParameter("age"));
            
            TRegister rg = new TRegister();
            rg.setAge(age);
            rg.setSex(sex);
            rg.setUserName(userName);
            rg.setUserPwd(userPwd);
            
            Session session = HibernateUtil.currentSession();//生成Session实例
            Transaction tx = session.beginTransaction();
            
            try
            {
                session.save(rg);    //保存久持类对象
                tx.commit();        //提交到据数库
                session.close();
                response.sendRedirect("registerOK.jsp");
            }
            catch(HibernateException e)
            {
                e.printStackTrace();
                tx.rollback();
            }
            
        }

        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request,response);
            
        }



    }

         

        

     

    文章结束给大家分享下程序员的一些笑话语录: 有一天,一个男人穿越森林的时候,听到一个细微的声音叫住他。他低头一看,是一只青蛙。
    “如果你亲我一下,我会变成一个美丽的公主哦。”男人一言不发,把青蛙捡起来,放入口袋。
    “如果你亲我一下,我会变成一个美丽的公主哦。而且,我会告诉我遇到的每一个人,你是多么聪明和勇敢,你是我的英雄。”男人把青蛙拿出来,对着它微微一笑,又把它放回口袋。
    “如果你亲我一下,我会变成一个美丽的公主,然后我愿意成为你的爱人一星期。”男人又把青蛙拿出来,对着它微微一笑,把它放回口袋。
    “如果你亲我一下,我会变成一个美丽的公主,然后我愿意成为你的爱人一年,而且你可以对我做任何事。”再一次,男人把青蛙拿出来,对着它微微一笑,又把它放回口袋。
      最后,青蛙无力地问:“我开出了这么好的条件,为什么你还不肯吻我?”男人说:“我是一个程序员,我可没时间和什么公主鬼混。不过,拥有一个会说话的青蛙,倒是蛮酷的。”

  • 相关阅读:
    积水路面Wet Road Materials 2.3
    门控时钟问题
    饮料机问题
    Codeforces Round #340 (Div. 2) E. XOR and Favorite Number (莫队)
    Educational Codeforces Round 82 (Rated for Div. 2)部分题解
    Educational Codeforces Round 86 (Rated for Div. 2)部分题解
    Grakn Forces 2020部分题解
    2020 年百度之星·程序设计大赛
    POJ Nearest Common Ancestors (RMQ+树上dfs序求LCA)
    算法竞赛进阶指南 聚会 (LCA)
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3067717.html
Copyright © 2011-2022 走看看