这篇文章主要讲解:

  1>.对Hibernate使用的一些简单封装;

·  2>.在单元测试中,使用Hibernate的封装的工具进行增删改查的测试

1.目录结构展示

2.代码展示

2.0 配置文件 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>
<!-- 数据库连接信息 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 默认 localhost:3306 -->
<property name="connection.url">jdbc:mysql:///test</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property> <!-- 通用配置 -->
<!-- 方言:hibernate要支持多种数据库,根据不同数据库生成对应的sql语句
告诉hibernate使用的什么数据库,以便生成对应数据库的sql
-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 打印sql语句 -->
<property name="show_sql">true</property>
<!-- 格式化sql -->
<property name="format_sql">true</property>
<!-- 映射信息 注意映射文件存放的是文档路径 需要用/ -->
<mapping resource="cn/vincent/pojo/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>

2.1 pojo 类

User

package cn.vincent.pojo;

import java.io.Serializable;

public class User implements Serializable {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + id;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
User other = (User) obj;
if (age != other.age)
return false;
if (id != other.id)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
} }

User.hbm.xml 即User的映射

<?xml version="1.0" encoding="UTF-8"?>
<!-- 映射文件的头文件和hibernate.cfg.xml的头文件不一样 -->
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="cn.vincent.pojo"> <class name="User" table="t_user"> <id name="id" column="id" type="int"> <generator class="native"></generator>
</id> <property name="name" column="name" type="java.lang.String"/>
<property name="age" column="age" type="int"/>
</class>
</hibernate-mapping>

2.2 util 工具类

package cn.vincent.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry; public class HibernateUtil {
private static Configuration cfg;
private static ServiceRegistry registry;
private static SessionFactory factory;
private static ThreadLocal<Session> session; static{
//初始化
cfg=new Configuration().configure();
registry=new StandardServiceRegistryBuilder()
.applySettings(cfg.getProperties())
.build();
factory=cfg.buildSessionFactory(registry);
session=new ThreadLocal<>();
}
//获取连接
public static Session getSession(){
if(session.get()==null){
session.set(factory.openSession());
}
return session.get();
} //释放资源
public static void close(){
if(session.get()!=null){
session.get().close();
session.set(null);
}
} }

2.3 单元测试

HibernateTest

