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::orcl</property>
<property name="connection.username">daym2</property>
<property name="connection.password">daym2</property>
<property name="connection.isolation"></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,));
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(不区分大小写),数据也插进来了

Hibernate+Oracle注解式完整实例的更多相关文章

  1. Hibernate基于【XML】和【注解】——完整实例

    Eclipse中新建Java Project工程: 工程结构  和  需要的Jar包: 我用的SqlServer数据库,所以连接数据库的Jar包是sqljdbc4.jar 一.基于XML配置 1.实体 ...

  2. Hibernate实体关系映射(OneToMany单边)——完整实例

    单边一对多关系:电子邮件管理 单边一对多关系:指一方有集合属性,包含多个多方,而多的一方没有一方的引用. 比如:用户(一)与电子邮件(多).一个用户可以有多个电子邮件记录. 目的:通过OneToMan ...

  3. Hibernate使用注解进行ORM映射实例

    在上一篇博客中,我们通过xml配置文件进行实体类和表的映射,但是近两年来有更多的项目对一些比较稳定的实体类使用了注解进行ORM映射,这样使得编程更加简洁.简单.其实使用注解进行ORM映射和使用xml进 ...

  4. spring+mybatis之注解式事务管理初识(小实例)

    1.上一章,我们谈到了spring+mybatis声明式事务管理,我们在文章末尾提到,在实际项目中,用得更多的是注解式事务管理,这一章将学习一下注解式事务管理的有关知识.注解式事务管理只需要在上一节的 ...

  5. Hibernate之Criteria的完整用法

    Criteria的完整用法 QBE (Query By Example) Criteria cri = session.createCriteria(Student.class); cri.add(E ...

  6. spring(7)--注解式控制器的数据验证、类型转换及格式化

    7.1.简介 在编写可视化界面项目时,我们通常需要对数据进行类型转换.验证及格式化. 一.在Spring3之前,我们使用如下架构进行类型转换.验证及格式化: 流程: ①:类型转换:首先调用Proper ...

  7. Hibernate中Criteria的完整用法2

    Criteria的完整用法 QBE (Query By Example) Criteria cri = session.createCriteria(Student.class); cri.add(E ...

  8. Spring 16: SM(Spring + MyBatis) 注解式事务 与 声明式事务

    Spring事务处理方式 方式1:注解式事务 使用@Transactional注解完成事务控制,此注解可添加到类上,则对类中所有方法执行事务的设定,注解添加到方法上,则对该方法执行事务处理 @Tran ...

  9. spring + mybatis 注解式事务不回滚的原因分析 @Transactional

    在一个项目中发现spring的事务无法回滚. DEBUG: org.mybatis.spring.SqlSessionUtils - SqlSession [org.apache.ibatis.ses ...

随机推荐

  1. MySQL数据表操作

    创建数据表 打开数据库 USE 数据库名称 mysql> USE D1; Database changed 使用 USE D1:表示打开数据库D1,我们可以通过SELECT DATABASE() ...

  2. 读《编写可维护的JavaScript》第四章总结

    第四章 变量 函数和运算符 4.1 ① 变量声明 变量声明是通过var语句来完成的,并且所有的var语句都提前到包含这段逻辑的函数的顶部执行. function doSomething() { + v ...

  3. iOS资源整理

    开发类库 http://www.code4app.com/thread-7831-1-1.html Github-iOS备忘 http://github.ibireme.com/github/list ...

  4. python pyqt4 ide eric安装

    注意事项 关于python,pyqt的版本 笔者安装的是eric,原来电脑安装的是64位的python,32位的pyqt4,导致系统找不到pyqt,后来更换python版本为32搞定,猜测pyqt的版 ...

  5. Web墨卡托投影(转)

    Google Maps地图投影全解析(1):Web墨卡托投影 Google Maps.Virtual Earth等网络地理所使用的地图投影,常被称作Web Mercator或Spherical Mer ...

  6. 基本shell命令使用笔记

    linux常用命令: (ls:列出目录内容) -a/-all 列出所有文件,包括隐藏文件 -l 使用长格式显示详细信息,包括rwx (mkdir:建立目录) -p/-parents 若要建立目录的上层 ...

  7. 装逼名词 bottom-half,软中断,preemptive选项

    bottom-half http://bbs.csdn.net/topics/60226240 在中断,异常和系统调用里看Linux中断服务一般都是在关闭中断的情况下执行的,以避免嵌套而是控制复杂化L ...

  8. APP敏捷测试,测试和开发并行!

    测试和开发具有同等重要的作用,从一开始,测试和开发就是相向而行的.测试是开发团队的一支独立的.重要的支柱力量. 测试要具备独立性,独立分析业务需求,独立配置测试环境,独立编写测试脚本,独立开发测试工具 ...

  9. AS3和js相互通信要点分析

    目标:在html页面里可以使用事件来影响到swf文件的内容,swf文件也可以影响html里js代码的内容 一.新建flash文件,用Flash CC试用版新建一个TextArea.fla的源文件,不添 ...

  10. comparator接口与compare方法的实现

    刷leetcodecode时看到一道题需要利用自定义的比较器进行排序,最开始一头雾水,看了API终于懂了~ Arrays.sort(T[] a,Comparator<? super T>  ...