Hibernate:入门案例

ORM

ORM-对象关系映射。

O:对象(java中的实体类)

R:关系(数据库中的数据表)

M:映射(将实体类与数据库表之间的关系说明清楚)

持久层

Hibernate

它是一个轻量级,企业级,开源的ORM持久层框架。是可以操作数据库的框架。

通常情况下,软件工程的持久层解决方案,一个为主一个为辅。两者并存(写SQL语句的和不写SQL语句的)。

轻量级:指的是使用时依赖的资源很少(目前我们使用的阶段,只依赖log4j,c3p0连接池)。

企业级:指的是在企业级应用中使用的比较多。

开源:开放源代码。

ORM的操作方式:建立对象关系映射,实现操作实体类就相当于操作数据库表。

入门案例

1、准备数据库

库名:hibernate

表名:goods

2、导入Hibernate的jar文件

3、实体类:Goods.java

package org.haiwen.entity;

public class Goods {

	private Integer goodsId;
	private String goodsName;
	private Float goodsPrice;
	private Integer goodsNumber;

	public Goods() {
		super();
	}

	public Goods(Integer goodsId, String goodsName, Float goodsPrice, Integer goodsNumber) {
		super();
		this.goodsId = goodsId;
		this.goodsName = goodsName;
		this.goodsPrice = goodsPrice;
		this.goodsNumber = goodsNumber;
	}

	public Integer getGoodsId() {
		return goodsId;
	}

	public void setGoodsId(Integer goodsId) {
		this.goodsId = goodsId;
	}

	public String getGoodsName() {
		return goodsName;
	}

	public void setGoodsName(String goodsName) {
		this.goodsName = goodsName;
	}

	public Float getGoodsPrice() {
		return goodsPrice;
	}

	public void setGoodsPrice(Float goodsPrice) {
		this.goodsPrice = goodsPrice;
	}

	public Integer getGoodsNumber() {
		return goodsNumber;
	}

	public void setGoodsNumber(Integer goodsNumber) {
		this.goodsNumber = goodsNumber;
	}

	@Override
	public String toString() {
		return "Goods [goodsId=" + goodsId + ", goodsName=" + goodsName + ", goodsPrice=" + goodsPrice
				+ ", goodsNumber=" + goodsNumber + "]";
	}
}

4、ORM文件:Goods.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <!-- 1.配置类和表对应 
		class标签
		name属性:实体类全路径
		table属性:数据库表名称 -->
	<class name="org.haiwen.entity.Goods" table="goods">
	    <!-- 2.配置实体类id和表id对应 
			hibernate要求实体类有一个属性唯一值
			hibernate要求表有字段作为唯一值 -->
        <!-- id标签
			name属性:实体类里面id属性名称
			column属性:生成的表字段名称 -->
		<id name="goodsId" column="goods_id">
		    <!-- 设置数据库表id增长策略 
				native:生成表id值就是主键自动增长
				没有序列写assigned -->
			<generator class="native" />
		</id>
		
		<!-- 配置其他属性和表字段对应 
			name属性:实体类属性名称
			column属性:生成表字段名称 -->
		<property name="goodsName" type="java.lang.String" column="goods_name" />
		<property name="goodsPrice" type="java.lang.Float" column="goods_price" />
		<property name="goodsNumber" type="java.lang.Integer" column="goods_number" />
	</class>
</hibernate-mapping>

5、配置文件: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>
        <!-- 第一部分:数据库连接的四大参数 -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>
        
        <!-- 第二部分:配置hibernate信息,可选的 -->
        <!-- 输出底层sql语句 -->
        <property name="show_sql">true</property>
        <!-- 输出底层sql语句格式 -->
	    <property name="format_sql">true</property>
        
        <!-- dialect 表示方言,针对不同的数据库产品,在翻译成SQL语句时是不同 -->
        <!-- mysql的是org.hibernate.dialect.MySQLDialect -->
        <!-- oracle的是org.hibernate.dialect.Oracle10gDialect -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        
        <!-- Hibernate的hbm2ddl(数据定义语言)属性-->
        <!-- hbm2ddl.auto的取值
            none:不用Hibernate自动生成表
            create:每次都会创建一个新的表
            create-drop:每次都会创建一个新的表,执行程序结束后删除这个表
            update:如果数据库中有表,使用原来的表,如果没有表,创建一个新表,可以更新表结构
            validate:只会使用原有的表,对映射关系进行校验 -->
        <property name="hibernate.hbm2dll.auto">update</property>
        
	    <!-- 第三部分:把映射文件放到核心配置文件中 -->
        <mapping resource="org/haiwen/entity/Goods.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

6、测试类:T1.java

package org.haiwen.test;

import org.haiwen.entity.Goods;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.junit.Test;

public class T1 {

	@Test
	public void T1() {
		Goods goods = new Goods(null, "步枪M4", 41F, 10);
		// 1.解析主配置文件
		Configuration c = new Configuration().configure();
		// 2.根据配置文件创建SessionFactory
		SessionFactory sf = c.buildSessionFactory();
		// 3.根据SessionFactory创建Session
		Session session = sf.openSession();
		System.out.println(session);
		// 4.开启事务
		session.getTransaction().begin();
		// 5.执行操作
		session.save(goods);
		// 6.提交事务
		session.getTransaction().commit();
		// 7.释放资源
		session.close();
		sf.close();
	}
}

实体类的编写规范应该遵循JavaBean的编写规范

Bean:在软件开发中指可用的组件

JavaBean:指的是java语言编写的可重用组件

编写规范:

  • 类都是public修饰,一般实现序列化接口
  • 默认无参构造函数
  • 属性都是私有的,设置公有get/set方法
  • 基本类型和包装类型,选择包装类型(比如考试时,为了区分缺考和0分)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值