hibernate基本配置
来源:互联网 发布:电动汽车销售量数据 编辑:程序博客网 时间:2024/05/22 16:05
hibernate框架:
1、hibernate框架应用在javaee三层结构中dao层框架
2、在dao层里面做对数据库crud操作,使用hibernate实现crud操作,hibernate底层代码就是jdbc,hibernate对jdbc进行封装,使用hibernate好处,不需要写复杂jdbc代码了,
不需要写sql语句实现
3、hibernate开源的轻量级的框架
什么是orm思想:
orm:objectrelational mapping,对象关系映射
(1)让实体类和数据库表进行一一对应关系
让实体类首先和数据库表对应
让实体类属性和表里面字段对应
(2)不需要直接操作数据库表,而操作表对应实体类对象
搭建hibernate环境:
1、导入hibernate的jar包
2、创建实体类
public class User {private int id;private String name;private String pwd;private String address;public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}...
3、配置实体类和数据库表一一对应关系(映射关系)(1)创建xml格式的配置文件
- 映射配置文件名称和位置没有固定要求
- 建议:在实体类所在包里面创建,实体类名称.hbm.xml
(2)配置是xml格式,在配置文件中首先引入xml约束
- 学过约束dtd、schema,在hibernate里面引入的约束dtd约束
(3)配置映射关系
<?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"><!-- package对应实体类的包 --><hibernate-mapping><!-- 对应的实体类,domain对象,pojo --><class name="com.jredu.entity.User" table="h_user"><id name="id" column="id" type="java.lang.Integer"><!-- 主键生成策略 --><!-- 序列的形式生成主键 --><generator class="sequence"><!-- 指定参数:指定序列的名称 --><param name="sequence">SEQ_USER</param></generator></id><property name="name" column="name" type="java.lang.String"/><property name="pwd" column="pwd" type="java.lang.String"/><property name="address" column="address" type="java.lang.String"/></class></hibernate-mapping>
4、创建hibernate的核心配置文件(1)核心配置文件格式xml,但是核心配置文件名称和位置固定的
- 位置:必须src下面
- 名称:必须hibernate.cfg.xml
(2)引入dtd约束
<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
(3)hibernate操作过程中,只会加载核心配置文件,其他配置文件不会加载
第一部分:配置数据库信息必须的
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property><property name="connection.url">jdbc:oracle:thin:@localhost:1521:jredu</property><property name="connection.username">hibernate</property><property name="connection.password">hibernate</property>
第二部分:配置hibernate信息可选的
<!-- 通常设置为update,当表不存在时自动创建 --><property name="hbm2ddl.auto">update</property><!-- 输出底层sql语句 --><property name="hibernate.show_sql">true</property><!-- 输出底层sql语句格式 --><property name="hibernate.format_sql">true</property><!-- 配置数据库方言在mysql里面实现分页 关键字 limit,只能使用mysql里面在oracle数据库,实现分页rownum让hibernate框架识别不同数据库的自己特有的语句 --><property name="dialect">org.hibernate.dialect.Oracle10gDialect</property><!-- 在hibernate核心配置文件中配置 --><property name="hibernate.current_session_context_class">thread</property><property name="hibernate.c3p0.validate">true</property><property name="hibernate.temp.use_jdbc_metadata_defaults">false</property>
第三部分:把映射文件放到核心配置文件中
<mapping resource="com/jredu/entity/User.hbm.xml"/>
实现添加操作:第一步加载hibernate核心配置文件
第二步创建SessionFactory对象
第三步使用SessionFactory创建session对象
第四步开启事务
第五步写具体逻辑 crud操作
第六步提交事务
第七步关闭资源
SessionFactory sessionFactory=null;Session session=null;Transaction tx=null;try {//1、调用工具类得到sessionFactorysessionFactory= HibernateUtils.getSessionFactory();//2、获取sessionsession=HibernateUtils.getSessionobject();//3、开启事务tx=session.beginTransaction();//4、添加用户 User user=new User(); user.setName("东方不败"); user.setPwd("123456"); user.setAddress("japan");session.save(user); //5、提交事务tx.commit(); } catch (Exception e) { //事务回滚tx.rollback(); }finally{ //6、关闭 //session.close(); //当session与线程捆绑一块时,不需要再关闭sessionFactory.close(); }
Hibernate核心api:
//加载核心配置文件cfg = new Configuration();cfg.configure();(1)到src下面找到名称hibernate.cfg.xml配置文件,创建对象,把配置文件放到对象里面(加载核心配置文件)
SessionFactory
1 使用configuration对象创建sessionFactory对象
(1)创建sessionfactory过程中做事情:
- 根据核心配置文件中,有数据库配置,有映射文件部分,到数据库里面根据映射关系把表创建
2创建sessionFactory过程中,这个过程特别耗资源的
(1)在hibernate操作中,建议一个项目一般创建一个sessionFactory对象
3 具体实现
(1)写工具类,写静态代码块实现
* 静态代码块在类加载时候执行,执行一次
public class HibernateUtils {static Configuration cfg = null;static SessionFactory sessionFactory = null;//静态代码块实现static {//加载核心配置文件cfg = new Configuration();cfg.configure();StandardServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();sessionFactory = cfg.buildSessionFactory(serviceRegistry);}//提供返回与本地线程帮的session的方法public static Session getSessionobject() {return sessionFactory.getCurrentSession();}//提供方法返回sessionFactorypublic static SessionFactory getSessionFactory() {return sessionFactory;}}Session
1 session类似于jdbc中connection
2 调用session里面不同的方法实现crud操作
(1)添加 save方法
(2)修改 update方法
(3)删除 delete方法
(4)根据id查询 get方法
3 session对象单线程对象
(1)session对象不能共用,只能自己使用
Transaction
1、事务对象
//3、开启事务
tx=session.beginTransaction();
2、事务提交和回滚方法
//提交事务
tx.commit();
//事务回滚
tx.rollback();
3、事务概念
(1)事务四个特性
原子性、一致性、隔离性、持久性
实体类编写规则:
1 实体类里面属性私有的
2 私有属性使用公开的set和get方法操作
3 要求实体类有属性作为唯一值(一般使用id值)
4 实体类属性建议不使用基本数据类型,使用基本数据类型对应的包装类
(1)八个基本数据类型对应的包装类
- int – Integer
- char—Character、
- 其他的都是首字母大写比如double – Double
(2)比如表示学生的分数,假如 int score;
- 比如学生得了0分,intscore = 0;
- 如果表示学生没有参加考试,int score = 0;不能准确表示学生是否参加考试
解决:使用包装类可以了, Integer score = 0,表示学生得了0分,
表示学生没有参加考试,Integer score = null;
hibernate主键生成策略:
1 hibernate要求实体类里面有一个属性作为唯一值,对应表主键,主键可以不同生成策略
2 hibernate主键生成策略有很多的值
3 在class属性里面有很多值
(1)native:根据使用的数据库帮选择哪个值,用于数值型自动增加
(2)uuid:之前web阶段写代码生成uuid值,hibernate帮我们生成uuid值,独一无二的字符串
(3)sequence:oracle使用
<!-- 主键生成策略 --><!-- 序列的形式生成主键 --><generator class="sequence"><!-- 指定参数:指定序列的名称 --><param name="sequence">SEQ_USER</param></generator>对实体类crud操作:
添加操作
User user=new User();user.setName("东方不败");user.setPwd("123456");user.setAddress("japan"); session.save(user);根据id查询
User user= (User) session.get(User.class, 4);修改操作
User user= (User) session.get(User.class, 4);user.setName("岳不群");session.update(user);删除操作
User user= (User) session.get(User.class, 4);session.delete(user);实体类对象状态:
1 实体类状态有三种
(1)瞬时态:对象里面没有id值,对象与session没有关联
User user=new User();user.setName("东方不败");user.setPwd("123456");user.setAddress("黑木崖");(2)持久态:对象里面有id值,对象与session关联
User user= (User) session.get(User.class, 4);(3)托管态:对象有id值,对象与session没有关联
User user=new User();user.setId(4);2 演示操作实体类对象的方法
(1)saveOrUpdate方法:实现添加、实现修改
User user = new User();user.setUsername("jack");user.setPassword("520");user.setAddress("朝鲜");//实体类对象状态是瞬时态,做添加 session.saveOrUpdate(user);// User user = new User();// user.setUid(6);// user.setUsername("rose");// user.setPassword("1314");// user.setAddress("阿尔巴尼亚"); //实体类对象状态是托管态,做修改// session.saveOrUpdate(user);// User user = session.get(User.class, 7);// user.setUsername("lilei"); //实体类对象状态是持久态,做修改// session.saveOrUpdate(user);
Hibernate缓存:
1 hibernate框架中提供很多优化方式,hibernate的缓存就是一个优化方式
2 hibernate缓存特点:
第一类 hibernate的一级缓存
(1)hibernate的一级缓存默认打开的
(2)hibernate的一级缓存使用范围,是session范围,从session创建到session关闭范围
(3)hibernate的一级缓存中,存储数据必须持久态数据
第二类 hibernate的二级缓存
(1)目前已经不使用了,替代技术 redis
(2)二级缓存默认不是打开的,需要配置
(3)二级缓存使用范围,是sessionFactory范围- Hibernate 基本配置
- hibernate的基本配置
- Hibernate 的基本配置
- hibernate基本配置
- Spring+hibernate基本配置
- SpringMVC+Hibernate基本配置
- hibernate的基本配置
- Hibernate基本配置
- Hibernate基本配置
- hibernate 基本配置
- hibernate-1-基本配置
- hibernate基本配置
- Hibernate基本配置
- hibernate基本配置
- Hibernate基本配置
- hibernate 基本配置和使用
- hibernate.cfg.xml基本配置
- Servlet, Spring, hibernate基本配置
- Reactor 模式
- 设计师要懂心理学
- python mysql连接
- 20171029_该还的就得加倍的还!
- 关于线上支付的实现思想方法与例子
- hibernate基本配置
- IP地址能不能被泄露?
- 日记(周末)
- 流程控制值循环结构
- PAT1019. 数字黑洞(20)
- 文章标题
- 如何将spring源码成功导入Eclipse中
- 最长上升连续子序列
- 计算长方形的面积和周长