package cn.vincent.hibernate;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test; import cn.vincent.pojo.User;
import cn.vincent.util.HibernateUtil; public class HibernateTest { //根据id查询单个对象
@Test
public void testGetById(){
Session session = HibernateUtil.getSession();
User user=(User)session.get(User.class, 2);
System.out.println(user.getId()+"----"+user.getName()+"----"+user.getAge());
HibernateUtil.close();
}
//添加数据
@Test
public void testSave(){
Session session=null;
Transaction tx =null;
try {
session = HibernateUtil.getSession();
User user= new User();
user.setName("金庸");
user.setAge(80);
//开启事务
tx = session.beginTransaction();
//返回 被保存数据的id
session.save(user);
//提交事务
tx.commit();
System.out.println("保存数据成功");
} catch (Exception e) {
e.printStackTrace();
//回滚事务
if(tx!=null)
tx.rollback();
System.out.println("保存数据失败");
}finally{
HibernateUtil.close();
} }
//删除数据
@Test
public void testDelete(){
Session session=null;
Transaction tx =null;
try {
session = HibernateUtil.getSession();
//开启事务
tx = session.beginTransaction();
User user =(User)session.get(User.class, 4);
session.delete(user);
//提交事务
tx.commit();
System.out.println("删除数据成功");
} catch (Exception e) {
e.printStackTrace();
//回滚事务
if(tx!=null)
tx.rollback();
System.out.println("删除数据失败");
}finally{
HibernateUtil.close();
}
}
//更新
@Test
public void testUpdate(){
Session session=null;
Transaction tx =null;
try {
session = HibernateUtil.getSession();
//开启事务
tx = session.beginTransaction();
User user =(User)session.get(User.class, 4);
user.setName("本拉登");
session.update(user);
//提交事务
tx.commit();
System.out.println("更新数据成功");
} catch (Exception e) {
e.printStackTrace();
//回滚事务
if(tx!=null)
tx.rollback();
System.out.println("更新数据失败");
}finally{
HibernateUtil.close();
}
}
//查询所有
@Test
public void testFindAll(){
Session session=null;
try {
session = HibernateUtil.getSession();
List<User> list = session.createCriteria(User.class).list();
for(User u:list){
System.out.println(u);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
HibernateUtil.close();
}
}
}

3.单元测试运行效果

运行单元测试

如下图:

java之hibernate之crud的更多相关文章

  1. Hibernate的CRUD以及junit测试

    Hibernate的CRUD以及junit测试 1:第一步创建动态工程引包,省略. 2:第二步,创建数据库和数据表,省略. 3:第三步,创建实体类,如User.java,源码如下所示: 对于实体类,一 ...

  2. ssh架构之hibernate(一)简单使用hibernate完成CRUD

    1.Hibernate简介   Hibernate是一个开放源代码的对象关系映射(ORM)框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,h ...

  3. Hibernate之CRUD实践

    Hibernate作为一个高度封装的持久层框架,曾经是非常牛逼的,现在虽然应用不是特别广,比如我前公司主要是做OA的,应用的框架就是Spring+SpringMVC+Hibernate. Hibern ...

  4. 数据库、Java与Hibernate数据类型对照

    数据类型对照表: 标准SQL数据类型 Java数据类型 Hibernate数据类型 TINYINT byte.java.lang.Byte byte SMALLINT short.java.lang. ...

  5. Java,Hibernate,标准sql数据类型之间的对应表

    (2010-07-14 19:53:50) 转载▼ 标签: 杂谈 分类: JAVA Hibernate API简介 其接口分为以下几类: l         提供访问数据库的操作的接口: l      ...

  6. java框架篇---hibernate之CRUD操作

    CRUD是指在做计算处理时的增加(Create).读取(Retrieve)(重新得到数据).更新(Update)和删除(Delete)几个单词的首字母简写. 下面列举实例来讲解这几个操作: 实体类: ...

  7. (29)java web的hibernate使用-crud的dao

    1, 做个简单的util public class HibernateUtils { private static SessionFactory sf; static { //加载主要的配置文件 sf ...

  8. Hibernate基本CRUD

    1 hibernate 框架介绍 冬眠:开发的代码基本不变. 1.1回顾jdbc Java提供的标准的数据访问的API 作用:完成应用程序java程序中的数据和db中的数据进行交换. 工作过程: A ...

  9. hibernate之CRUD操作

    CRUD是指在做计算处理时的增加(Create).读取(Retrieve)(重新得到数据).更新(Update)和删除(Delete)几个单词的首字母简写. 下面列举实例来讲解这几个操作: 实体类: ...

随机推荐

  1. D3.js的v5版本入门教程(第八章)—— 坐标轴

    D3.js的v5版本入门教程(第八章) D3中没有现成的坐标轴图形,需要我们自己用其他组件拼凑而成.D3中提供了坐标轴组件,使得我们在SVG中绘制一个坐标轴变得像添加一个普通元素那样简单 为了表绘制一 ...

  2. hdoj - 1864 最大报销额

    Problem Description 现有一笔经费可以报销一定额度的发票.允许报销的发票类型包括买图书(A类).文具(B类).差旅(C类),要求每张发票的总额不得超过1000元,每张发票上,单项物品 ...

  3. 20189220 余超《Linux内核原理与分析》第九周作业

    理解进程调度时机跟踪分析进程调度与进程切换的过程 本章的基础知识总结 一般来说,进程调度分为三种类型:中断处理过程(包括时钟中断.I/O 中断.系统调用和异常)中,直接调用schedule,或者返回用 ...

  4. Http项目转Https项目

    Https证书准备 开发环境下,可直接用JDK自带的keytool工具生成一个证书,正式环境可购买一个,配置过程是一样的: 打开cmd命令行,输入以下命令: 命令解释: -alias 证书别名 -ke ...

  5. Deep High-Resolution Representation Learning for Human Pose Estimation

    Deep High-Resolution Representation Learning for Human Pose Estimation 2019-08-30 22:05:59 Paper: CV ...

  6. Python自动化脚本-运维人员宝典

    文章地址: https://alanhou.org/basic-networking-socket-programming/ 第一章 Python脚本概述 第二章 Python脚本调试和性能测试 第三 ...

  7. EF6中的SQL监控

    在MVC或WEBAPI中的监控 System.Action<string> action = (string message) => { Debug.WriteLine(messag ...

  8. Java JDBC利用反射技术将查询结果封装为对象

    1.JDBC将返回结果集封装成对象demo class JdbcDemo { /** * 获取数据库列名 * @param rs * @return */ private static String[ ...

  9. Flutter Android 正式打包、以及升级应用 重新打包

    Flutter Android 正式打包 打开androidStudio软件 1.修改版本号. android->app->src->main->AndroidManifest ...

  10. nginx启动命令以及与配置systemctl

    一.配置systemctl之前的启动方式 进入sbin目录下执行以下命令: 启动nginx的命令为 /usr/local/nginx/sbin/nginx 3 停止nginx的命令为 /usr/loc ...