文件结构

maven 依赖

<!-- hibernate 核心依赖 -->
<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>5.4.22.Final</version>
</dependency>
<!-- mysql依赖 -->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version>
</dependency>
<!-- 单元测试 -->
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13</version><scope>test</scope>
</dependency>

1. 工具类 HibernateUtil.java

包com.xxx.utils
src/main/resources/mapper/Department.hbm.xml

package com.bdqn.utils;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;/*** Hibernate 工具类*/
public class HibernateUtil {// 会话工厂对象private static SessionFactory sessionFactory;// 使用静态代码读取配置文件static {// 1. 读取并解析配置文件Configuration configuration = new Configuration().configure();// 2. 创建会话工厂类sessionFactory = configuration.buildSessionFactory();}/*** 获取Session** @return*/public static Session getSession() {// return sessionFactory.openSession();    // 需要关闭资源return sessionFactory.getCurrentSession(); // 需要在hibernate文件中配置线程上线文}/*** 根据主键删除* */public static void closeSession(Session session){// 判断Session是否为空或Session是否处于打开状态if(session != null && session.isOpen()){session.close();    // 关闭 session}// 关闭工厂对象sessionFactory.close();}}

2. 实体类文件 实例

包:com.xxx.entity

package com.bdqn.entity;
/*** 部门类* */
public class Department {// int默认为0   Integer默认为空private Integer deptNo;     // 部门编号private String deptName;    // 部门名称private String location;    // 部门位置public Integer getDeptNo() {return deptNo;}public String getDeptName() {return deptName;}public String getLocation() {return location;}public void setDeptNo(Integer deptNo) {this.deptNo = deptNo;}public void setDeptName(String deptName) {this.deptName = deptName;}public void setLocation(String location) {this.location = location;}@Overridepublic String toString() {return "Department{" +"deptNo=" + deptNo +", deptName='" + deptName + '\'' +", location='" + location + '\'' +'}';}
}

3. hibernate配置文件 hibernate.cfg.xml

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><!-- Hibernate 连接数据库的基本信息 --><property name="connection.driver_class">com.mysql.jdbc.Driver</property><property name="connection.username">root</property><property name="connection.password">123456</property><property name="connection.url">jdbc:mysql://localhost:3306/myweb?useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=Asia/Shanghai</property><!-- 使用MYSQL的 innodb引擎 --><property name="hibernate.dialect.storage_engine">innodb</property><!--<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>--><!-- 根据实体类生成数据库表 --><!-- create:每次运行会重新创建表 --><!-- update: 修改表 --><property name="hibernate.hbm2ddl.auto">update</property><!-- 显示SQL语句 --><property name="show_sql">true</property><!-- 格式化SQL语句 --><property name="format_sql">true</property><!-- 线程上下文 对应获取Session第二种方法 --><property name="current_session_context_class">thread</property><!-- 加载映射文件 --><mapping resource="mapper/Department.hbm.xml"/></session-factory></hibernate-configuration>

4. 映射文件 实体类名.hbm.xml

src/main/resources/mapper/Department.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">
<hibernate-mapping><!--class标签:配置该实体类的数据库表name属性:该实体类的路径(全局路径、全限定名)table属性:该实体类关联的数据库表的名称--><class name="com.bdqn.entity.Department" table="department"><!--mmnnnid标签:配置主键属性name属性:实体类的属性名(严格区分大小写)type属性:该属性的数据类型column属性:对应数据表中的列名,不区分大小写,当属性名与列名一致时,可省略不写--><id name="deptNo" type="java.lang.Integer" column="deptNo"><!-- 配置主键生成策略 --><!-- assigned:主键有程序提供,默认生成策略,一般不用 --><!-- increment: 主键自增:先插叙表中的最大主键值,在此基础上+1操作,适用于mysql,sql server等数据库自增的不适合oracle --><generator class="increment"/></id><!--property标签:配置普通属性(非主键)name属性:实体类的属性名(严格区分大小写)type属性:该属性的数据类型column属性:对应数据库表中的列名,不区分大小写,当属性名与列名一致时,可省略不写--><property name="deptName" type="string" column="deptName"/><property name="location" type="java.lang.String"><column name="location"></column></property></class>
</hibernate-mapping>

5. 增

5.1 普通方法

/*** 添加部门*/
@Test
public void testAddDept() {// 1.读取hibernate配置文件Configuration configure = new Configuration().configure();// 2.创建SessionFactory工厂SessionFactory sessionFactory = configure.buildSessionFactory();// 3.创建Session对象// 方法一: 使用openSession()方法获取对象,必须关闭session对象// Session session = sessionFactory.openSession();// 方法二:此方法获取Session对象必须配置线程上下文Session session = sessionFactory.getCurrentSession();// 4.开启事务Transaction transaction = session.beginTransaction();// 5. 持久化操作Department department = new Department();// department.setDeptNo(6);          // 主键自增时这个失效department.setDeptName("市场部");department.setLocation("202");try {// 调用save()方法保存session.save(department);// 6.提交事务transaction.commit();} catch (Exception e) {e.printStackTrace();// 回滚事务transaction.rollback();} finally {// 关闭资源if (session != null) {session.close();}}}

6. 删

6.1 根据主键删除

/**
* 根据主键删除
* */
@Test
public void testDelete() {// 获取 sessionSession session = HibernateUtil.getSession();// 开启事务Transaction transaction = session.beginTransaction();try {// 根据主键查询  查不到返回 nullDepartment department = session.get(Department.class, 1);session.delete(department);transaction.commit();
//        System.out.println(department);} catch (Exception e) {// 关闭资源HibernateUtil.closeSession(session);}}

7. 改

7.1 先查询 后修改

/**
* 先查询 后修改:没有赋值的属性保持不变
* */
@Test
public void testUpdate() {// 获取 sessionSession session = HibernateUtil.getSession();// 开启事务Transaction transaction = session.beginTransaction();try {// 根据主键查询  查不到返回 nullDepartment department = session.get(Department.class, 2);// 修改department.setDeptName("666");// 提交事务transaction.commit();} catch (Exception e) {// 关闭资源HibernateUtil.closeSession(session);}
}

7.2 创建对象修改,没有赋值的属性会清空(不推荐)

/**
* 创建对象修改,没有赋值的属性会清空
* 一般不用
* */
@Test
public void testUpdate2() {// 获取 sessionSession session = HibernateUtil.getSession();// 开启事务Transaction transaction = session.beginTransaction();try {// 创建对象Department department = new Department();department.setDeptNo(2);department.setDeptName("123");// 修改session.update(department);// 提交事务transaction.commit();} catch (Exception e) {// 关闭资源HibernateUtil.closeSession(session);}
}

8. 查

8.1 根据主键查询 get()

/**
* 根据主键查询
* load(): 延迟加载
* 主键不存在时 报错:org.hibernate.ObjectNotFoundException:
* */
@Test
public void testLoad(){// 获取 sessionSession session = HibernateUtil.getSession();// 开启事务Transaction transaction = session.beginTransaction();// 根据主键查询  查不到返回 nullDepartment department = session.load(Department.class, 1);System.out.println(department);// 关闭资源HibernateUtil.closeSession(session);}

8.2 根据主键查询 load()

/**
* 根据主键查询
* load(): 延迟加载
* 主键不存在时 报错:org.hibernate.ObjectNotFoundException:
* */
@Test
public void testLoad(){// 获取 sessionSession session = HibernateUtil.getSession();// 开启事务Transaction transaction = session.beginTransaction();// 根据主键查询  查不到返回 nullDepartment department = session.load(Department.class, 1);System.out.println(department);// 关闭资源HibernateUtil.closeSession(session);
}

9. 脏值检查

/**
* 脏值检查
* */
@Test
public void testState(){// 获取SessionSession session = HibernateUtil.getSession();// 开启事务
//        Transaction transaction = (Department) session.beginTransaction();Transaction transaction = session.beginTransaction();try{// 根据主键查询Department department = session.get(Department.class, 2); // 研发部 ---> 内存(副本、快照)// 赋值department.setDeptName("大佬");transaction.commit();} catch (Exception e){e.printStackTrace();transaction.rollback();} finally {// 关闭资源HibernateUtil.closeSession(session);}
}

10. 增删改查 其他方法

10.1 保存或更新 saveOrUpdate()

  • 主键生产策略不能是 assigned
  • 新增:没有指定主键的情况下回执行新增操作
  • 修改:当指定主键是存在的,执行修改操作,若主键不存在,会触发空指针异常
/**
* saveOrUpdate(): 主键生产策略不能是 assigned
*      新增:没有指定主键的情况下回执行新增操作
*      修改:当指定主键是存在的,执行修改操作,若主键不存在,会触发空指针异常
*
* */
@Test
public void testSaveUpdate(){// 获取SessionSession session = HibernateUtil.getSession();// 开启事务Transaction transaction = session.beginTransaction();try{// 查询数据Department department = session.get(Department.class, 1);// 修改数据department.setDeptName("高管");// 调用方法session.saveOrUpdate(department);// 提交事务transaction.commit();} catch (Exception e){e.printStackTrace();transaction.rollback();} finally {// 关闭资源HibernateUtil.closeSession(session);}}

10.1 新增 meerge()

新增:没有指定主键的情况下会执行新增操作;指定主键不存在,也会执行新增(先根据主键查询,对象为空则新增)

/**
* meerge():
*      新增:没有指定主键的情况下会执行新增操作;指定主键不存在,也会执行新增(先根据主键查询,对象为空则新增)
* */
@Test
public void testMerge(){// 获取SessionSession session = HibernateUtil.getSession();// 开启事务Transaction transaction = session.beginTransaction();try{// 查询数据Department department = session.get(Department.class, 1);// 修改数据department.setDeptName("高管");department.setDeptNo(1000);// 调用方法session.merge(department);// 提交事务transaction.commit();} catch (Exception e){e.printStackTrace();transaction.rollback();} finally {// 关闭资源HibernateUtil.closeSession(session);}}

Hibernate 基本配置文件+基本增删改查相关推荐

  1. Hibernate 多对多的增删改查。

    inverse Hibernate 多对多的增删改查你得先了解inverse功能作用. 百度文档: Inverse是hibernate双向关系中的基本概念.inverse的真正作用就是指定由哪一方来维 ...

  2. Hibernate入门案例及增删改查

    一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student {private Integer sid;private Int ...

  3. 利用Hibernate进行数据库的增删改查

    Hibernate框架的主要作用是操纵数据库 因此其可以代替servlet中的DAO层,无需再写sql语句 因此也有对应的数据库增删改查的方法 1.添加数据 package com.oracle.se ...

  4. A.CTable开源框架Mybatis增强自动创建表/更新表结构/实现类似hibernate共通的增删改查-mybatis-enhance-actable

    mybatis-enhance-actable-1.3.1.RELEASE 项目已更新既支持传统Spring项目也支持Springboot项目,同时支持tk.mybatis能够支持更强大的CUDR(为 ...

  5. MyBatis笔记——配置文件完成增删改查

    l 完成品牌数据的增删改查操作 § 要完成的功能列表清单:□ 查询® 查询所有数据® 查看详情® 条件查询□ 添加□ 修改® 修改全部字段® 修改动态字段□ 删除® 删除一个® 批量删除准备环境:§ ...

  6. S2SH框架入门之使用hibernate进行基础的增删改查

    1.先建session: Session session = HibernateSessionFactory.getSession();Transaction tr=session.beginTran ...

  7. MyBatis——配置文件完成增删改查——查询

    要完成的功能列表清单: 1.查询 查询所有数据 查看详情 条件查询 2.添加 3.修改 修改全部字段 修改动态字段 4.删除 删除一个 批量删除 一.准备环境 数据库表tb_brand 实体类Bran ...

  8. 【Python】Flask框架系列(二):安装、配置文件、增删改查

    MySQL-python中间件的安装 打开这里链接:https://www.lfd.uci.edu/~gohlke/pythonlibs/ 这里32与64的选择不是看操作系统的位数,而是看python ...

  9. hibernate增删改查的标准范例

    一个套用hibernate框架编写的增删改查小范例,此处分享一下,经过多次修改,从代码规范和后期维护,以及简洁程度上说:算是很标准的书写格式: package www.csdn.net.bookhom ...

最新文章

  1. 分布式文件系统MooseFS初探
  2. python3 获取当前路径_如何使用python3获取当前路径及os.path.dirname的使用
  3. AndroidStudio 生成Jar并混淆
  4. wps怎么投递简历发到boss直聘_BOSS直聘情色招聘:洗脑传销广告漫天飞,还陷虚假招聘...
  5. php源代码压缩,PHP_PHP 源代码压缩小工具,使用方法:(在命令行运行) 复 - phpStudy...
  6. Jerry的ABAP, Java和JavaScript乱炖
  7. 软测管理工具实践-01
  8. mysql下载64位 csdn_Linunx-CentOS7安装mysql-5.7.23-linux-glibc2.12-x86_64.tar
  9. java数组有跨类建立对象_50个性能优化的细节:Java高级开发必会,来学习下吧...
  10. CUDA各个版本下载网址
  11. 域名检测监控报警系统
  12. Redis(二) -- redis.conf详解(redis6)
  13. 使用Easyexcel对Excel进行读写操作
  14. javascript实现汉诺塔
  15. 一分钟读懂广告投放各计费CPM、CPC等(公式推导干货)
  16. c语言整形符号位_C语言中整型无符号二进制数的表示问题
  17. 车辆侧翻预警系统介绍
  18. 科研小技巧——制作学术会议报告视频的完整流程
  19. mysql使用max函数+将类似123的字符型数据转换成数据类型
  20. 淘宝app无法抓包问题

热门文章

  1. android AsyncTask 的分析与运用
  2. C#导出EXCEL的几种方法
  3. junit--eclipse插件
  4. LeetCode: 107_Binary Tree Level Order Traversal II | 二叉树自底向上的层次遍历 | Easy
  5. iOS上获取iTunes音乐权限
  6. Linux 常用命令使用方法
  7. 虚拟化系列-VMware vSphere 5.1 高可用性
  8. DataBinder.Eval()方法绑定数据
  9. 黑客入侵“在线影院”全过程2
  10. 32位地址的寻址方式