Hibernate(2)——CRUD体验

目录

        1.HibernateUtil工具类的封装

2.XML版的CRUD实现

2.1 数据增加操作

2.2 数据删除操作

2.3 数据更新操作

2.4 打印所有数据

3. 注解版CRUD实现

4. Junit单元测试


1.HibernateUtil工具类的封装

在前面我们插入数据都要写不少代码,其实我们可以将这些代码封装成一个工具类:

package com.java.util;

import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;

public class HibernateUtil {

	//获取SessionFactory的方法
	private static SessionFactory buildSessionFactory(){
		//实例化配置文件
		Configuration configuration=new Configuration().configure();
		//实例化服务注册
		ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
		//获取session工厂
		return configuration.buildSessionFactory(serviceRegistry);
	}
	
	//设置静态字段
	private static final SessionFactory sessionFactory=buildSessionFactory();
	
	//获取当前的单例SessionFactory
	public static SessionFactory getSessionFactory(){
		return sessionFactory;
	}
}

后面在运用时直接调用这个类即可!

2.XML版的CRUD实现

crud是指在做计算处理时的增加(Create)、读取查询(Retrieve)、更新(Update)和删除(Delete)几个单词的首字母简写。crud主要被用在描述软件系统中数据库或者持久层的基本操作功能。 

2.1 数据增加操作

2.2 数据删除操作

2.3 数据更新操作

2.4 打印所有数据

完整代码:

package com.java.service;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

import com.java.model.Student;
import com.java.util.HibernateUtil;

public class StudentTest {
	
	//获取Session工厂
	private SessionFactory sessionFactory=HibernateUtil.getSessionFactory();
	
	//添加数据方法
	private void add(){
		//生成session
		Session session=sessionFactory.openSession();
		//开启事务
		session.beginTransaction();
		
		Student s=new Student();
		s.setName("张三");
		//直接执行
		session.save(s);
		
		//提交事务
		session.getTransaction().commit();
		//关闭session
		session.close();
	}
	
	//数据删除方法
	private void delete(){
		//生成session
		Session session=sessionFactory.openSession();
		//开启事务
		session.beginTransaction();
		
		//用Session的get方法,返回一个student对象,前面是类的名称,后面是数据的id
		Student s=(Student)session.get(Student.class, Long.valueOf(1));
		//直接delete对象即可
		session.delete(s);
		
		//提交事务
		session.getTransaction().commit();
		//关闭session
		session.close();
	}
	
	//数据更新方法
	private void update(){
		//生成session
		Session session=sessionFactory.openSession();
		//开启事务
		session.beginTransaction();
		
		//用Session的get方法,返回一个student对象,前面是类的名称,后面是数据的id
		Student s=(Student)session.get(Student.class, Long.valueOf(2));
		//调用student的set方法
		s.setName("张三2");
		//直接执行保存
		session.save(s);
		
		//提交事务
		session.getTransaction().commit();
		//关闭session
		session.close();
	}

	
	//打印所有数据
	private void getAllStudent(){
		//生成session
		Session session=sessionFactory.openSession();
		//开启事务
		session.beginTransaction();
		
		//面向对象的sql,Student是一个类
		String hql="from Student";
		//这里返回的是一个query对象
		Query query=session.createQuery(hql);
		//利用query来获取所有数据
		List<Student> studentList=query.list();
		//利用for循环打印
		for(Student student:studentList){
			System.out.println(student);
		}
		
		//提交事务
		session.getTransaction().commit();
		//关闭session
		session.close();
	}
	
	public static void main(String[] args) {
		StudentTest stu=new StudentTest();
		/*stu.add();
		stu.delete();*/
		//stu.update();
		stu.getAllStudent();
	}
}

3. 注解版CRUD实现

在上述的model层新建一个Teacher类:

package com.java.model;

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 {

	private long id;
	private String name;
	
	
	@Id
	//使用
	@GeneratedValue(generator="_native")
	//生成策略
	@GenericGenerator(name="_native",strategy="native")
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	@Override
	public String toString() {
		return "Teacher [id=" + id + ", name=" + name + "]";
	}
	
}

我们再建一个TeacherTest类:

package com.java.service;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

import com.java.model.Teacher;
import com.java.util.HibernateUtil;

public class TeacherTest {
	
	//获取Session工厂
	private SessionFactory sessionFactory=HibernateUtil.getSessionFactory();
	
	//添加数据方法
	private void add(){
		//生成session
		Session session=sessionFactory.openSession();
		//开启事务
		session.beginTransaction();
		
		Teacher s=new Teacher();
		s.setName("张三");
		//直接执行
		session.save(s);
		
		//提交事务
		session.getTransaction().commit();
		//关闭session
		session.close();
	}
	
	//数据删除方法
	private void delete(){
		//生成session
		Session session=sessionFactory.openSession();
		//开启事务
		session.beginTransaction();
		
		//用Session的get方法,返回一个Teacher对象,前面是类的名称,后面是数据的id
		Teacher s=(Teacher)session.get(Teacher.class, Long.valueOf(1));
		//直接delete对象即可
		session.delete(s);
		
		//提交事务
		session.getTransaction().commit();
		//关闭session
		session.close();
	}
	
