Hibernate5入门(二)简单的操作

目录

一、增删改查

二、注解

三、JUnit单元测试


学习笔记,为了加强记忆和深入理解在此记录备忘。如有错误和理解不当之处,还望指正。万分感谢!

另外,实例和内容有些是参照网络其他博文,如有侵权可联系删除。

学习重点:

1、了解Hibernate对应的数据库的简单操作;

2、了解Hibernate简单注解的使用(复杂注解以后学习);

3、了解JUnit单元测试;


通过简单的数据库操作来认识Hibernate。

一、增删改查

    实体类

package demo.entity;

public class User {

	private int userId;
	private String userName;
	
	public int getUserId() {
		return userId;
	}
	public void setUserId(int userId) {
		this.userId = userId;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	
}

映射文件     

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    
<hibernate-mapping>
  <class name="demo.entity.User" table="t_user">
    <!-- 定义主键,name是实体类的属性名 -->
    <id name="userId" column="user_id">
      <!-- 主键生成方式,native是本地 -->
      <generator class="native"></generator>
    </id> 
    <!-- 定义其他字段 -->
    <property name="user_name" ></property>
  </class>
</hibernate-mapping>    

配置文件中添加映射文件

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

测试增删改查类

package demo.test;

import demo.entity.*;
import java.util.List;

import javax.persistence.criteria.AbstractQuery;
import javax.persistence.criteria.CriteriaQuery;

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

public class UserTest {
	// 加载配置文件
	Configuration configuration = new Configuration().configure();
	// 实例化配置文件
	SessionFactory sFactory = configuration.buildSessionFactory();

	// 添加方法
	private void userAdd() {
		// 打开session
		Session session = sFactory.openSession();
		// 开始事物
		Transaction transaction = session.beginTransaction();
		// 实例化实体类
		User user1 = new User();
		// 多插入一条,后边的查询使用
		User user2 = new User();

		// 给实例赋值
		user1.setUserName("ls");
		user2.setUserName("ls2");
		// 保存
		session.save(user1);
		session.save(user2);
		// 提交事物
		transaction.commit();
		// 关闭会话
		session.close();
	}

	// 删除方法
	private void userDel() {
		Session session = sFactory.openSession();
		Transaction transaction = session.beginTransaction();
		// 根据主键查找,如果数据不存在会报错
		User user = session.get(User.class, 1);
		session.delete(user);

		transaction.commit();
		session.close();
	}

	// 更新方法
	private void userUpdate() {
		Session session = sFactory.openSession();
		Transaction transaction = session.beginTransaction();
		// 先查找实体对象,然后赋值,再保存
		User user = session.get(User.class, 2);
		user.setUserName("ls22");
		session.save(user);

		transaction.commit();
		session.close();

	}

	private void getUser() {
		// 使用Criteria查询
		Session session = sFactory.openSession();
		Transaction transaction = session.beginTransaction();
		// 先使用Session的createCriteria()方法构建一个实例。可以给实例添加查询条件,这里省略,以后再学习
		CriteriaQuery<User> criteriaQuery = session.getCriteriaBuilder().createQuery(User.class);
		criteriaQuery.from(User.class);
		// 将查询结果集放到List里
		List<User> userList = session.createQuery(criteriaQuery).getResultList();
		// 遍历List获取结果
		for (User user : userList) {
			System.out.println(user.getUserId() + ": " + user.getUserName());
		}

		transaction.commit();
		session.close();
		sFactory.close();
	}

	public static void main(String[] args) {
		// 测试
		UserTest uTest = new UserTest();
		uTest.userAdd();
		uTest.userDel();
		uTest.userUpdate();
		uTest.getUser();
	}
}

二、注解

Hibernate映射分为俩种:一种是xml映射;一种是注解。使用注解不但可以减少一部分的配置工作,而且注释和 Java 代码位于一个文件中,有助于增强程序的内聚性。使用映射还是注解依据个人爱好。

注解可以放在成员变量的上面,也可以放在对应的get方法上面。

常用的几个注解

@Entity将 一个类声明为一个持久化类
@Id声明了持久化类的标识属性(相当于数据表的主键)
@GeneratedValue定义标识属性值的生成策略
@Table为持久化类映射指定表(table)、目录(catalog)和schema的名称。默认值,持久化类名,不带包名
@UniqueConstraint定义表的唯一约束
@Lob表示属性将被持久化为Blob或者Clob类型
@Column将属性映射到列
@Transient忽略这些字段和属性,不用持久化到数据库

示例

package demo.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

@Entity // 实体注解
@Table(name = "t_teacher") // 对应的表名
public class Teacher {

	/*
	 * 演示Hibernate注解
	 */
	private long tea_id;
	private String teaName;
	
	@Id // 设置主键
	@GenericGenerator(name = "_native", strategy = "native") // 主键生成方式
	@GeneratedValue(generator = "_native") // 主键
	public void setTea_id(long tea_id) {
		this.tea_id = tea_id;
	}

	public void setTeaName(String teaName) {
		this.teaName = teaName;
	}
		
	@Column(name="tea_name")
	public String getTeaName() {
		return teaName;
	}

	public long getTea_id() {
		return tea_id;
	}


}

三、JUnit单元测试

可以以方法为单位进行测试,

  • @BeforeAll        全局只会执行一次,而且是第一个运行
  • @BeforeEach    在测试方法运行之前运行
  • @Test                测试方法
  • @AfterAll           在测试方法运行之后允许
  • @AfterEach       全局只会执行一次,而且是最后一个运行
  • @Ignore             忽略此方法

示例

package demo.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import demo.util.*;
import demo.entity.*;

class SaveTest {
        // 一些共用的变量
	private SessionFactory sFactory = HibernateUtil.getSessionFactory();
	private Session session;
	private Transaction transaction;

	@BeforeEach  // 在方法前执行的操作
	void setUp() throws Exception {
		session = sFactory.openSession();
		transaction = session.beginTransaction();
	}

	@AfterEach  // 在方法后执行的操作
	void tearDown() throws Exception {
		transaction.commit();
		session.close();
		sFactory.close();
	}

	@Test
	void testAddTeacher() {
		// do something
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值