Hibernate学习笔记(一):hibernate 的开发步骤(保存数据)

项目结构:

1、导入 jar 包:

2、写实体类对象:Employee.java

package com.hibernate.demo;

import java.util.Date;

/**
 * 实体类 对象
 */
public class Employee {
    private int empId;
    private String empName;
    private Date workDate;

    public int getEmpId() {
        return empId;
    }

    public void setEmpId(int empId) {
        this.empId = empId;
    }

    public String getEmpName() {
        return empName;
    }

    public void setEmpName(String empName) {
        this.empName = empName;
    }

    public Date getWorkDate() {
        return workDate;
    }

    public void setWorkDate(Date workDate) {
        this.workDate = workDate;
    }

    @Override
    public String toString() {
        return "Employee{" +
                "empId=" + empId +
                ", empName='" + empName + '\'' +
                ", workDate=" + workDate +
                '}';
    }
}

3、写对象与表的映射文件:和实体类在同一目录下;

映射文件命名规则:类名.hbm.xml;比如 Employee.hbm.xml:

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

<!-- 映射文件:映射一个实体类对象 和 一个数据表的对应关系 -->
<!--
	package:要映射的实体类所在的包(可选);
		如果不指定 package,那么下面所有的 类 都要指定包名,比如写成
		<class name="com.hibernate.demo.Employee" table="employee">
	auto-import:默认为 true,表示在写 HQL 语句的时候会自动导入包名,直接写 "from Employee" 就行;
		如果为 false,那么 HQL 就必须要写类的全名,比如 "from com.hibernate.demo.Employee";
-->
<hibernate-mapping package="com.hibernate.demo" auto-import="true">
	<!--
		class 节点:用于映射某一个对象;一般情况下,一个对象写一个映射文件,一个 class 节点;
			name:指定要映射的对象的类型(实体类的名称);
			table:指定对象对应的表名;可以不写,如果没有指定表名,默认与对象名称一样;
	-->
	<class name="Employee" table="employee">
		<!--
			主键映射:
			name:指定对象中的属性名
			column:指定表中的主键
		-->
		<id name="empId" column="id">
			<!--
				主键的生成策略:
				identity:自增长,对 DB2、MySQL、MS SQL Server、Sybase 和 HypersonicSQL 有效;
				sequence:自增长(序列),oracle 中的自增长是以序列方式实现的;

				native:自增长,根据底层数据库的能力选择 identity、sequence、hilo 中的一个(常用);
					如果是 mysql 数据库,选择 identity;
					如果是 oracle 数据库,选择 sequence;

				increment:自增长,只有在没有其他进程往同一张表中插入数据时才能使用;在服务器集群下不要使用(不常用);

				assigned:手动指定主键的值,即保存对象数据时需要设置 empId 的值:emp.setEmpId(id);
				uuid:指定使用 uuid 随机生成的唯一值作为主键;
				foreign:外键的方式(后面再讲);
			-->
			<generator class="native"/>
		</id>

		<!--
			非主键映射:普通字段映射
			name:指定对象中的属性
			column:指定表中的字段,和对象中的属性相对应;如果不写,默认与属性名一样
	 		length:指定字符长度,默认为 255
	 		type:指定映射表的字段的类型,如果不指定,会自动匹配对应属性的类型;
	 			可以写 java 类型:必须写全名,比如 type="java.lang.String";java 类型的类的首字母必是大写;
	 			也可以写 hibernate 类型:比如 type="string";hibernate 的类型全是小写;
	 	-->
		<property name="empName" column="empName" length="20" type="string"/>
		<property name="workDate" column="workDate" type="java.util.Date"/>

		<!-- 注意:列名不能为关键字,如果非要用关键字(desc 为 order by 语句的降序关键字),需要用反引号(``) -->
		<!--<property name="desc" column="`desc`"/>-->
	</class>
</hibernate-mapping>

4、写主配置文件:src/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 节点代表一个数据库 -->
	<session-factory>
		<!-- 数据库连接配置:
			配置的属性可以在 hibernate-distribution-3.6.0.Final\project\etc\hibernate.properties 中查看 -->
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.url">jdbc:mysql:///hib_demo</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">root</property>
		<!-- 数据库方言配置:hibernate 在运行的时候,会根据不同的方言生成符合当前数据库语法的 sql 语句 -->
		<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
		
		<!-- 显示 hibernate 在运行时候执行的 sql 语句 -->
		<property name="hibernate.show_sql">true</property>
		<!-- 格式化 sql 语句 -->
		<property name="hibernate.format_sql">true</property>

		<!-- 自动建表:如果表不存在,hibernate 会根据映射文件 自动创建表;
			update:如果表不存在就创建,如果表已经存在,则不再创建;
			create:每次都创建表;如果表已经存在,则先删除,再创建;
			create-drop:在创建 SessionFactory 的时候创建表,在调用 sessionFactory 的 close 方法时候删除表;
			validate:执行验证,当映射文件的内容与数据库表结构不一样的时候就会报错;
		-->
		<property name="hibernate.hbm2ddl.auto">update</property>

		<!-- 加载映射文件 -->
		<mapping resource="com/hibernate/demo/Employee.hbm.xml"/>
	</session-factory>
</hibernate-configuration>

5、写测试代码:HibernateDemo1.java

package com.hibernate.demo;

import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
import org.junit.Test;

import java.util.Date;

/**
 * SSH 框架:
 *  struts:基于 MVC 模式的应用层框架技术;
 *  hibernate:基于持久层的框架(数据访问层使用);
 *  spring:创建对象,处理对象的依赖关系,以及框架整合;
 *
 * ORM:Object Relation Mapping,对象关系映射;
 *  关系型数据库有:mysql、oracle 等;
 *
 * ORM 解决的问题:
 *  1、存储:直接将对象存储到数据库;
 *  2、获取:直接从数据库中获取对象;
 *
 * ORM 和 hibernate 的关系:
 *  hibernate 是 ORM 的实现;
 */
public class HibernateDemo1 {
    /**
     * 保存数据:直接将对象保存到数据库
     */
    @Test
    public void testSave(){
        // 创建对象
        Employee emp = new Employee();
        // 如果映射文件中设置主键的生成策略为 自增长(native),则此处设置的 id 值无效;
        // 当映射文件中设置主键的生成策略为 assigned 时,此处设置的 id 才有效;
        emp.setEmpId(3);
        emp.setEmpName("Lily");
        emp.setWorkDate(new Date());

        // 创建加载配置文件的管理类对象:用于加载配置文件
        Configuration config = new Configuration();

        // 加载主配置文件:默认加载 src/hibernate.cfg.xml
        config.configure();

        // 加载指定路径下,指定名称的主配置文件(一般不用)
//        config.configure("cn/config/hibernate.cfg.xml");

        // 根据加载的配置文件 创建 sessionFactory 工厂对象:用于管理 session
        SessionFactory sessionFactory = config.buildSessionFactory();

        // 创建 session;session 对象维护了一个连接(Connection),代表了与数据库连接的会话;
        // hibernate 最重要的对象,只要使用 hibernate 与数据库操作,都要用到这个对象;
        Session session = sessionFactory.openSession();

        // 开启事务:hibernate 要求所有与数据库的操作必须有事务的环境,否则报错;
        Transaction transaction = session.beginTransaction();

        // 保存:将对象保存到数据库
        session.save(emp);

        // 提交事务
        transaction.commit();
        // 结束会话,关闭连接
        session.close();
        sessionFactory.close();
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值