16-【熟悉】Hibernate的基本用法
1.创建项目
2.导包
3.创建Person
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
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.测试
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 更加灵活 多表连接查询很简单