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("数据库里的所有的猫:\r\n\r\n");
        
        for(Cat cc:catList){
            result.append("猫:"+cc.getName()+",");
            result.append("猫妈妈:"+(cc.getMother()==null?"没有记录":cc.getMother().getName()));
            result.append("\r\n");
        }
        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(不区分大小写),数据也插进来了

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值