Hibernate系列二:基本使用

一、加入jar包
1、导入 Hibernate 必须的 jar 包:
 antlr-2.7.7.jar
 dom4j-1.6.1.jar
 hibernate-commons-annotations-4.0.2.Final.jar
 hibernate-core-4.2.4.Final.jar
 hibernate-jpa-2.0-api-1.0.1.Final.jar
 javassist-3.15.0-GA.jar
 jboss-logging-3.1.0.GA.jar
 jboss-transaction-api_1.1_spec-1.0.1.Final.jar
2、加入数据库驱动的 jar 包:
 mysql-connector-java-5.1.7-bin.jar
二、开发步骤
在这里插入图片描述
1、Hibernate 从其配置文件中读取和数据库连接的有关信息,这个文件应该位于应用的 classpath 下。

<!-- 配置连接数据库的基本信息 -->
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql:///hibernate</property>

<!-- 配置 hibernate 的基本信息 -->
<!-- hibernate 所使用的数据库方言 -->
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>		

<!-- 执行操作时是否在控制台打印 SQL -->
<property name="show_sql">true</property>

<!-- 是否对 SQL 进行格式化 -->
<property name="format_sql">true</property>

<!-- 指定自动生成数据表的策略 -->
<property name="hbm2ddl.auto">update</property>

<!-- 指定关联的 .hbm.xml 文件 -->
<mapping resource="com/atguigu/hibernate/helloworld/News.hbm.xml"/>

2、创建持久化 Java 类
 提供一个无参的构造器:使Hibernate可以使用Constructor.newInstance() 来实例化持久化类。
 提供一个标识属性(identifier property):通常映射为数据库表的主键字段。如果没有该属性,一些功能将不起作用,如:Session.saveOrUpdate()
 为类的持久化类字段声明访问方法(get和set):Hibernate对JavaBeans 风格的属性实行持久化。
 使用非 final 类:在运行时生成代理是 Hibernate 的一个重要的功能。如果持久化类没有实现任何接口,Hibnernate 使用 CGLIB 生成代理。如果使用的是 final 类,则无法生成 CGLIB 代理。
 重写 eqauls 和 hashCode 方法:如果需要把持久化类的实例放到 Set 中(当需要进行关联映射时),则应该重写这两个方法。

public class News {
	
	private Integer id; //field
	private String title;
	private String author;
	
	private String desc;
	
	//使用 title + "," + content 可以来描述当前的 News 记录. 
	//即 title + "," + content 可以作为 News 的 desc 属性值
	
	private String content;
	
	private Blob picture;
	
	public Blob getPicture() {
		return picture;
	}

	public void setPicture(Blob picture) {
		this.picture = picture;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}
	
	public String getDesc() {
		return desc;
	}

	public void setDesc(String desc) {
		this.desc = desc;
	}



	private Date date;

	public Integer getId() { //property
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getAuthor() {
		return author;
	}

	public void setAuthor(String author) {
		this.author = author;
	}

	public Date getDate() {
		return date;
	}

	public void setDate(Date date) {
		this.date = date;
	}

	public News(String title, String author, Date date) {
		super();
		this.title = title;
		this.author = author;
		this.date = date;
	}
	
	public News() {
		// TODO Auto-generated constructor stub
	}

	@Override
	public String toString() {
		return "News [id=" + id + ", title=" + title + ", author=" + author
				+ ", date=" + date + "]";
	}
	
}

3、创建对象-关系映射文件
 Hibernate 采用 XML 格式的文件来指定对象和关系数据之间的映射。在运行时 Hibernate 将根据这个映射文件来生成各种 SQL 语句。映射文件的扩展名为 .hbm.xml

<hibernate-mapping package="com.atguigu.hibernate.helloworld">

    <class name="News" table="NEWS" dynamic-insert="true">
    	
        <id name="id" type="java.lang.Integer">
            <column name="ID" />
            <!-- 指定主键的生成方式, native: 使用数据库本地方式 -->
            <generator class="native" />
        </id>
    
        <property name="title" not-null="true" unique="true"
        	index="news_index" length="50"
        	type="java.lang.String" column="TITLE" >
        </property>
        
        <property name="author" type="java.lang.String"
        	index="news_index">
            <column name="AUTHOR" />
        </property>
        
        <property name="date" type="date">
            <column name="DATE" />
        </property>
        
        <property name="desc" 
        	formula="(SELECT concat(title, ',', author) FROM NEWS n WHERE n.id = id)"></property>
		
		<property name="content">
			<column name="CONTENT" sql-type="text"></column>
		</property>
		
		<property name="picture" column="PICTURE" type="blob"></property>
		
    </class>
    
</hibernate-mapping>

4、通过 Hibernate API 编写访问数据库的代码

public class HibernateTest {

	@Test
	public void test() {
		
		System.out.println("test...");
		
		//1. 创建一个 SessionFactory 对象
		SessionFactory sessionFactory = null;
		
		//1). 创建 Configuration 对象: 对应 hibernate 的基本配置信息和对象关系映射信息
		Configuration configuration = new Configuration().configure();
		
		//4.0 之前这样创建
		//sessionFactory = configuration.buildSessionFactory();
		
		//2). 创建一个 ServiceRegistry 对象:hibernate 4.x 新添加的对象
		//hibernate 的任何配置和服务都需要在该对象中注册后才能有效.
		ServiceRegistry serviceRegistry = 
				new ServiceRegistryBuilder().applySettings(configuration.getProperties())
				                            .buildServiceRegistry();
		
		//3).
		sessionFactory = configuration.buildSessionFactory(serviceRegistry);
		
		//2. 创建一个 Session 对象
		Session session = sessionFactory.openSession();
		
		//3. 开启事务
		Transaction transaction = session.beginTransaction();
		
		//4. 执行保存操作
		News news = new News("Java12345", "ATGUIGU", new Date(new java.util.Date().getTime()));
		session.save(news);
		
		//5. 提交事务 
		transaction.commit();
		
		//6. 关闭 Session
		session.close();
		
		//7. 关闭 SessionFactory 对象
		sessionFactory.close();
	}
	
}

控制台输出:
在这里插入图片描述
自动生成的表:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本书由互联网上影响广泛的开放文档OpenDoc系列自由文献首份文档“Hibernate开发指南”发展而来。在编写过程,进行了重新构思与组织,同时对内容的深度与广度进行了重点强化。本书从持久层入手,引出对象/关系数据库映射的由来,接下来聚焦于目前最完善、最强悍的ORM产品——Hibernate。从一个基础程序入手,讲述Hibernate基本语法与配置,慢慢升高到缓存、延迟加载等高级特性。本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术、自定义持久化实现、Hibernate回调与拦截、Hibernate分页等实用技术,Hibernate实战部分则用一个真实论坛的创建演示了Hibernate的强大功能。本书有丰富的附录部,在附录讲述了Hibernate常用的映射配置,Hibernate工具、XDoclet模板配置以及Hibernate的益友iBatis用法,还以卡片的形式列出了本书所用的工具及软件,附录最后一部分是“快速启动代码”,供读者对比与参考,也给初学者提供了一个快带起步的基础。本书适合于Hibernate的各个阶层的读者。 注: 因为此书共20M多,所以分开上传, 需要把深入浅出hibernate(PDF)第一部分.深入浅出hibernate(PDF)第部分,深入浅出hibernate(PDF)第三部分全部下载,并解压到一个地方才可以正常解压阅读.给大家带来不便望谅解.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值