hibernate
2021-05-13 00:27
标签:关闭 root 完成后 发送 表结构 面向对象编程 懒加载 cto this
1.什么是hibernate?
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。
2、什么是orm?
对象关系映射(英语:Object Relation Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。
对象-关系映射,是随着面向对象的软件开发方法发展而产生的。面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。
ORM模型的简单性简化了数据库查询过程。使用ORM查询工具,用户可以访问期望数据,而不必理解数据库的底层结构。
3.hibernate使用入门
1、导入相关jar包
2、编写配置文件
3、编写测试类,测试功能
1)导入数据库相关jar包,这里使用的是mysql
2)日志相关jar包,使用log4j作为日志记录
3)编写hibernate.cfg.xml,这是hibernate核心配置文件
span>configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">com.mysql.jdbc.Driver jdbc:mysql:///test root root true true org.hibernate.dialect.MySQLDialect update false
4)编写一个实体类,用于与数据库表映射
package com.fqh.entity; public class User { private int id; private String username; private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
5)编写映射文件User.hbm.xml用于将user表与实体类相映射
xml version="1.0" encoding="UTF-8"?> DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> hibernate-mapping> class name="com.fqh.entity.User" table="t_user" catalog="test"> id name="id" column="id"> generator class="native">generator> id> property name="username" column="username">property> property name="password" column="password">property> class> hibernate-mapping>
6)创建测试类
package com.fqh.test; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.junit.Test; import com.fqh.entity.User; public class HibernateTest { @Test public void test1(){ //加载配置文件 Configuration configure = new Configuration().configure(); //创建session会话工厂 SessionFactory sessionFactory = configure.buildSessionFactory(); //通过工厂获取一个session Session openSession = sessionFactory.openSession(); //操作数据库 //开启事务 openSession.beginTransaction(); User user=new User(); user.setUsername("tom"); user.setPassword("123"); openSession.save(user); //事务提交 openSession.getTransaction().commit();
//关闭资源
openSession。close();
sessionFactioty.close();
}
}
7)运行结果
4.hibernate配置以及连接池概念
1)hibernate工作原理
1、通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件。
2、由hibernate.cfg.xml中的
3、通过config.buildSessionFactory();//得到sessionFactory。
4、sessionFactory.openSession();//得到session。
5、session.beginTransaction();//开启事务。
6、session.getTransaction().commit();//提交事务
7、关闭session;
8、关闭sessionFactory;
2)hibernate配置详解
1.hibernate.cfg.xml配置文件
可以将hibernate执行的SQL语句打印出来
true
格式化SQL语句
true
指定数据库MySQL,用到hibernate特定方言
org.hibernate.dialect.MySQLDialect
自动创建表,
update
可选属性:
Create-drop 每次都会创建一个新的表,执行完成后删除。一般在测试中使用
Create 每次都会创建一个新的表,一般是在测试中使用
update 如果数据库中有表,不创建,没有表创建,如果映射不匹配,会自动更新表结构(只能添加)
validate 只会使用存在的表,并且会对映射关系进行校验.
事务的提交方式
false
2.映射文件
主键生成策略
class="native">
配置非主键属性
关于hibernate的映射文件中类型问题
对于type属性它的取值,可以有三种:
- java中的数据类型
- hibernate中的数据类型
- SQL的数据类型
默认是hibernate中数据类型,type可写可不写
3)hibernate常用api介绍
1.configuration
它主要是用于加载hibernate配置.
Configuration config=new Configuration().config(); 主要加载src下的hibernate.cfg.xml
Configuration config=new Configuration();主要加载的src下的hibernate.properties
Configuration config=new Configuration().config(核心配置文件名称);加载指定的名称的配置文件
2.sessionFactory
SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。通过SessionFactory可以得到Session.
4)在hibernate中引入c3p0
- 我们要导入c3p0的相关jar包(一共是三个)
- 在hibernate.cfg.xml文件中配置c3p0连接
property name="hibernate.connection.provider_class">
org.hibernate.connection.C3P0ConnectionProvider
property>
property name="hibernate.c3p0.max_size">20property>
property name="hibernate.c3p0.min_size">5property>
property name="hibernate.c3p0.timeout">120property>
property name="hibernate.c3p0.idle_test_period">3000property>
5.hibernate实现增删改查
1)修改
//修改 @Test public void test2() { Configuration configure = new Configuration().configure(); //创建session会话工厂 sessionFactory = configure.buildSessionFactory(); //通过工厂获取一个session Session openSession = sessionFactory.openSession(); //操作数据库 //开启事务 openSession.beginTransaction(); User user=new User(); user.setId(1); user.setUsername("admin"); user.setPassword("admin"); openSession.update(user); openSession.getTransaction().commit(); openSession.close(); sessionFactory.close(); }
2)删除
//删除 @Test public void test3() { Configuration configure = new Configuration().configure(); //创建session会话工厂 sessionFactory = configure.buildSessionFactory(); //通过工厂获取一个session Session openSession = sessionFactory.openSession(); //操作数据库 //开启事务 openSession.beginTransaction(); User user=new User(); user.setId(1); openSession.delete(user); openSession.getTransaction().commit(); openSession.close(); sessionFactory.close(); }
3)根据id查询(get/load,load是懒加载)
//根据id查询 @Test public void test4() { Configuration configure = new Configuration().configure(); //创建session会话工厂 sessionFactory = configure.buildSessionFactory(); //通过工厂获取一个session Session openSession = sessionFactory.openSession(); //操作数据库 User user = openSession.get(User.class, 2);//需要返回的类型,传入的id System.out.println(user.getUsername()+user.getPassword()); openSession.close(); sessionFactory.close(); }
hibernate
标签:关闭 root 完成后 发送 表结构 面向对象编程 懒加载 cto this
原文地址:https://www.cnblogs.com/fqh2020/p/12000271.html