这篇文章主要讲解:

  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.单元测试运行效果

运行单元测试

如下图:

最新文章

  1. EasyUI树和Ztree树冲突问题
  2. xcopy /r /y &quot;$(TargetPath)&quot; &quot;$(ProjectDir)&quot;..\CMSAdmin\DLL\
  3. 定时器springMVC
  4. JavaScript类型判断
  5. git一些常用设置
  6. (1)编写一个接口:InterfaceA,只含有一个方法int method(int n); (2)编写一个类:ClassA来实现接口InterfaceA,实现int method(int n)接口方 法时,要求计算1到n的和; (3)编写另一个类:ClassB来实现接口InterfaceA,实现int method(int n)接口 方法时,要求计算n的阶乘(n!); (4)编写测试类E测试
  7. Machine and Deep Learning with Python
  8. fiddler 代理不成功调试
  9. 2013-07-29 IT 要闻速记快想
  10. 【BZOJ】1051: [HAOI2006]受欢迎的牛
  11. js split str.split(&amp;quot; &amp;quot;); split使用方法 在某处截字符串
  12. 转 wordpress搭建
  13. 【设计模式 - 20】之状态模式(State)
  14. Sum Root to Leaf Numbers 解答
  15. mvc中的几个数据传递
  16. GetWindowRect和GetClientRect的异同
  17. HDU2216:Game III(BFS)
  18. 类的更新----MVC设计模式
  19. Java中的代码点和代码单元(转)
  20. Spring实战思维导图

热门文章

  1. jmeter5实现mysql数据库值提取--单sql提取
  2. mysql 字符类以及重复元字符
  3. ICEM-两管相贯
  4. 2019 SDN第三次上机作业
  5. 微信小程序实例:分享给一个人还是分享到群的判断代码
  6. @MatrixVariable的使用
  7. [转]C++ 使用 curl 进行 http 请求(GET、POST、Download)的封装
  8. 360极速浏览器安装vue-devtools插件
  9. sqlserver表被锁了,解锁方法,删除锁的方法
  10. 取消Windows server 2008关机提示备注的方法