16-【熟悉】Hibernate的基本用法

1.创建项目
Spring框架-sixteen(Hibernate的基本用法)
2.导包
Spring框架-sixteen(Hibernate的基本用法)
3.创建Person
Spring框架-sixteen(Hibernate的基本用法)
4.创建Person.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 导入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="com.sxt.entity">
	<class name="Person" table="sys_person">
		<id name="id" column="id" type="java.lang.Integer">
			<type name="identity"></type>
		</id>
		<property name="name" column="name" type="java.lang.String" ></property>
		<property name="address" type="java.lang.String">
			<column name="address" ></column>
		</property>
	</class>
</hibernate-mapping>

5.创建hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 导入hibernate的约束 -->
<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<!-- 
		session会话,connection对象表示应用程序和数据库的会话
		通过hibernate.cfg.xml 的 session-factory标签中的内容可以获得
		应用程序和数据库的会话连接
	 -->
	<session-factory>
		<!-- 配置数据库的连接信息 -->
		<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="connection.url">jdbc:mysql://localhost:3306/test</property>
		<property name="connection.username">root</property>
		<property name="connection.password">123456</property>
		
		<!-- 
			配置hibernate的方言	
			hibernate会根据当前数据库环境的需要,将普通话翻译为方言(每种数据库之间的差异)
			hibernate可以操作任何一中数据库,我们不需要考虑数据库之间的差异
			hibernate会自动根据当前数据库,生成数据库对应的方言(sql)
			方言可以满足,hibernate程序在不同数据库之间移植
		 -->
		<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
		
		<!-- 
			配置hibernate的正向工程
			类表
			正向工程:有java类自动生成数据库表(学习,hibernate提倡的是正向工程)
			反向工程:由数据库表自动生成java类(实际)
			hbm2ddl:  由hiberante的映射文件生成对的ddl语句,创建数据库表
			
			update:如果数据库没有java类对应的表,就自动创建,如果有检查类是否和表一致,
				   如果不一致自动新   
		-->
		<property name="hbm2ddl.auto">update</property>
		<!-- 在控制台打印sql语句 -->
		<property name="show_sql">true</property>
		<!-- 在控制台打印sql语句的时候进行格式化 -->
		<property name="format_sql">true</property>
		<!-- 在主配置文件中加载映射文件 -->
		<mapping resource="com/sxt/entity/Person.hbm.xml"/>
		
	</session-factory>
</hibernate-configuration>

6.创建PersonDao
Spring框架-sixteen(Hibernate的基本用法)

7.创建HibernateUtils

public class HibernateUtils {

	// 读取配置文件
	static Configuration cfg = new Configuration().configure();
	// 创建注册对象
	static ServiceRegistry registry = new StandardServiceRegistryBuilder()
			.applySettings(cfg.getProperties()).build();
	// 创建session工厂
	// 创建工厂对象
	static SessionFactory factory = cfg.buildSessionFactory(registry);
	
	
	/**
	 * 得到session
	 * @return
	 */
	public static Session getSession(){
		return factory.openSession();
	}
	
	/**
	 * 关闭session
	 */
	public static void close(Session session){
		session.close();
	}

}

8.创建PersonDaoImpl

public class PersonDaoImpl implements PersonDao {

	@Override
	public void add(Person person) {
		// 从sessionFactory里面得到session
		Session session = HibernateUtils.getSession();
		// 开启事务
		Transaction transaction = session.beginTransaction();
		// 调用API保存
		session.save(person);
		// 提交事务
		transaction.commit();
		// 关闭sesison
		HibernateUtils.close(session);
	}

	@Override
	public void update(Person person) {
		// 从sessionFactory里面得到session
		Session session = HibernateUtils.getSession();
		// 开启事务
		Transaction transaction = session.beginTransaction();
		// 调用API保存
		session.update(person);
		// 提交事务
		transaction.commit();
		// 关闭sesison
		HibernateUtils.close(session);
	}

	@Override
	public void delete(Person person) {
		// 从sessionFactory里面得到session
		Session session = HibernateUtils.getSession();
		// 开启事务
		Transaction transaction = session.beginTransaction();
		// 调用API保存
		session.delete(person);
		// 提交事务
		transaction.commit();
		// 关闭sesison
		HibernateUtils.close(session);
	}

	@Override
	public List<Person> queryAll() {
		// 从sessionFactory里面得到session
		Session session = HibernateUtils.getSession();
		// 开启事务
		Transaction transaction = session.beginTransaction();
		// 调用AIP查询
		Query createQuery = session.createQuery("from Person");
		List<Person> list = createQuery.list();
		// 提交事务
		transaction.commit();
		// 关闭sesison
		HibernateUtils.close(session);
		return list;
	}

	@Override
	public Person queryById(Integer id) {
		// 从sessionFactory里面得到session
		Session session = HibernateUtils.getSession();
		// 调用AIP查询
		Person person =(Person) session.load(Person.class, id);
		System.out.println(person);
		// 关闭sesison
		HibernateUtils.close(session);
		return null;
	}

}

9.测试
Spring框架-sixteen(Hibernate的基本用法)

10.Hibernate和mybatis的本质区别

Hibernate 是把类和属性和数据库的字段进行映射
mybatis 是把类的属性和查询的结果集映射

create table sys_user(){
id int primary key auto_increment,
name varchar(20) not null,
address varchar(60) not null
}

查询
mybatis select id as uid,name as uname,address as uaddress from sys_user
hibernate from User

Hibernate 完全面向对象 不用写SQL HQL 多表连接查询很麻烦
mybatis是半自动化的 ,要写sql 更加灵活 多表连接查询很简单

相关文章: