1.1 问题

使用Hibernate实现对员工表的增、删、改、查。

1.2 方案

Hibernate使用步骤:

  1. 导入Hibernate包,以及数据库驱动包。
  2. 引入Hibernate主配置文件hibernate.cfg.xml。
  3. 创建实体类。
  4. 创建映射关系文件。
  5. 使用Hibernate常用API执行增删改查操作。

1.3 步骤

实现此案例需要按照如下步骤进行。

环境为:myeclipse 6.5 ,mysql 5.0 ,Hibernate 3 。

步骤一:准备工作创建员工表EMP,建表语句如下:

CREATE TABLE `emp` (
`ID` INT(4) NOT NULL AUTO_INCREMENT,
`NAME` VARCHAR(50) NOT NULL,
`AGE` INT(11) DEFAULT NULL,
`SALARY` DOUBLE(7,2) DEFAULT NULL,
`MARRY` CHAR(1) DEFAULT NULL,
`BIRTHDAY` DATE DEFAULT NULL,
`LAST_LOGIN_TIME` DATE DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=INNODB DEFAULT CHARSET=utf8

创建一个WEB项目,名为Hibernate。

步骤二:导入Hibernate开发包,以及数据库驱动包,完成后项目的包结构如下图:

网盘下载jar包: http://yunpan.cn/cmRG5gzdMtGMX  访问密码 3747

步骤三:引入Hibernate主配置文件

将Hibernate主配置文件hibernate.cfg.xml复制到项目中,放在src根路径下。并在主配置文件中配置好数据库连接信息,以及Hibernate框架参数,代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 数据库连接信息,根据自己的数据库进行配置--> <property name="connection.url">jdbc:mysql://localhost:3306/souvc</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property> <!-- Hibernate配置信息 -->
<!-- dialect方言,用于配置生成针对哪个数据库的SQL语句 -->
<property name="dialect">
<!-- 方言类,Hibernate提供的,用于封装某种特定数据库的方言 -->
<!-- org.hibernate.dialect.OracleDialect -->
org.hibernate.dialect.MySQLDialect
</property>
<!-- Hibernate生成的SQL是否输出到控制台 -->
<property name="show_sql">true</property>
<!-- 将SQL输出时是否格式化 -->
<property name="format_sql">true</property> </session-factory>
</hibernate-configuration>

步骤四:创建实体类

创建包com.souvc.entity,并在该包下创建员工表对应的实体类Emp.java,用于封装员工表的数据,代码如下:

package comsouvc.entity;

import java.sql.Date;
import java.sql.Timestamp; public class Emp {
private Integer id;
private String name;
private Integer age;
private Double salary;
private Boolean marry;
private Date birthday;
private Timestamp lastLoginTime; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public Double getSalary() {
return salary;
} public void setSalary(Double salary) {
this.salary = salary;
} public Boolean getMarry() {
return marry;
} public void setMarry(Boolean marry) {
this.marry = marry;
} public Date getBirthday() {
return birthday;
} public void setBirthday(Date birthday) {
this.birthday = birthday;
} public Timestamp getLastLoginTime() {
return lastLoginTime;
} public void setLastLoginTime(Timestamp lastLoginTime) {
this.lastLoginTime = lastLoginTime;
}
}

步骤五:创建映射关系文件

在com.souvc.entity包下,创建员工实体类的映射关系文件,名为Emp.hbm.xml,并在该文件中配置实体类和表的关系,以及类中属性和表中字段的关系,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 配置实体类和表的关系 -->
<class name="com.souvc.entity.Emp" table="emp">
<!-- 配置主键属性和字段的关系 -->
<id name="id" type="java.lang.Integer" column="id">
<!-- 用来指明主键的生成方式 -->
<!--
<generator class="sequence">
<param name="sequence">emp_seq</param>
</generator>
-->
<generator class="native">
</generator>
</id> <!-- 配置实体类中属性与表中字段的关系 -->
<property name="name" type="java.lang.String" column="name" />
<property name="age" type="java.lang.Integer" column="age" />
<property name="salary" type="java.lang.Double" column="salary" />
<property name="birthday" type="java.sql.Date"
column="birthday" />
<property name="lastLoginTime" type="java.sql.Timestamp"
column="last_login_time" />
</class>
</hibernate-mapping>

步骤六:声明映射关系文件

在主配置文件hibernate.cfg.xml中,声明映射关系文件Emp.hbm.xml,代码如下:

<!-- 声明映射关系文件 -->
<mapping resource="com/souvc/entity/Emp.hbm.xml" />

完成代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 数据库连接信息,根据自己的数据库进行配置
<property name="connection.url">
jdbc:oracle:thin:@localhost:1521:xe
</property>
<property name="connection.username">lhh</property>
<property name="connection.password">123456</property>
<property name="connection.driver_class">
oracle.jdbc.OracleDriver
</property>
--> <property name="connection.url">jdbc:mysql://localhost:3306/souvc</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property> <!-- Hibernate配置信息 -->
<!-- dialect方言,用于配置生成针对哪个数据库的SQL语句 -->
<property name="dialect">
<!-- 方言类,Hibernate提供的,用于封装某种特定数据库的方言 -->
<!-- org.hibernate.dialect.OracleDialect -->
org.hibernate.dialect.MySQLDialect
</property>
<!-- Hibernate生成的SQL是否输出到控制台 -->
<property name="show_sql">true</property>
<!-- 将SQL输出时是否格式化 -->
<property name="format_sql">true</property> <!-- 声明映射关系文件 -->
<mapping resource="com/souvc/entity/Emp.hbm.xml" /> </session-factory>
</hibernate-configuration>

步骤七:创建Session工具类

创建HibernateUtil工具类,用于创建Session对象,代码如下:

package com.souvc.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class HibernateUtil {
private static SessionFactory sessionFactory; static {
// 加载Hibernate主配置文件
Configuration conf = new Configuration();
conf.configure("/hibernate.cfg.xml");
sessionFactory = conf.buildSessionFactory();
} /**
* 创建session
*/
public static Session getSession() {
return sessionFactory.openSession();
} public static void main(String[] args) {
System.out.println(getSession());
}
}

输出效果:

SessionImpl(PersistenceContext[entityKeys=[],collectionKeys=[]];ActionQueue[insertions=[] updates=[] deletions=[] collectionCreations=[] collectionRemovals=[] collectionUpdates=[]])

步骤八:练习使用Hibernate对员工表进行增删改查

创建包com.souvc.test,并在该包下创建一个JUNIT测试类,并在类中使用Hibernate写出对EMP表的增删改查的方法,代码如下:

package com.souvc.test;

import java.sql.Date;
import java.sql.Timestamp;
import java.util.List; import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test; import com.souvc.util.HibernateUtil;
import comsouvc.entity.Emp; /**
* 演示Hibernate的基本使用
*/
public class TestEmp {
/**
* 新增emp
*/
@Test
public void add() {
// 模拟要新增的emp
Emp e = new Emp();
e.setName("ggg");
e.setAge(29);
e.setMarry(false);
e.setSalary(8000.00);
e.setBirthday(Date.valueOf("1983-10-20"));
e.setLastLoginTime(new Timestamp(System.currentTimeMillis()));
// 获取session
Session session = HibernateUtil.getSession();
// 开启事务
Transaction ts = session.beginTransaction();
try {
// 执行新增
session.save(e);
// 提交事务
ts.commit();
} catch (HibernateException e1) {
e1.printStackTrace();
// 回滚事务
ts.rollback();
} finally {
session.close();
}
} /**
* 根据ID查询emp
*/
@Test
public void findById() {
Session session = HibernateUtil.getSession();
Emp emp = (Emp) session.get(Emp.class, 1);
System.out.println(emp.getName());
System.out.println(emp.getBirthday());
System.out.println(emp.getLastLoginTime());
session.close();
} /**
* 修改emp
*/
@Test
public void update() {
Session session = HibernateUtil.getSession();
// 查询要修改的数据
Emp emp = (Emp) session.get(Emp.class, 1);
// 开启事务
Transaction ts = session.beginTransaction();
try {
// 模拟修改数据
emp.setName("ee");
emp.setAge(20);
// 执行修改
session.update(emp);
// 提交事务
ts.commit();
} catch (HibernateException e) {
e.printStackTrace();
// 回滚事务
ts.rollback();
} finally {
// 关闭连接
session.close();
}
} /**
* 删除emp
*/
@Test
public void delete() {
Session session = HibernateUtil.getSession();
Emp emp = (Emp) session.get(Emp.class, 1);
Transaction ts = session.beginTransaction();
try {
session.delete(emp);
ts.commit();
} catch (HibernateException e) {
e.printStackTrace();
ts.rollback();
} finally {
session.close();
}
} /**
* 查询全部emp
*/
@Test
public void findAll() {
String hql = "from Emp";
Session session = HibernateUtil.getSession();
Query query = session.createQuery(hql);
List<Emp> emps = query.list();
for (Emp e : emps) {
System.out.println(e.getName());
}
session.close();
}
}

九、实例的效果图如下:

增加:

通过id查询:

查询全部:

更新:

删除:

温馨提示:注意数据库要存在id为1 的数据,才能进行这些数据的操作。根据自己里面的数据来定id。

源码如下: http://yunpan.cn/cmR97XCh6SvB6  访问密码 afb4

Hibernate案例-------基于xml配置,使用Hibernate实现对员工表的增、删、改、查功能的更多相关文章

  1. MyBatis的配置与使用(增,删,改,查)

    ---恢复内容开始--- Mybatis入门介绍 一.MyBatis介绍 什么是MyBtis? MyBatis 是一个简化和实现了 Java 数据持久化层(persistence layer)的开源框 ...

  2. Sping MVC不使用任何注解处理(jQuery)Ajax请求(基于XML配置)

    1. Spring Spring框架是一个轻量级的解决方案,是一个潜在的一站式商店,用于构建企业就绪的应用程序.Spring框架是一个Java平台,为开发Java应用程序提供全面的基础架构支持.Spr ...

  3. Spring学习之旅(七)基于XML配置与基于AspectJ注解配置的AOP编程比较

    本篇博文用一个稍复杂点的案例来对比一下基于XML配置与基于AspectJ注解配置的AOP编程的不同. 相关引入包等Spring  AOP编程准备,请参考小编的其他博文,这里不再赘述. 案例要求: 写一 ...

  4. Unit03: Spring Web MVC简介 、 基于XML配置的MVC应用 、 基于注解配置的MVC应用

    Unit03: Spring Web MVC简介 . 基于XML配置的MVC应用 . 基于注解配置的MVC应用 springmvc (1)springmvc是什么? 是一个mvc框架,用来简化基于mv ...

  5. [刘阳Java]_Spring AOP基于XML配置介绍_第9讲

    基于注解配置的Spring AOP固然简单,但是这节我们会给大家介绍基于XML配置的AOP是如何应用的.为什么这么说了,因为后面我们还会介绍到Spring对Dao操作的事务管理(基于AOP的XML文件 ...

  6. 【Spring Framework】Spring入门教程(二)基于xml配置对象容器

    基于xml配置对象容器--xml 标签说明 alias标签 作用:为已配置的bean设置别名 --applicationContext.xml配置文件 <?xml version="1 ...

  7. struts_20_对Action中所有方法、某一个方法进行输入校验(基于XML配置方式实现输入校验)

    第01步:导包 第02步:配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app ...

  8. struts2视频学习笔记 22-23(基于XML配置方式实现对action的所有方法及部分方法进行校验)

    课时22 基于XML配置方式实现对action的所有方法进行校验   使用基于XML配置方式实现输入校验时,Action也需要继承ActionSupport,并且提供校验文件,校验文件和action类 ...

  9. 一步一步深入spring(6)--使用基于XML配置的spring实现的AOP

    上节我们提到了使用基于注解实现的AOP,这节我们将用基于xml配置的方式来实现的AOP. 1.首先建立一个类,作为切面类,这个类主要用来实现注解中各种通知要实现的方法. package com.yan ...

随机推荐

  1. Scrum 项目 6.0

    -------------------------6.0------------------------------------ sprint演示 1.坚持所有的sprint都结束于演示. 团队的成果 ...

  2. OpenProcess打开进程返回错误的问题

    问题描述 项目中需要做一个小功能:能够查看系统中当前正在运行的进程的内存信息,如内存块类型.分配状态.访问权限等.如下图所示: 需要的信息和上图相差无几.说起来也不算太难,毕竟现成的API已经提供了. ...

  3. What Is Seedwork

    最近研究DDD,发现很多DDD的例子都有一个Seedwork的项目.从名字我没办法推断是什么作用,看代码里面是一些公共的接口跟基类.google了一会基本都是英文资料.发现两篇大作.下面是摘要: 1. ...

  4. 2015年百度之星初赛(1) --- A 超级赛亚ACMer

    超级赛亚ACMer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem D ...

  5. css 布局absolute与relative的区别

    absolute:当使用时,表示在文档流中没有实际存在位置(浮动),在不设置任何方位值时,只能按兵不动,当设置了方位值之后,会紧接着去寻找距离最近的能够将它包含住的父级元素,然后进行定位. relat ...

  6. js 倒计时 跳转

    1. setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式. setTimeout() 只执行 code 一次.如果要多次调用,请使用 setInterval() 或者让 code ...

  7. C语言范例学习03-中

    栈和队列 这两者都是重要的数据结构,都是线性结构.它们在日后的软件开发中有着重大作用.后面会有实例讲解. 两者区别和联系,其实总结起来就一句.栈,后进先出:队列,先进先出. 可以将栈与队列的存储空间比 ...

  8. Android笔记——什么是json?json如何使用?

    什么是json 什么是json,json是什么,json如何使用 JSON是JavaScript Object Notation的缩写,可见JSON来源于JavaScript.JSON数据是一系列键值 ...

  9. new 小记

    new运算符 能根据需求来创建对象的实例 通过与构造函数和一系列初始化过程中使用的可选参数来创建对象的实例,对象创建完成后,新创建的对象继承自构造函数的原型 function Person(name) ...

  10. python基础之正则表达式。

    简介 就其本质而言,正则表达式是内嵌在python内,由re模块实现,小型的专业化语言,最后由c写的匹配引擎执行.正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来 ...