zoukankan      html  css  js  c++  java
  • Hibernate 初识(补充)

     上一篇主要是写了手动写Hibernate , 这一篇加点补充,主要是关于使用Eclipse自动 生成,好了,进入正题:
     Step1:首先我们新建一个WebProject!
     Step2:在src下新建一个包我取名为 fengyan.hibernate,用于存放Hibernate的配置文件
     Step3:现在用MyEclipse添加Hibernate,选中fengyan.hibernate包,单击MyEclipse---->add hibernate capabilities,具体看下图

     

    生成Session工厂类!方便我们取得会话


    Step4:单击“完成”后,我们在接着出现的Hibernate.ctg.xml配置文件的视图添加一个properties属性,如下图

     具体意思是Hibernate 在运行时可以在控制台输出执行的SQL语句,方便 我们监视!
     Step5:我们切换到MyEclipse Database explorer,数据库视图,因为昨天安装了MySQL,所以我配置了MySQL的连接 ,我们在study数据库下新建立一张测试表testTable,
     DDL语句如下:

         create table `study`.`testtable`(
            `id` 
    int not null auto_increment,--ID 自增加 在SqlServer为 Identity(1,1)
           `username` varchar(20),
            
    primary key (`id`)
        );
        
    create unique index `PRIMARYon `study`.`testtable`(`id`);

     Step6:我们选中刚刚新建的表,如下:


    创建映射配置信息文件,以及数据Bean对象 Java Data Object

    指定主键类型

         在 Java src folder 我们选择刚刚新建的包 fengyan.beans,它这时会自动给我们由表生成对应的Beans以及映射信息XML文件

         单击下一步 以及完成即可!我们现在看看在我们的beans包下有什么东东,多了名为Testtable.java类,这个就是MyEclipse为我们自动根据Testtable表生成的Bean.看看里面的内容 
     

    package fengyan.beans;


    public class Testtable  implements java.io.Serializable {
           
    //继承Serializable接口,序列化,可以排序


         
    private Integer id;
         
    private String username;

       
        
    public Testtable() {
        }
        
      
        
    //看见了,很智能的给我们生成了一个参数的构造函数
        
    //因为ID为自动递增的主键,所以这里的参数为username
        public Testtable(String username) {
            
    this.username = username;
        }



        
    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;
        }


    }


    思考:那这个Bean如何与我们的表关联呢,接着在fengyan.beans包下我们还发现生成了Testtable.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>
       
    <!-- Bean的全名      映射的表名   数据库名,因为我们在Hibernate.cfg.xml中配置了数据库,所以这里的catalog要删除 -->    
        
    <class name="fengyan.beans.Testtable" table="testtable" catalog="study">
           
    <!-- 主键用<id>, -->
            
    <id name="id" type="java.lang.Integer">
                
    <column name="id" /><!-- 对应表中的字段名 -->
                
    <generator class="native" /><!-- 主键类型native支持自动增长方式 -->
            
    </id>
            
    <!-- 一般的属性用<property> -->
            
    <property name="username" type="java.lang.String">
                
    <column name="username" length="20" />
            
    </property>
        
    </class>
    </hibernate-mapping>

    Step7:我们新加一个DAOs(dataAccessObject)包,并在其中添加一个TesttableDAO.java,负责对Bean的操作,代码如下:

    package fengyan.DAOS;

    import org.hibernate.Session;

    import fengyan.beans.Testtable;
    import fengyan.hibernate.HibernateSessionFactory;

    public class TesttableDAO {
     
    public void addTesttable(Testtable user)
     
    {
      
    //创建连接
      Session session = HibernateSessionFactory.getSession();
      
    //事物
      Transaction tx = session.beginTransaction();
       
    //操作
       session.save(user);
      
    //提交事物
      tx.commit();
      
    //关闭会话
      session.close();
     }


    }


     Step7:接下来建立一个Servlet~如下图:

    其中代码: 

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

      response.setContentType(
    "text/html");
      request.setCharacterEncoding(
    "GBK");//解决接收中文
      
      
    //接收视图中的参数
      String username = request.getParameter("username");  
      
      
    //声明Bean及操作对象
      Testtable user = new Testtable();
      TesttableDAO userdao 
    = new TesttableDAO();
      
      
    //执行业务
      if(username != null && !username.equals(""))
      
    {
       System.out.print(username);
       user.setUsername(username);
       userdao.addTesttable(user);
      }

      
    else
      
    {
       response.sendRedirect(
    "/Hibernate01b/adduser.jsp");
      }

     }


    Step8:接下来写一个东西来测试下!新建立一个adduser.jsp文件

    <%@ page language="java" pageEncoding="GBK"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      
    <head>
        
    <base href="<%=basePath%>">    
        
    <title>My JSP 'adduser.jsp' starting page</title>    
      
    </head>  
      
    <body>
      
    <%=basePath %><BR>
        
    <form action="<%=basePath %>servlet/AddUser" method="post">
        用户名:
    <input type=text name="username"/>
        
    <input type=submit>
        
        
    </form><br>
      
    </body>
    </html>

     另外将Hibernate及Web.xml文件代码贴下:

    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="fengyan/beans/Testtable.hbm.xml" />
        
    </session-factory>
    </hibernate-configuration>

    web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4" 
        xmlns
    ="http://java.sun.com/xml/ns/j2ee" 
        xmlns:xsi
    ="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation
    ="http://java.sun.com/xml/ns/j2ee 
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    >
     
    <welcome-file-list>
         
    <welcome-file>/adduser.jsp</welcome-file>
     
    </welcome-file-list>
      
    <servlet>
        
    <description>This is the description of my J2EE component</description>
        
    <display-name>This is the display name of my J2EE component</display-name>
        
    <servlet-name>AddUser</servlet-name>
        
    <servlet-class>fengyan.servlet.AddUser</servlet-class>
      
    </servlet>

      
    <servlet-mapping>
        
    <servlet-name>AddUser</servlet-name>
        
    <url-pattern>/servlet/AddUser</url-pattern>
      
    </servlet-mapping>
    </web-app>

    HibernateSessionFactory.java代码

    package fengyan.hibernate;

    import org.hibernate.HibernateException;
    import org.hibernate.Session;
    import org.hibernate.cfg.Configuration;


    public class HibernateSessionFactory {
      
        
    private static String CONFIG_FILE_LOCATION = "/fengyan/hibernate/hibernate.cfg.xml";
        
    private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
        
    private  static Configuration configuration = new Configuration();
        
    private static org.hibernate.SessionFactory sessionFactory;
        
    private static String configFile = CONFIG_FILE_LOCATION;

        
    private HibernateSessionFactory() {
        }


        
    public static Session getSession() throws HibernateException {
            Session session 
    = (Session) threadLocal.get();

            
    if (session == null || !session.isOpen()) {
                
    if (sessionFactory == null{
                    rebuildSessionFactory();
                }

                session 
    = (sessionFactory != null? sessionFactory.openSession()
                        : 
    null;
                threadLocal.set(session);
            }


            
    return session;
        }


        
    public static void rebuildSessionFactory() {
            
    try {
                configuration.configure(configFile);
                sessionFactory 
    = configuration.buildSessionFactory();
            }
     catch (Exception e) {
                System.err
                        .println(
    "%%%% Error Creating SessionFactory %%%%");
                e.printStackTrace();
            }

        }



        
    public static void closeSession() throws HibernateException {
            Session session 
    = (Session) threadLocal.get();
            threadLocal.set(
    null);

            
    if (session != null{
                session.close();
            }

        }



        
    public static org.hibernate.SessionFactory getSessionFactory() {
            
    return sessionFactory;
        }



        
    public static void setConfigFile(String configFile) {
            HibernateSessionFactory.configFile 
    = configFile;
            sessionFactory 
    = null;
        }



        
    public static Configuration getConfiguration() {
            
    return configuration;
        }


    }
  • 相关阅读:
    good excel website
    MSVCR90D.dll
    oracle db
    check socket status
    数据库数据恢复
    Nginx+Keepalived实现站点高可用[z]
    个人永久性免费-Excel催化剂功能第58波-批量生成单选复选框
    个人永久性免费-Excel催化剂功能第57波-一键生成完全组合的笛卡尔积结果表
    个人永久性免费-Excel催化剂功能第56波-获取Excel对象属性相关自定义函数
    个人永久性免费-Excel催化剂功能第55波-Excel批注相关的批量删除作者、提取所有批注信息等
  • 原文地址:https://www.cnblogs.com/eflylab/p/606352.html
Copyright © 2011-2022 走看看