• Hibernate+Oracle注解式完整实例


     MyEclipse10,新建Web Project,取名hibernate,

    jar包

    1、Cat.java (实体类)

    package com.hibernate.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
    @Table(name="tb_cat")
    public class Cat {
        @Id  //指定该列为主键
        @GeneratedValue(strategy=GenerationType.AUTO)
        private Integer id;
        
        @Column(name="name")  //指定属性对应数据库的列名为name
        private String name;
        
        @Column(name="description")
        private String description;
        
        @ManyToOne                        //指定实体类之间的映射关系,多对一
        @JoinColumn(name="mother_id")    //该属性对应的列,Cat类型,所以mother_id也在同一个Table表里
        private Cat mother;
        
        @Temporal(TemporalType.TIMESTAMP)    //日期类型
        @Column(name="createDate")
        private Date createDate;
        
        //setter、getter方法
        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 getCreateDate() {
            return createDate;
        }
    
        public void setCreateDate(Date createDate) {
            this.createDate = createDate;
        }
        
        
        
    
    }

    主键尽量使用可以为null值的类型,例如Integer、Long、String等,而不要使用int,long等,因为如果主键为null,则表示该实体类还没有保存到数据库,是一个临时状态,而int、long等原始类型则不具备该功能 。

    注解中的@Column,如果属性名与列名一致,column属性可省略。

     2、hibernate.cfg.xml(src目录下)

    <?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="show_sql">true</property>
          <property name="format_sql">true</property>
          <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
          <property name="connection.url">jdbc:oracle:thin:@192.168.1.2:1521:orcl</property>
          <property name="connection.username">daym2</property>
          <property name="connection.password">daym2</property>
          <property name="connection.isolation">2</property>
          <property name="hbm2ddl.auto">create</property>
    
          <!-- SQL方言,这边设定的是Oracle -->
          <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
            
            <property name="current_session_context">thread</property>
            <mapping class="com.hibernate.bean.Cat" />
        </session-factory>
    </hibernate-configuration>

     hbm2ddl.auto设为create,会自动在数据库中建表,根据前面实体类各个属性的注解,自动建好字段,不需要自己建表

    (如果是MySQL数据库,需要自己建一个名为hibernate的数据库,数据表不需要自己建)

     3、HibernateUtil.java 

    package com.hibernate.bean;
    
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.AnnotationConfiguration;
    
    public class HibernateUtil {
        
        private static final SessionFactory sessionFactory;
        
        static{
            try{
                sessionFactory=new AnnotationConfiguration().configure("hibernate.cfg.xml").buildSessionFactory();
            }catch(Throwable ex){
                throw new ExceptionInInitializerError(ex);
            }
            
        }
        
        public static SessionFactory getSessionFactory(){
            return sessionFactory;
        }
        
    }

    4、CatTest.java (Main方法)

    package com.hibernate.bean;
    
    import java.awt.Font;
    import java.util.Date;
    import java.util.List;
    
    import javax.swing.JOptionPane;
    
    import org.hibernate.Session;
    import org.hibernate.Transaction;
    
    public class CatTest {
    
        public static void main(String[] args) {
            
            Cat mother=new Cat();    //mother猫
            mother.setName("Mary White");
            mother.setDescription("The Mama Cat..");
            mother.setCreateDate(new Date());        
            
            Cat kitty=new Cat();    //Kitty猫
            kitty.setMother(mother);    //设置与mother母女关系
            kitty.setName("Kitty");
            kitty.setDescription("Hello Kitty..");
            kitty.setCreateDate(new Date());
            
            Cat mimmy=new Cat();
            mimmy.setMother(mother);
            mimmy.setName("mimmy");
            mimmy.setDescription("Hello mimmy..");
            mimmy.setCreateDate(new Date());
            
            //开启一个Hibernate对话
            Session session=HibernateUtil.getSessionFactory().openSession();
            //开启一个事务
            Transaction trans=session.beginTransaction();
            
            session.persist(mother);//将mother保存进数据库
            session.persist(kitty);
            session.persist(mimmy);
            
            //查询数据库中的所有猫
            List<Cat> catList=session.createQuery("from Cat").list();
            StringBuffer result=new StringBuffer();
            result.append("数据库里的所有的猫:
    
    ");
            
            for(Cat cc:catList){
                result.append("猫:"+cc.getName()+",");
                result.append("猫妈妈:"+(cc.getMother()==null?"没有记录":cc.getMother().getName()));
                result.append("
    ");
            }
            trans.commit();
            session.close();
            
            //用Swing显示查询结果
            JOptionPane.getRootFrame().setFont(new Font("Arial",Font.BOLD,14));
            JOptionPane.showMessageDialog(null, result.toString());
            
            
        }
        
    }

     session.createQuery("from Cat").list();是HQL语言,类似于SQL,不同的是,HQL里使用的是实体类名(Cat类),而Cat实体类再去对应数据表tb_cat

     5、log4j.properties (src目录下)

    log4j.rootLogger=INFO,stdout
    log4j.category.org.hibernate.tool.hbn2ddl=DEBUG
    log4j.category.org.hibernate.SQL=DEBUG
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n

    运行CatTest类,效果如下:

     看到数据库中也自动生成了表TB_CAT(不区分大小写),数据也插进来了

  • 相关阅读:
    android watchdog 学习
    apt-get 使用详解
    study java uiautomator 0731
    关于测试人员的职业发展(转)
    双系统(win7+ubuntu)ubuntu磁盘空间不足时解决方法
    step of install xiaocong/uiautomator
    双系统(win7+ubuntu)ubuntu磁盘空间不足时解决方法
    关于Wubi安装增加容量以及移至真实分区的解决方法!使用LVPM软件
    android uiautomator + shell 网址
    Ubuntu中 JDK的安装和卸载
  • 原文地址:https://www.cnblogs.com/Donnnnnn/p/6247953.html
Copyright © 2020-2023  润新知