Java EE SSH框架之hibernate(1)—— hibernate概念及其搭建

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zl_StepByStep/article/details/80357943

一、hibernate的概念

1.1、框架是什么?

①框架是用来提高开发效率的

②封装好了一些功能,我们需要使用这些功能时,调用即可,不需要再手动实现。

③框架可以理解成一个半成品的项目,只要懂得如何配置和使用这些功能即可。


1.2、hibernate框架是什么?



1.3、hibernate的好处

    操作数据库的时候,可以面向对象的方式来完成,不需要写SQL语句


1.4、hibernate是一款ORM框架

     ORM即对象关系映射。

     ORM分4级,hibernate属于4级,完全面向对象操作数据库;mybatis属于2级;DBUtils属于1级。


二、hibernate项目搭建

2.1、导包

required下的包即为hibernate的必要包



连接数据库的驱动


2.2、创建数据库、准备表

对应的JavaBean

package com.zl;

public class Customer {
	private Integer id;
	private String name;
	private Integer age;
	private String sex;
	private String city;
	
	public Customer() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public String getCity() {
		return city;
	}

	public void setCity(String city) {
		this.city = city;
	}
}


2.3、写ORM元数据(对象与表的映射配置文件)

     导入约束

key中的值是从DTD的头部复制粘贴进去的



把对应DTD的头复制粘贴过去

(mapping的复制粘贴到Customer.hbm.xml里,configuration的复制粘贴到hibernate.cfg.xml里)



 


    ORM元数据 



     id元素用于配置数据库中表的主键

    创建数据库表的字段的类型与实体中属性的类型保持一致,在property元素中:

    name属性是实体类中的成员变量,column是数据库中的字段名。

    type属性可以是java的数据类型(类型的完整类名,比如java.lang.String)、数据库的数据类型、hibernate的数据类型,这里的type属性是保持一致的,所以最好这里不写type属性,以免出错。


2.4、写主配置文件

<?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>

        <!-- Database connection settings --><!-- 必须要配置的,驱动,url,用户名,密码,数据库方言 -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8</property>
        <property name="connection.username">root</property>
        <property name="connection.password">123456</property>
        <!-- SQL dialect -->
     <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

 <!-- JDBC connection pool (use the built-in) <property name="connection.pool_size">1</property> --> <!-- Enable Hibernate's automatic session context management <property name="current_session_context_class">thread</property>--> <!-- Disable the second-level cache <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property> --> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.auto">update</property> <mapping resource="com/zl/Customer.hbm.xml"/> </session-factory></hibernate-configuration>


2.5、写测试代码

package com.zl;

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


public class Test {

	//@Test
	public void testInsert() { //1.插入数据
		//1.加载hibernate.cfg.xml配置
		Configuration config = new Configuration().configure();
		
		ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();
		
                //2.获取SessionFactory,sessionFactory负责保存和使用所有配置信息,消耗内存资源非常大,sessionFactory属于线程安全的对象设计,在Web项目中,只创建一个
		SessionFactory sessionFactory = config.buildSessionFactory(sr);
		
		//3.得到一个session,session对象表达hibernate框架与数据库之间的一次连接(会话),类似JDBC的Connection对象,除此之外还可以完成对数据库中谁的增删改查
		Session session = sessionFactory.openSession();
		
		//4.开启事务,session获得操作事务的Transaction对象
		Transaction t = session.beginTransaction();  //开启事务并获得操作事务的t对象
                //Transaction t2 = session.getTransaction();	//获得操作事务的t2对象	

		//5.操作
		//5.1创建对象并为对象的属性赋值
		Customer c = new Customer();
		c.setName("Cody");
		c.setAge(15);
		c.setSex("男");
		c.setCity("武汉");
		//5.2将数据存储到表中
		session.save(c);
		
		//6.提交事务
		t.commit();
		
		//7.关闭资源
		session.close();
		sessionFactory.close();
		
	}

	//@Test
	public void testUpdate() { //2.修改数据
		//1.加载hibernate.cfg.xml配置
		Configuration config = new Configuration().configure();
		
		ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();
		//2.获取SessionFactory
		SessionFactory sessionFactory = config.buildSessionFactory(sr);
		
		//3.得到一个session
		Session session = sessionFactory.openSession();
		
		//4.开启事务
		Transaction t = session.beginTransaction();
		
		//5.操作
		//5.1创建对象并为指定id的那条记录修改其他的属性值
		Customer c = new Customer();
		c.setId(1);
		c.setName("张华");
		c.setAge(50);
		c.setSex("男");
		c.setCity("埃及");
		//5.2将数据存储到表中
		session.update(c);
		
		//6.提交事务
		t.commit();
		
		//7.关闭资源
		session.close();
		sessionFactory.close();	
	}

	//@Test
	public void testFindById() { //3.查找数据
		//1.加载hibernate.cfg.xml配置
		Configuration config = new Configuration().configure();		
		ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();
		//2.获取SessionFactory
		SessionFactory sessionFactory = config.buildSessionFactory(sr);		
		//3.得到一个session
		Session session = sessionFactory.openSession();	
		//4.开启事务
		Transaction t = session.beginTransaction();
		
		//5.操作
		//5.1对于hibernate中的根据id的查找操作,可以使用两个方法get()、load()
		Customer c = (Customer)session.get(Customer.class, 1);//查找id为1的那条记录
		
		//5.2打印到控制台
		System.out.println("姓名:"+c.getName()+",年龄:"+c.getAge()+",性别:"+c.getSex()+",所在城市:"+c.getCity());
		
		//6.提交事务
		t.commit();	
		//7.关闭资源
		session.close();
		sessionFactory.close();	
	}
	
	
	@Test
	public void testDelete() {  //4.删除数据
		//1.加载hibernate.cfg.xml配置
		Configuration config = new Configuration().configure();
		ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();
		//2.获取SessionFactory
		SessionFactory sessionFactory = config.buildSessionFactory(sr);
		//3.得到一个session
		Session session = sessionFactory.openSession();
		//4.开启事务
		Transaction t = session.beginTransaction();
		
		//5.操作
		//5.1先查询要修改的那条数据
		Customer c = (Customer)session.get(Customer.class, 7);
		//5.2删除这条数据
		session.delete(c);
		
		//6.提交事务
		t.commit();
		//7.关闭资源
		session.close();
		sessionFactory.close();
	}
}






猜你喜欢

转载自blog.csdn.net/zl_StepByStep/article/details/80357943