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::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注解式完整实例的更多相关文章
- Hibernate基于【XML】和【注解】——完整实例
Eclipse中新建Java Project工程: 工程结构 和 需要的Jar包: 我用的SqlServer数据库,所以连接数据库的Jar包是sqljdbc4.jar 一.基于XML配置 1.实体 ...
- Hibernate实体关系映射(OneToMany单边)——完整实例
单边一对多关系:电子邮件管理 单边一对多关系:指一方有集合属性,包含多个多方,而多的一方没有一方的引用. 比如:用户(一)与电子邮件(多).一个用户可以有多个电子邮件记录. 目的:通过OneToMan ...
- Hibernate使用注解进行ORM映射实例
在上一篇博客中,我们通过xml配置文件进行实体类和表的映射,但是近两年来有更多的项目对一些比较稳定的实体类使用了注解进行ORM映射,这样使得编程更加简洁.简单.其实使用注解进行ORM映射和使用xml进 ...
- spring+mybatis之注解式事务管理初识(小实例)
1.上一章,我们谈到了spring+mybatis声明式事务管理,我们在文章末尾提到,在实际项目中,用得更多的是注解式事务管理,这一章将学习一下注解式事务管理的有关知识.注解式事务管理只需要在上一节的 ...
- Hibernate之Criteria的完整用法
Criteria的完整用法 QBE (Query By Example) Criteria cri = session.createCriteria(Student.class); cri.add(E ...
- spring(7)--注解式控制器的数据验证、类型转换及格式化
7.1.简介 在编写可视化界面项目时,我们通常需要对数据进行类型转换.验证及格式化. 一.在Spring3之前,我们使用如下架构进行类型转换.验证及格式化: 流程: ①:类型转换:首先调用Proper ...
- Hibernate中Criteria的完整用法2
Criteria的完整用法 QBE (Query By Example) Criteria cri = session.createCriteria(Student.class); cri.add(E ...
- Spring 16: SM(Spring + MyBatis) 注解式事务 与 声明式事务
Spring事务处理方式 方式1:注解式事务 使用@Transactional注解完成事务控制,此注解可添加到类上,则对类中所有方法执行事务的设定,注解添加到方法上,则对该方法执行事务处理 @Tran ...
- spring + mybatis 注解式事务不回滚的原因分析 @Transactional
在一个项目中发现spring的事务无法回滚. DEBUG: org.mybatis.spring.SqlSessionUtils - SqlSession [org.apache.ibatis.ses ...
随机推荐
- python之路2(基础详解)
python一切都是对象: 列子:
- Q
- c++并发练习---生产者消费者模型
问题:有一个生产者,多个消费者,生产者每生产一个,放入队列,多个消费者顺序从队列中取出数据,打印最终结果. 分析:首先这题,我本意应该设计成如下模型:生产者单开一个线程,向队列中放入数据,而消费者在锁 ...
- centos 7 编译zabbix 3.2.2
已有LNMP环境. 1.安装zabbix需要的依赖包,红色部门的包官方yum源没有,需要自己下载 yum install net-snmp fping iksemel net-snmp-devel ...
- linux 系统下 ngnix 显示目录形式
vi /usr/local/nginx/conf/nginx.conf #编辑配置文件,在server {下面添加以下内容: location / { autoindex on; autoin ...
- Oracle 表连接
Oracle 表之间的连接分为三种: 1. 内连接(自然连接) 2. 外连接 (1)左外连接 (左边的表不加限制) (2)右外连接(右边的表不加限制) (3)全外连接(左右两表都不 ...
- UINavigationController导航控制器初始化 导航控制器栈的push和pop跳转理解
(1)导航控制器初始化的时候一般都有一个根视图控制器,导航控制器相当于一个栈,里面装的是视图控制器,最先进去的在最下面,最后进去的在最上面.在最上面的那个视图控制器的视图就是这个导航控制器对外展示的界 ...
- CSS3 选择器——基本选择器
CSS的选择器,我想大家并不会陌生吧,因为天天在使用,但对于CSS3的选择器,要运用的灵活到位,我想对很多朋友还是一定的难度,特别是CSS3中的:nth选择器.那么从现在开始我们先丢开他们版本的区别, ...
- js通过继承实现私有函数
本文是原创文章,如需转载,请注明文章出处 主要思想就是在继承时,只开放共有的属性和方法,不开放另外某些函数,从而实现私有的作用. function A(){ this.x = 100; this.y ...
- python——创建django项目全攻略(野生程序员到家养程序员的完美进化)
新建工程 我用pycharm写代码,所以一般就用pycharm创建django工程.右上角File-New Project.选择路径,修改项目名称,确定.就可以创建一个新的django工程. ...