hibernate基础增删查改简单实例

hibernate 基础理论知识网上很多,可以百度和google.这里不做多的介绍,以一个User表来开展例子

建一个web-project

我这里用了junit单元测试环境来进行增删查改的测试,别的不多说,导包就行

本次用到的所有jar包下载地址:

链接:http://pan.baidu.com/s/1skHrg0t 密码:dbe2

1、hibernate配置文件(hibernate.cfg.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>
        <!--数据库URL -->
        <property name="connection.url">
            jdbc:oracle:thin:@127.0.0.1:1521:orcl
        </property>
        <!--数据库用户 -->
        <property name="connection.username">rent</property>
        <!--数据库用户密码 -->
        <property name="connection.password">rent</property>
        <!--数据库JDBC驱动 -->
        <property name="connection.driver_class">
            oracle.jdbc.driver.OracleDriver
        </property>
        <!--每个数据库都有其对应的Dialect以匹配其平台特性 -->
        <property name="dialect">
            org.hibernate.dialect.Oracle9Dialect
        </property>
        <!--是否将运行期生成的SQL输出到日志以供调试 -->
        <property name="show_sql">true</property>
        <!--是否格式化SQL -->
        <property name="format_sql">true</property>

        <mapping resource="com/cn/entity/User.hbm.xml" />

    </session-factory>

</hibernate-configuration>

2、映射文件(User.hbm.xml),主要是对象一表的映射

<?xml version="1.0"?>
<!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.cn.entity.User" table="users" >
        <id name="id" column="id" type="java.lang.Integer">
            <!-- 主键的生成策略 -->
            <generator class="assigned"/>
        </id>
        <property name="name" type="java.lang.String" column="name"/>
        <property name="password" type="java.lang.String" column="password"/>
         <property name="telephone" type="java.lang.String" column="telephone"/>
          <property name="username" type="java.lang.String" column="username"/>
           <property name="isadmin" type="java.lang.String" column="isadmin"/>

    </class>
</hibernate-mapping>
<!--
    class ==== 表
    对象    =====一行数据
    属性     ===== 列
    属性的类型    ==== 列的类型

 -->

3、我的数据库表结构。这里表结构与实体类中属性的名称和类型要保持一致

4、实体类(User.java)

package com.cn.entity;

import java.io.Serializable;

public class User implements Serializable {
    private Integer id;
    private String name;
    private String password;
    private String telephone;
    private String username;
    private String isadmin;
    public User(Integer id, String name, String password, String telephone,
            String username, String isadmin) {
        super();
        this.id = id;
        this.name = name;
        this.password = password;
        this.telephone = telephone;
        this.username = username;
        this.isadmin = isadmin;
    }
    public User() {
        super();
        // TODO Auto-generated constructor stub
    }
    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 String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getTelephone() {
        return telephone;
    }
    public void setTelephone(String telephone) {
        this.telephone = telephone;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getIsadmin() {
        return isadmin;
    }
    public void setIsadmin(String isadmin) {
        this.isadmin = isadmin;
    }

}

重要的事再说一遍:为避免以后可能遇到的问题和麻烦,强烈要求实体类属性和类型与数据库表中字段名称和类型保持一致。实体类中的类型用包装类的类型

5、建junit测试环境:新建junit文件

帖代码:

package com.cn.test;

import static org.junit.Assert.*;

import java.io.Serializable;

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

import com.cn.entity.User;

public class TestHibernate {

    @Test
    public void add() {
        // 读取配置文件
        Configuration config = new Configuration().configure();
        SessionFactory factory = config.buildSessionFactory();
        // 得到当前连接数据库的session
        Session session = factory.openSession();
        // 开启事务
        Transaction tx = session.beginTransaction();
        try {
            User user = new User(15, "liujuan1", "123456", "13610249898",
                    "admin", "yes");
            Serializable id = session.save(user);

            if (id != null) {
                System.out.println("新增成功!");
                tx.commit();// 提交事务
            } else {
                tx.rollback();// 失败回滚
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            session.close();
        }
    }

    @Test
    public void select() {
        // 读取配置文件
        Configuration config = new Configuration().configure();
        SessionFactory factory = config.buildSessionFactory();
        // 得到当前连接数据库的session
        Session session = factory.openSession();
        // 开启事务
        Transaction tx = session.beginTransaction();
        try {
            // 查询get
            User user = (User) session.get(User.class, 15);
            System.out.println("查询结果:" + user.getName());
            tx.commit();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            session.close();
        }
    }

    @Test
    public void update() {
        // 读取配置文件
        Configuration config = new Configuration().configure();
        SessionFactory factory = config.buildSessionFactory();
        // 得到当前连接数据库的session
        Session session = factory.openSession();
        // 开启事务
        Transaction tx = session.beginTransaction();
        try {
            // 第1种:update持久化修改:先查询,与数据库有关联
        /*    User user = (User) session.get(User.class, 15);
            user.setName("duheyu");
            user.setPassword("duheyu");
            session.update(user);
            tx.commit();*/

            //第2种:瞬时状态下修改,会set全部字段,不修改的字段全部清空了
            /*User user =new User();
            user.setId(15);
            user.setName("duxinke");
            user.setPassword("duxinke");
            session.update(user);
            tx.commit();*/

            //第3种,新增或修改,拿瞬时状态来测试
            User user =new User();
            user.setId(15);
            user.setName("duxinke");
            user.setPassword("duxinke");
            session.saveOrUpdate(user);
            tx.commit();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            session.close();
        }
    }

    @Test
    public void delete(){
        //读取并解析配置文件hibernate.cfg.xml
        Configuration config=new Configuration().configure();
        //读取并解析映射信息,User.hbm.xml,创建SessionFactory
        SessionFactory factory = config.buildSessionFactory();
        //打开一个连接数据库的Session
        Session session = factory.openSession();
        //开始一个事务,增删除查改操作必须有,查询操作可选
        Transaction tx =session.beginTransaction();
        //执行操作,都是用当前Session执行
        try {
            User user =new User();
            user.setId(15);
            session.delete(user);
            tx.commit();
        } catch (Exception e) {
            // TODO: handle exception
        }
    }

}

本次是以帖代码为主,不讲原理,如果你懂一点,看的话,会非常容易上手做项目。我做东西就是的,原理似懂非懂,上网搜代码,下来改改,就能用了。还好我的环境对代码质量和性能要求不是太严格。一切以工具能运行即可。

时间: 2024-10-29 19:08:14

hibernate基础增删查改简单实例的相关文章

Hibernate的增删查改

删除: 1.org.springframework.dao.DataIntegrityViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`life`.`tb_ad`, CONSTRAINT `FK690A3947B8D3F97` FOREIGN KEY (`coupon_id`) REFERENCES `tb_coupon` (`id`)); 在删除对象coupon时

[Hibernate] 基本增删查改

本文记录,Java 应用通过 Hibernate 对数据库 MySQL 进行基本的增删改查操作. 本例子的目录结构如下 hibernate.cfg.xml 存储数据库信息,如数据库类型,账号密码,数据库名称 Empoyee.hbm.xml,声明 java 简单对象和数据库表结构的对应关系 Employee.java,java 简单对象,用于声明数据结构 ManageEmployee,管理 Employee,并对外提供操作 Employee 对象数据的接口. App.java,演示本案例 代码详情

php+mysql基础增删查改

php连接数据库有MySQLi和PDO两种方法 以下以PDO为例 一.创建数据库表(students) 二.连接数据库(db.php) $dsn:数据库连接服务器,数据库名称$db_user:登录数据库名称$db_pass:登录数据库密码 1 <?php 2 $dsn="mysql:dbname=phpsql;host=localhost;charset=utf8"; 3 $db_user='root'; 4 $db_pass='123456'; 5 try{ 6 $pdo=ne

Asp.Net+Oracle+EasyUI简单增删查改

Asp.Net+Oracle+EasyUI简单增删查改 概要:网上有很多关于EasyUI前端框架的资料,本人在学习的基础上,基于自己之前搭建的框架(Oracle+Ado.Net),配合EasyUI实现一套简单的增删查改. 正文: 在实体层新建一个EMP.cs,继承至BaseModel 1 namespace myOracle.Model 2 { 3 public class Emp:BaseModel 4 { 5 public Emp() 6 { 7 base.PrimaryKey = "emp

Android SQLite最简单demo实现(增删查改)

本来不太想写这篇博客的,但是看到网上的关于android数据库操作的博文都讲得很详细,对于像我这样的新手入门了解SQLite的基本操作有一定难度,所以我参考了网上的一些博客文章,并自己亲自摸索了一遍,希望写出这么一篇博文来记录SQLite的最基本操作,同时也希望能够对android的新手们有些帮助. 参考博客:http://www.20864.com/201247/274.html 这里只是一个示范性的demo,并没实现什么具体功能,只实现了对数据库的增删查改操作. 以下是实现demo的步骤:

SpringMVC+hibernate整合小例子,用户的增删查改

SpringMVC+hibernate整合小例子,用户的增删查改 对于使用框架写项目,我的第一反应的把所有需要的jar文件引入. 因为我用的是JDK1.8,当使用spring3.2 注解的时候会出现问题,所以最终使用的spring4.0.  hibernate使用的版本为4.0 .至于一些依赖包的版本就是看别人的资料拿的. 然后看下整体的项目结构 第一步写的是web.xml配置文件,当然有写东西是后面加上去的,不是一步到位的,比如说控制post方式的乱码.以及无法时候JS文件等一些静态文件,后面

mysql基础知识之增删查改使用介绍

 mysql基础知识之增删查改使用介绍 本文主要介绍mysql常用的SELECT.INSERT.UPDATE.DELETE语句的使用,数据库的安装这里不做介绍,并且事先已经准备好相关数据. 本文中使用的student表中的数据如下: mysql> SELECT * FROM student; 一.SELECT语句的使用 1.单表查询 语法格式: SELECT culom1,culom2,culom3 FROM TABLE_NAME; 可以改变字段显示顺序 2.WHERE子句查询 语法格式: SE

nodejs连接mysql并进行简单的增删查改

最近在入门nodejs,正好学习到了如何使用nodejs进行数据库的连接,觉得比较重要,便写一下随笔,简单地记录一下 使用在安装好node之后,我们可以使用npm命令,在项目的根目录,安装nodejs中的mysql模块 npm install mysql 在连接数据库之前,要先引入nodejs连接处理mysql的模块 var mysql = require('mysql'); 类似php连接mysql的方式,编写连接代码 //使用nodejs处理mysql的模块,使用创建连接方法,创建与mysq

asp.net MVC最简单的增删查改!(详)

折腾了两天搞出来,但原理性的东西还不是很懂,废话不多说上图上代码 然后右键models,新建一个数据模型 注意我添加命名为lianxi 添加后如上 接下来在controllers添加控制器还有在Views中添加视图 注意控制器lianxi和视图的名字要一致,然后视图我是添加了3个分别是Index,insert,Modify,在控制器里分别有三个对应的函数 每当用URL访问视图时,他就调用了controllers对应的方法,例如 jiaEntities 就是建立模式时那个数据链接的名字