zoukankan      html  css  js  c++  java
  • Hibernate入门笔记

    相关基础概念请从其它教材简单了解,这里仅记录下第一个Hibernate程序的实现步骤。

    环境说明:

    java开发工具:eclipse MARS.2 Release(4.5.2)

    hibernate版本:hibernate-release-4.3.6.Final

    Web 容器:Tomcat v8.0

    数据库:MySQL 5.6.19-enterprise-commercial-advanced

    jdbc驱动:mysql-connector-java-commercial-5.1.30-bin.jar

    1.下载hibernate。

    2.下载jdbc驱动文件。

    3.在eclipse中新建web project,命名为firsthibernate。

    4.拷贝hibernate/lib/required文件夹下的所有jar文件、以及jdbc驱动文件(此文件另外下载)到项目的WEB-INF/lib文件夹下,拷贝hibernate/project/etc下的hibernate.cfg.xml文件到项目的src目录下。

    5.新建实体类Cat,Hibernate中配置实体类有两种方法:XML文件配置和@注解配置,本例采用@注解配置,相关注解代表的含义在代码中都有注明如下:

    package com.levice.firsthibernate.bean;
    
    import java.util.Date;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;
    import javax.persistence.Table;
    import javax.persistence.Temporal;
    import javax.persistence.TemporalType;
    
    @Entity                              //注解Entity表示该类能被Hibernate持久化
    @Table(name = "tb_cat")              //指定该Entity对应的数据表名
    public class Cat {
    
        @Id                              //指定该列为主键。主键类型最好不要使用int等原始类型
        @GeneratedValue(strategy = GenerationType.AUTO) //主键类型auto表示该主键为自增长型
        private Integer id;
        
        @Column(name = "name")           //指定该属性对应的数据库表的列为name,列名与属性名一样时这句注解可省略
        private String name;
        
        @Column(name = "description")
        private String description;
        
        @ManyToOne                       //指定实体类之间的关系,本例表示多对一关系
        @JoinColumn(name = "mother_id")
        private Cat mother;
        
        @Temporal(TemporalType.TIMESTAMP)//日期类型(DATE,TIME或TIMESTEMP)
        @Column(name = "birthday")
        private Date birthday;
        
        
        //getters and setters
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getDescription() {
            return description;
        }
        public void setDescription(String description) {
            this.description = description;
        }
        public Cat getMother() {
            return mother;
        }
        public void setMother(Cat mother) {
            this.mother = mother;
        }
        public Date getBirthday() {
            return birthday;
        }
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }    
    }

    6.修改配置文件hibernate.cfg.xml,内容及注释如下:

    <!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:3306/hibernate</property>
            <property name="connection.username">root</property>
            <property name="connection.password">123456</property>
            
            <!-- 指定使用MySQL数据库格式的SQL语句 -->
            <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
            
            <!-- 指定在控制台打印生成的SQL语句 -->
            <property name="show_sql">true</property>
            
            <!-- 指定Hibernate启动时自动创建表结构 -->
            <property name="hbm2ddl.auto">create</property>
            
            <!-- 加上这一句以防止未知错误 -->
            <property name="current_session_context_class">thread</property>
            
            <!-- 指定Cat类为Hibernate实体类 -->
            <mapping class="com.levice.firsthibernate.bean.Cat"/>
        </session-factory>
    </hibernate-configuration>

    7.初始化数据库,在MySQL中创建数据库hibernate,SQL代码如下:

    create database hibernate;

    8.配置HibernateUtil,就是修改HibernateUtil.java文件,这个文件在下载的hibernate文件中有,但我Copy过来的时候,一直没调试成功,于是采用了一个版本比较老的HibernateUtil。这个文件的作用是获取SessionFactory从而获取Session,不同版本的hiberate中获取SessionFactory的方法都不同,这里可以新建一个HibernateUtil.java文件,然后把下面的代码copy进去。

    package com.levice.firsthibernate.util;
    
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.AnnotationConfiguration;
    
    @SuppressWarnings("deprecation")
    public class HibernateUtil {
    
        private static final SessionFactory sessionFactory;
        static{
            try{
                sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
            }catch(Throwable ex){
                System.err.println("Initial SessionFactory creation failed.");
                throw new ExceptionInInitializerError(ex);
            }
        }
        
        public static SessionFactory getSessionFactory(){
            return sessionFactory;
        }
    }

    9.执行Hibernate程序,创建一个包含主函数main的类CatTest,代码及注释如下:

    package com.levice.firsthibernate.test;
    
    import java.awt.Font;
    import java.util.Date;
    import java.util.List;
    import javax.swing.JOptionPane;
    import org.hibernate.Session;
    import org.hibernate.Transaction;
    import com.levice.firsthibernate.bean.Cat;
    import com.levice.firsthibernate.util.HibernateUtil;
    
    public class CatTest {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
            /*初始化几只Cat的信息*/
            Cat mother = new Cat();
            mother.setName("Mother White");
            mother.setDescription("This is mother cat");
            mother.setBirthday(new Date());
    
            Cat kitty = new Cat();
            kitty.setMother(mother);
            kitty.setName("Kitty");
            kitty.setDescription("This is Kitty");
            kitty.setBirthday(new Date());
    
            Cat tom = new Cat();
            tom.setMother(mother);
            tom.setName("Tom");
            tom.setDescription("This is Tom");
            tom.setBirthday(new Date());
    
            @SuppressWarnings("static-access")
            Session session = new HibernateUtil().getSessionFactory().openSession(); //获取session并open,开启一个Hibernate会话
            Transaction trans = session.beginTransaction(); //开启一个事务
    
            session.persist(mother); //将mother保存到数据库
            session.persist(kitty);
            session.persist(tom);
    
            @SuppressWarnings("all")
            List<Cat> catList = session.createQuery(" from Cat ").list(); //查询数据库中所有的猫
            StringBuffer result = new StringBuffer();
            result.append("all cats: 
    
    ");
            for (Cat cc : catList) {
                result.append("name:" + cc.getName() + "
    ");
                result.append("mother:" + (cc.getMother() == null ? "null" : cc.getMother().getName()) + "
    ");
                result.append("description:" + cc.getDescription() + "
    
    ");
            }
    
            trans.commit(); //提交事务
            session.close(); //关闭Hibernate会话
    
            //用Swing显示查询结果
            JOptionPane.getRootFrame().setFont(new Font("Arial", Font.BOLD, 14));
            JOptionPane.showMessageDialog(null, result.toString());
    
        }
    
    }

    10.运行CatTest,可以看到如下输出:

    控制台输出的SQL语句如下:

    Hibernate: alter table tb_cat drop foreign key FK_dix3h50rxo8ahrcu5roir75n1
    Hibernate: drop table if exists tb_cat
    Hibernate: create table tb_cat (id integer not null auto_increment, birthday datetime, description varchar(255), name varchar(255), mother_id integer, primary key (id))
    Hibernate: alter table tb_cat add constraint FK_dix3h50rxo8ahrcu5roir75n1 foreign key (mother_id) references tb_cat (id)
    Hibernate: insert into tb_cat (birthday, description, mother_id, name) values (?, ?, ?, ?)
    Hibernate: insert into tb_cat (birthday, description, mother_id, name) values (?, ?, ?, ?)
    Hibernate: insert into tb_cat (birthday, description, mother_id, name) values (?, ?, ?, ?)
    Hibernate: select cat0_.id as id1_0_, cat0_.birthday as birthday2_0_, cat0_.description as descript3_0_, cat0_.mother_id as mother_i5_0_, cat0_.name as name4_0_ from tb_cat cat0_
  • 相关阅读:
    intersect参数
    创建图层只是保存lyr,此路不通
    点在线上
    GPS点和底图叠加
    Ifeature.set_value(index,value)怎么没结果,请高手指点
    GP的输入参数
    关于调用ArcGIS中GP工具.Erase、SymDiff
    ArcEngine 导出图层(shp)
    转载 高效实用的异或操作
    判断一个整数是否是奇数的小解
  • 原文地址:https://www.cnblogs.com/dige1993/p/5813768.html
Copyright © 2011-2022 走看看