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. 阅读笔记 火球——UML大战需求分析 2

    从大一一开始接触C++的时候,上课模模糊糊的听王辉老师讲,我们第一学期学的是面向过程,第二学期学的是面向对象,迷迷糊糊的上了一年,到了大二的时候,对这个面向什么没有什么深层次的理解.知道学了JAVA ...

  2. (转)Linux grep

    文章转自 http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856896.html 简介 grep (global search regular ...

  3. Centos中tomcat7指定jdk

    服务器上默认的jdk是1.8的,但是我想我的tomcat指定一个自定义的jdk怎么办呢,莫急,待老夫慢慢道来. 1.需要有一个除默认外的jdk的安装包(不用配置任何环境变量),如下图: 2.进入tom ...

  4. VC++常用数据类型转化

    char* 转换成 LPCTSTR const char* dibFileName; , , dibFileName, -, NULL, ); wchar_t *wide = new wchar_t[ ...

  5. web应用动态文档技术

    动态生成web文档分为服务器动态生成.客户端动态生成 服务器动态生成文档技术主要有: CGI - 公共网关接口,它是一个允许Web服务器与后端程序以及脚本进行通信的标准化接口.通常是web服务器收到一 ...

  6. python操作csv和excel文件

    1.操作csv文件 1).读取文件 import csv f=open("test.csv",'r') t_text=csv.reader(f) for t,i in t_text ...

  7. Gvim常用命令

    这是一篇较全的vim命令.特记录下来,有稍作修改说明.摘http://hi.baidu.com/ui176/item/b00ae7c0eeaba52847d5c0c5 Vim常用命令 跳到指定的行号: ...

  8. Entity framework在用于WCF时创建数据模型的问题

    众所周知,WCF的传输对象,在创建时需要在类名上标识[DataContract]以及在属性上标识[DataMember],当我们在使用Entity framework时(不考虑Code first的情 ...

  9. Elasticsearch 检索

    说到查询,那么索引也是一个绕不开的话题,可以说,没有索引就没有检索,先来看一个示意图 左边是索引过程,右边是检索过程.关键的步骤是分词过程,我用等号表示这两个过程一样,而且,必须一样,这个等号并不是模 ...

  10. Extjs 源码组成(4.0.7)

    (function(){})()形式的自执行,构建Ext对象(0~584) 1  设置全局对象EXt:global.Ext = {}, 2 实现了Ext对象面向对象编程的基础方法,如,apply,ex ...