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. 使用js设置input标签只读 readonly 属性

    先上代码: <html> <head> <title> test </title> <meta charset="utf-8" ...

  2. java:IO流学习小结

    可以看以下内容学习一下: http://blog.csdn.net/zzp_403184692/article/details/8057693

  3. 横版CG场景

    http://www.cgvoo.com/thread-27211-1-1.html <ignore_js_op><ignore_js_op><ignore_js_op& ...

  4. Google开源SLAM软件cartographer中使用的UKF滤波器解析

    在Google开源SLAM软件cartographer中,相对<SLAM for dummies>使用了更为复杂.性能更好的Scan匹配与UKF算法,这里简单介绍下cartographer ...

  5. 淘宝网触屏版 - 学习笔记(1 - 关于meta)

    注:本文是学习笔记,并不是教程,所以会有很多我不理解或猜测的问题,也会有不尽详实之处,望见谅. <meta charset="utf-8"> <meta cont ...

  6. Linux C相关基础

    系统求助 man 函数名 man 2 函数名    -    表示函数是系统调用函数 man 3 函数名    -    表示函数是C的库函数     eg:man fread     man 2 w ...

  7. no route to host

    防火墙没有关闭: systemctl stop firewalld

  8. 解决jquery操作checkbox全选全不选无法勾选问题

    最近在学习中使用jquery操作checkbox,使用下面方法进行全选.反选:$("input[name='checkbox']").attr("checked" ...

  9. mongo 相关命令

    mongo导入数据: 1. 先进入找到mongo 安装目录 执行 ./mongo 进入mongo 2. mongorestore -u 用户名 -p 密码 -d 数据库 —drop 文件存在路径 显示 ...

  10. Unity3d copy gameobject from one scene to another

    scene-copy-game-objects-from-one-scene-to-anotherhttp://forum.unity3d.com/threads/scene-copy-game-ob ...