这篇文章主要讲解:

  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. mysql 修改字段名称以及长度

    //修改字段长度 alter table table1 modify name ); //修改字段名称以及长度 alter table table1 change name name_new ); a ...

  2. 第08组 团队Git现场编程实战

    一.组员职责分工 算法:庄锡荣,林鑫灿 UI:许煌标,蔡峰,林晓锋,陈珊珊,侯雅倩,吴珂雨 博客:陈珊珊,王钟贤 二.github提交日志 三.程序运行截图 运行中爬取到的部分信息 数据库中的部分信息 ...

  3. Eclipse安装jbpm插件

    1.1   eclipse mar 和neon有什么区别? Eclipse 是一个开放源代码的.基于Java的可扩展开发平台.就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境. . ...

  4. css3学习之--伪类与圆角

    随着css3.0的发布到逐渐完善,目前已经大部分浏览器已经能较好地适配,所以写一些css3的学习经历,分享心得,主要以案例讲解为主,话不多说,今天以css3的新增的“圆角”属性来讲解,基于web画一个 ...

  5. redis 锁的案例

    1: redis 锁 作为一种术装饰器使用 基本逻辑: 1:声明一个redislock类  定义生成锁和释放锁两个方法 2:生成锁使用了一个默认值 setnx ; 如果当前时间大于 第一次锁的生成时间 ...

  6. 【解决篇】映美FP-530K+打印发票卡纸,色带安装问题

    之前由于色带变浅了,而换了色带,后来出现了发票经常中间卡纸的状况,不过也不是不能打,只是偶尔出现,发现每次打,发票纸会撞击一下色带,导致有时候发票会被色带挡一下,导致中间卡纸,有时候又能过去.后来通过 ...

  7. (C#)Application.Exit()、Environment.Exit(0)区别

    Application.Exit:通知winform消息循环退出.会在所有前台线程退出后,退出应用 强行退出方式,就像 Win32 的 PostQuitMessage().它意味着放弃所有消息泵,展开 ...

  8. Dynamic Property Wizard 添加类提示 ATL类只能添加到MFC EXE 和MFC规则DLL项目或完全支持ATL的项目 错误提示解决方式

    在重新打开OPM项目添加ATL动态属性向导Dynamic Property Wizard提示错误 ATL类只能添加到MFC EXE 和MFC规则DLL项目或完全支持ATL的项目. 有效的解决方式,右键 ...

  9. 最新 北森java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.北森等10家互联网公司的校招Offer,因为某些自身原因最终选择了北森.6.7月主要是做系统复习.项目复盘.LeetCode ...

  10. 面试之leetcode20堆栈-字符串括号匹配,队列实现栈

    1 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合.左括号必须以正确的顺序闭合.注意空字符串可被认 ...