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

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: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>

    </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

时间: 2024-08-25 13:43:03

使用Hibernate实现对员工表的增、删、改、查的相关文章

Python---MySQL数据库之四大操作(增 删 改 查)

一.对数据库,表,记录---四大操作(增 删 改 查) 1.操作数据库 (1)对数据库(文件夹):进行增加操作 Create  database  库名; 例:  Create  database  db7 ; 查询库: show  databases; 结果: +-----------------------------+ | Database                   | +----------------------------+ | information_schema | |

ADO.NET 增 删 改 查

ADO.NET:(数据访问技术)就是将C#和MSSQL连接起来的一个纽带 可以通过ADO.NET将内存中的临时数据写入到数据库中 也可以将数据库中的数据提取到内存中供程序调用 ADO.NET所有数据访问技术的基础 连接数据库基本格式:需要两个类1.数据库连接类 SqlConnection2.数据库操作类 SqlCommand 1.连接数据库写连接字符串,立马就要想到有4点要写完,1.连接哪台服务器,2.连接哪个数据库,3.连接用户名,4.密码string sql = "server=.(服务器i

数据库基础学习4--表格的 增 删 改 查(简单查询与高级查询)

一.增 C:create 增加,创建,向数据库里面添加数据. insert into Fruit values('K009','苹果',3.0,'高青',90,'') insert into Fruit(Ids,Name,Price,Source,Numbers) values('K010','苹果',3.0,'高青',90) 二.改 U:update修改,从数据库表里面修改数据. update Fruit set Source='烟台' where Ids='K001' 三.删 D:delet

SQL 增/删/改/查 (总结)

1.增 INSERT  INTO  表名  VALUES (" "," ") ; INSERT INTO 表名(字段)  VALUES(" "); 2. 删 DELETE   FROM 表名  WHERE  ... 3.改 UPDATE  表名 SET   ... WHERE  ... 4.查 SELECT × FROM  表名 ORDER BY ...

oracle 11g 建库 建表 增 删 改 查 约束

一.建库 1.(点击左上角带绿色+号的按钮) 2.(进入这个界面,passowrd为密码.填写完后点击下面一排的Test按钮进行测试,无异常就点击Connect) 二.建表 1-1. create table 表名1( Tid number(4) --primary key 列级约束(主键), Tname varchar(10) --ont null  非空约束,只能定义在列级约束, Tsex varchar2(2)--check (tsex='男'  or  tsex='女') 检查约束, T

php基础:数据库的含义和基本操作 增 删 改 查

//数据库是帮我们管理数据的一个软件,我们将数据给他,放进数据库里.他能很稳妥的帮我们管理起来,且效率很高.//php的大部分工作就是  php->连接数据库->写入数据->查出数据->格式化数据->显示出来,//数据库管理数据是以表的形式组成的,多行多列,表头声明好了,一个表创建好了,剩下的就是往里面添加数据 多张表放在一个文件夹里面就形成了库  mysql服务器帮我们管理多个库C:\wamp\bin\mysql\mysql5.6.12\data   数据库中的数据放在这个

Android 增,删,改,查 通讯录中的联系人

一.权限 操作通讯录必须在AndroidManifest.xml中先添加2个权限, <uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission> <uses-permission android:name="android.permission.WRITE_CONTACTS"></uses-permission>

js数组的管理[增,删,改,查]

今天在设计表单的时候遇到对数组的一些处理的问题,比如说怎么创建一个数组,然后牵扯到数组的增删改查的方法.请看API FF: Firefox, N: Netscape, IE: Internet Explorer 方法 描述 FF N IE concat() 连接两个或更多的数组,并返回结果. 1 4 4 join() 把数组的所有元素放入一个字符串.元素通过指定的分隔符进行分隔. 1 3 4 pop() 删除并返回数组的最后一个元素 1 4 5.5 push() 向数组的末尾添加一个或更多元素,

网站的增 / 删 / 改 / 查 时常用的 sql 语句

最近在学习数据库 php + mysql 的基本的 crud 的操作,记录碰到的坑供自己参考.crud中需要用到的sql语句还是比较多的,共包括以下几个内容: 查询所有数据 查询表中某个字段 查询并根据id升序排列 新增,在 url 中传参 新增,通过对象传参 删除 分页 修改 表结构: 查询并根据表id排序: //查询表 t_users 的数据并根据表 user_id 升序排列 $sql = "SELECT * FROM `t_users` ORDER BY user_id"; 查询