	//数据更新方法
	private void update(){
		//生成session
		Session session=sessionFactory.openSession();
		//开启事务
		session.beginTransaction();
		
		//用Session的get方法,返回一个Teacher对象,前面是类的名称,后面是数据的id
		Teacher s=(Teacher)session.get(Teacher.class, Long.valueOf(2));
		//调用Teacher的set方法
		s.setName("张三2");
		//直接执行保存
		session.save(s);
		
		//提交事务
		session.getTransaction().commit();
		//关闭session
		session.close();
	}

	
	//打印所有数据
	private void getAllTeacher(){
		//生成session
		Session session=sessionFactory.openSession();
		//开启事务
		session.beginTransaction();
		
		//面向对象的sql,Teacher是一个类
		String hql="from Teacher";
		//这里返回的是一个query对象
		Query query=session.createQuery(hql);
		//利用query来获取所有数据
		List<Teacher> TeacherList=query.list();
		//利用for循环打印
		for(Teacher Teacher:TeacherList){
			System.out.println(Teacher);
		}
		
		//提交事务
		session.getTransaction().commit();
		//关闭session
		session.close();
	}
	
	public static void main(String[] args) {
		TeacherTest tea=new TeacherTest();
		tea.add();
		//stu.delete();
		//stu.update();
		//stu.getAllTeacher();
	}
}

在hibernate配置文件里添加新的映射路径:

<?xml version='1.0' encoding='utf-8'?>
<!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>
        <property name="connection.url"><![CDATA[jdbc:mysql://localhost:3306/hibernate?useUnicode=true&characterEncoding=utf8]]></property>
        <property name="connection.username">root</property>
        <property name="connection.password">123456</property>

       
        <!-- 方言 -->
        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
	
        <!-- 控制台显示SQL -->
        <property name="show_sql">true</property>

        <!-- 自动更新表结构 -->
        <property name="hbm2ddl.auto">update</property>
        
        <!-- 这里加一个Student类的映射路径-->
  		<mapping resource="com/java/model/Student.hbm.xml"/>
  		<!-- 这里加一个Teacher类的映射路径-->
  		<mapping class="com.java.model.Teacher"/>

    </session-factory>

</hibernate-configuration>

最后运行成功,可以在数据库里直接添加数据!

 4. Junit单元测试

我们先引入一个jar包;

 点击需要测试的类;

 

注意:这里要将需要测试的类的方法全部改为public;

然后我们需要手动将要测试的方法添加到新建的测试类里面:

package com.java.service;


import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.junit.Test;

import com.java.model.Teacher;
import com.java.util.HibernateUtil;

public class TeacherTest2 {
	
	//获取Session工厂
		private SessionFactory sessionFactory=HibernateUtil.getSessionFactory();

	@Test
	public void testAdd() {
		//生成session
		Session session=sessionFactory.openSession();
		//开启事务
		session.beginTransaction();
		
		Teacher s=new Teacher();
		s.setName("张三");
		//直接执行
		session.save(s);
		
		//提交事务
		session.getTransaction().commit();
		//关闭session
		session.close();
	}

	@Test
	public void testDelete() {
		//生成session
		Session session=sessionFactory.openSession();
		//开启事务
		session.beginTransaction();
		
		//用Session的get方法,返回一个Teacher对象,前面是类的名称,后面是数据的id
		Teacher s=(Teacher)session.get(Teacher.class, Long.valueOf(1));
		//直接delete对象即可
		session.delete(s);
		
		//提交事务
		session.getTransaction().commit();
		//关闭session
		session.close();
	}

	@Test
	public void testUpdate() {
		//生成session
		Session session=sessionFactory.openSession();
		//开启事务
		session.beginTransaction();
		
		//用Session的get方法,返回一个Teacher对象,前面是类的名称,后面是数据的id
		Teacher s=(Teacher)session.get(Teacher.class, Long.valueOf(2));
		//调用Teacher的set方法
		s.setName("张三2");
		//直接执行保存
		session.save(s);
		
		//提交事务
		session.getTransaction().commit();
		//关闭session
		session.close();
	}

	@Test
	public void testGetAllTeacher() {
		//生成session
		Session session=sessionFactory.openSession();
		//开启事务
		session.beginTransaction();
		
		//面向对象的sql,Teacher是一个类
		String hql="from Teacher";
		//这里返回的是一个query对象
		Query query=session.createQuery(hql);
		//利用query来获取所有数据
		List<Teacher> TeacherList=query.list();
		//利用for循环打印
		for(Teacher Teacher:TeacherList){
			System.out.println(Teacher);
		}
		
		//提交事务
		session.getTransaction().commit();
		//关闭session
		session.close();
	}

}

我们这里直接右键Run As就可以了,直接运行测试你想要测试的类,就不用在main函数里添加了,很方便!

猜你喜欢

转载自blog.csdn.net/qq_37084904/article/details/89787850