hibernate注解annotation入门了解

来源:互联网 发布:入侵数据库消除痕迹 编辑:程序博客网 时间:2024/06/06 00:27

前面我们写了实体类之后,都会写一个对应的*.hbm.xml配置文件,然后把这个配置文件关联到hibernate.cfg.xml中,其实hibernate还有另一种写法,来映射对象关系,那就是注解annotation,今天就来简单的先看一下注解怎么使用。


新建一个java项目,项目结构如下:



导入jar包和从官网上获取hibernate压缩包,可以参见《Hibernate环境搭建和配置


新建一个实体类,在实体类中使用注解,代码如下:


package com.ghibernate.pojo;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;/** * entiry表示需要持久化的实体类 * Table表示实体类所对应的表 */@Entity@Table(name="t_book")public class Book {//Id主键@Id//指定主键生成策略@GeneratedValue(strategy=GenerationType.AUTO)private int id ;@Column(name="book_name")private String name ;@Columnprivate double price ;private String author ;private Date pubDate ;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public Date getPubDate() {return pubDate;}public void setPubDate(Date pubDate) {this.pubDate = pubDate;}}

将这个实体类关联到hibernate.cfg.xml中,如:

<!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><!-- 配置数据库连接信息 --><property name="connection.driver_class">com.mysql.jdbc.Driver</property><property name="connection.url">jdbc:mysql:///hibernate4</property><property name="connection.username">root</property><property name="connection.password">root</property><!-- 数据库方言 --><property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property><!-- 是否打印sql语句 --><property name="show_sql">true</property><!-- 格式化sql语句 --><property name="format_sql">true</property><!-- 数据库更新方式: 1、create:每次更新都先把原有数据库表删除,然后创建该表;2、create-drop:使用create-drop时,在显示关闭SessionFacroty时(sessionFactory.close()),将drop掉数据库Schema(表) 3、validate:检测;4、update(常用):如果表不存在则创建,如果存在就不创建--><property name="hbm2ddl.auto">update</property><!-- hbm映射文件 --><mapping class="com.ghibernate.pojo.Book" /></session-factory></hibernate-configuration>

HibernateUtil代码:

package com.robert.util;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.boot.registry.StandardServiceRegistryBuilder;import org.hibernate.cfg.Configuration;/** * hibernate工具类 */public class HibernateUtil {private static Configuration cfg = null;private static SessionFactory factory = null;private static Session session = null ;static {init();}/** * 初始化获得Configuration和SessionFacroty对象 */public static void init() {cfg = new Configuration().configure();factory = cfg.buildSessionFactory(new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build());}/** * 获得Session对象 * @return */public static Session getSession() {if (factory != null){return session = factory.openSession();}init();return session = factory.openSession();}/** * 关闭Session */public static void closeSession() {if(session!=null && session.isOpen())session.close();}}

测试类HIbernateTest代码:

package com.ghibernate.test;import java.util.Date;import org.hibernate.Session;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.hibernate.tool.hbm2ddl.SchemaExport;import org.junit.Test;import com.ghibernate.pojo.Book;import com.robert.util.HibernateUtil;public class HibernateTest {@Testpublic void testCreateDB() {Configuration cfg = new Configuration().configure();SchemaExport se = new SchemaExport(cfg);// 第一个参数:是否生成ddl脚本// 第二个参数:是否执行到数据库中se.create(true, true);}@Testpublic void testSave() {Session session = HibernateUtil.getSession() ;Transaction tx = session.beginTransaction() ;Book book = new Book() ;book.setName("读者") ;book.setPrice(5.6) ;book.setAuthor("众人") ;book.setPubDate(new Date()) ;session.save(book) ;tx.commit() ;HibernateUtil.closeSession();}}


使用Junit4运行testCreateDB,生成数据库表

控制台打印的sql语句:

    drop table if exists t_book    create table t_book (        id integer not null auto_increment,        author varchar(255),        book_name varchar(255),        price double precision,        pubDate datetime,        primary key (id)    )

运行testSave()方法,存入数据库表中的数据如图:



以上就是annotation的简单用法



原创粉丝点击