在编写Hibernate的时候,需要将实体类映射到数据库中的表。通常需要一个配置文件(hibernate.cfg.xml),一个实体类(XX.java),还有一个映射文件(XX.hbm.xml)。从JAVA5.0之后,可以利用注解来简化配置。简单来说就是不再需要映射文件了,hibernate需要的元数据(metadata)通过注解实体类就行了。
下面是一个简单的基于注解映射的Hibernate Hello World项目:
用到的工具和技术:1.Eclipse4.2.2
hibernate-annotations.jar
hibernate-commons-annotations.jar (Hibernate中支持注解开发的jar包)ejb3-persistence.jar(API规范的jar包)
slf4j/slf4j-api-1.5.0.jar
slf4j-log4j12-1.5.0.jar
log4j-1.2.15.jar (支持日志输出的jar包,注意版本的匹配)
首先是项目的整体架构:
项目的依赖(pom.xml):
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>3.8.1</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-core</artifactId>
- <version>4.2.2.Final</version>
- </dependency>
- </dependencies>
JPA jar包在hibernate3.6之后被放入hibernate-core包中。
Hibernate的配置文件(hibernate.cfg.xml):
- <?xml version='1.0' encoding='utf-8'?>
- <!DOCTYPE hibernate-configuration PUBLIC
- "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
- "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
- <hibernate-configuration>
- <session-factory>
- <!-- Database connection settings -->
- <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
- <property name="connection.url">jdbc:mysql://localhost:3306/test</property>
- <property name="connection.username">username</property>
- <property name="connection.password">password</property>
- <!-- SQL dialect -->
- <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
- <!-- Echo all executed SQL to stdout -->
- <property name="show_sql">true</property>
- <property name="format_sql">true</property>
- <!-- Drop and re-create the database schema on startup -->
- <property name="hbm2ddl.auto">update</property>
- <mapping class="org.hibernate.test.tutorial.Person" />
- </session-factory>
- </hibernate-configuration>
注意:需要在Mysql数据库中创建一个test数据库 CREATE DATABASE test
一个简单的实体类:
- package org.hibernate.test.tutorial;
- import java.io.Serializable;
- 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.Table;
- import javax.persistence.Temporal;
- import javax.persistence.TemporalType;
- @Entity
- @Table(name="T_PERSONS")
- public class Person implements Serializable {
- private static final long serialVersionUID = 1L;
- private Long id;
- private String name;
- private double age;
- private Date birth;
- @Id
- @GeneratedValue(strategy=GenerationType.AUTO)
- @Column(name="ID",unique=true)
- public Long getId() {
- return id;
- }
- @SuppressWarnings("unused")
- private void setId(Long id) {
- this.id = id;
- }
- @Column(name="NAME",length=20)
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- @Column(name="AGE")
- public double getAge() {
- return age;
- }
- public void setAge(double age) {
- this.age = age;
- }
- @Temporal(TemporalType.DATE)
- @Column(name="BIRTH_DATE")
- public Date getBirth() {
- return birth;
- }
- public void setBirth(Date birth) {
- this.birth = birth;
- }
- }
注意需要在Hibernate配置文件中注册该实体类: <mapping class="org.hibernate.test.tutorial.Person" />
最后编写一个运行程序:
- public static void main( String[] args )
- {
- SessionFactory factory = new AnnotationConfiguration().configure().buildSessionFactory();
- Session session = factory.openSession();
- session.beginTransaction(); // 开启事务
- try{
- Person p = new Person();
- p.setName("Benson");
- p.setAge(22);
- p.setBirth(new Date());
- session.save(p);
- } catch(Exception e) {
- e.printStackTrace();
- session.getTransaction().rollback(); // 回滚事务
- }
- session.getTransaction().commit(); // 提交事务
- }
运行之后,可以在Ecilpse控制台观察到Hibernate为我们自动生成的格式化后的SQL:
- Hibernate:
- insert
- into
- T_PERSONS
- (AGE, BIRTH_DATE, NAME)
- values
- (?, ?, ?)
进入Mysql控制台,可以查看到自动生成(hibernate.hbm2dll.auto)的表和插入的记录。
相关推荐
使用Maven3.0.5, Struts2, Spring, Hibernate3, annotation实现零配置的开发框架.里面有详细的开发指导文档, 后台用googlecode的 hibernate-generic-dao - Generic DAO 和 Search的代码,完全进行封装. 由于Generic ...
# 使用entity/dao/service全部使用注解扫描, 大大减少再开发的代码量; # 事务的织入: 开发时不必再处理SessionFactory、Session等, 只要按配置文件指定的格式对方法进行命名, 即可自动开启/提交事务; # 做了BaseDao...
大量使用了Hibernate和Spring的注解 配置步骤: 安装Tomcat及Mysql后: 1、新建WeExam的数据库 2、修改src/jdbc.properties内的连接参数,及test/hibernate.cfg.xml(用于单元测试)的连接参数 3、打开一下连接...
SpringBoot是一款基于Spring框架的开发框架,而Spring-data-JPA是在Hibernate的基础上实现JPA规范的ORM框架。使用SpringBoot和Spring-data-jpa进行分页查询可以大大简化编码流程并提高开发效率。 在使用Spring-data...
\contentsline {chapter}{Contents}{2}{section*.1} {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{...
3.1 应用场景 在一些开源框架里,如Spring,Struts,Hibernate,MyBatis等,应用程序会提供一个配置文件如xml文件或者properties,然后在Java类里面解析xml或properties里面的内容,得到一个字符串,然后用反射机制...
1.10 用@Required注解检查属性 34 1.10.1 问题 34 1.10.2 解决方案 34 1.10.3 工作原理 34 1.11 用XML配置自动装配Bean 36 1.11.1 问题 36 1.11.2 解决方案 36 1.11.3 工作原理 37 1.12 用@...
1.10 用@Required注解检查属性 34 1.10.1 问题 34 1.10.2 解决方案 34 1.10.3 工作原理 34 1.11 用XML配置自动装配Bean 36 1.11.1 问题 36 1.11.2 解决方案 36 1.11.3 工作原理 37 1.12 用@...
此时此景,笔者只专注Android、Iphone等移动平台开发,看着这些源码心中有万分感慨,写此文章纪念那时那景! Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这...
此时此景,笔者只专注Android、Iphone等移动平台开发,看着这些源码心中有万分感慨,写此文章纪念那时那景! Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这...
解压缩jeecms-3.0.2-final-src,在src文件夹下会看到有三个压缩文件,如果只想进行普通的二次开发,可以只导入cms这个源码,删除jeecms-cms-identity-3.0.2-final.jar即可,如果想进行深入的二次开发,需要导入...