ssh学习之hibernate笔记

本文介绍了SSH中的Hibernate ORM框架,讲述了Hibernate作为对象关系映射工具如何简化数据访问。总结了CRM系统的架构,并详细解析了Hibernate的执行流程,包括配置文件、sessionFactory的创建与管理。此外,还探讨了Dao模式的原理以及在开发中如何实现新增客户功能,涉及sessionFactory生命周期、Dao接口设计、Service模块以及Servlet的交互。
摘要由CSDN通过智能技术生成

hibernate

总结

crm系统:客户关系管理系统。

crm系统技术架构:采用b/s模式,基于javaEE三层标准架构,表示层(web层)、业务层、持久层

技术层技术方案:使用hibernate实现数据访问接口,采用dao模式开发数据访问接口,dao包括:dao接口和pojo类。

hibernate:是orm框架,orm即对象关系映射。

hibernate完成java类和表的映射之后,自动实现向数据库发起操作(增、删、改、查)

hibernate 执行流程

  1. 配置文件

​ 1)映射文件,xxx.hbm.xml(配置表和类的映射关系)和pojo类(bean),一对儿对应一张表

​ 2)hibernate.cfg.xml,配置hiberante运行参数(属性)、加载hbm.xml

  1. 使用configuration对 文件,创建sessionFactory会话工厂

​ sessionFactory会话工厂,生产session,sessionFactory是线程安全的,可以采用单例模式管理sessionFacrory

  1. 通过sessionFactory创建session(包括数据库连接),session中包括一个connection数据库连接,通过session向数据库发出sql语句

  2. 通过session操作数据库

​ 1)对于增删改操作,需要开启事务

​ 2)对查询操作,通过query对象查询。

  1. 释放资源
  • xxx.hbm.xml
<hibernate-mapping>
	<!-- 将表和类对应起来
 	name:类名,写类的全限定名(必须配置)
	table:表名(必须配置)
	catalog:使用mysql配置数据库名,可以不用配置,默认使用连接的哪个数据库的名字
	schema:使用oracle时候配置用户名
	-->
    <class name="cn.itcast.crm.domain.CstCusomer" table="cst_customer">
        <!-- 主键映射 
		name:表中的主键对应的属性
		type:属性的类型
		-->
        <id name="custId" type="java.lang.Long">
            <!--对应表中的主键字段-->
            <conlumn name="cust_id"></conlumn>
            <!--主键生成策略
			identity:自增主键生成策略
			其他策略:uuid(唯一串),assgiend(手动指定),sequence(用于oracle中的序列生成主键)
			-->
            <generator class="identity"></generator>
        </id>
    
        <!--普通属性和字段的映射
		name:类中的属性
		-->
        <property name="custName" type="string">
            <!-- 属性对应的字段 -->
            <conlumn name="cust_name"></conlumn>
        </property>
    </class>
</hibernate-mapping>
  • hibernate.cfg.xml
<hibernate-configuration>
	<!-- 配置会话工厂所需要的属性 -->
	<session-factory>
	<!-- 配置hibernate运行的参数 -->

	<!-- 数据库方言,根据数据库选择 -->
	<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
	<!-- 数据库驱动 -->
	<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
	<!-- 数据库连接url -->
	<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/crm_hibernate0120</property>
	<!-- 数据库用户名和密码 -->
	<property name="hibernate.connection.username">root</property>
	<property name="hibernate.connection.password">mysql</property>
	
	
	<!-- 配置c3p0 -->
	 <!-- 连接池提供商 -->
	<property name="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property>
	<!-- 连接池中保留的最大连接数-->
	<property name="hibernate.c3p0.max_size">10</property>
	<!-- 连接池中保留的最小连接数 -->
	<property name="hibernate.c3p0.min_size">1</property>
	<!-- 最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃 -->
	<property name="hibernate.c3p0.maxIdleTime">60</property>
	<!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 -->
	<property name="hibernate.c3p0.timeout">5000</property>
	

	<!--为了方便调试是否在运行hibernate时在日志中输出sql语句 -->
	<property name="hibernate.show_sql">true</property>
	<!-- 是否对日志中输出的sql语句进行格式化 -->
	<property name="hibernate.format_sql">true</property>

	<!-- 
		hbm2ddl.auto的4个值,如果不需要设置为none,建议正式环境设置为none
		validate 加载hibernate时,验证创建数据库表结构
		create 每次加载hibernate,重新创建数据库表结构,这就是导致数据库表数据丢失的原因。
		create-drop 加载hibernate时创建,退出是删除表结构
		update 加载hibernate自动更新数据库结构
		none 不执行检查
		 -->
	<property name="hibernate.hbm2ddl.auto">none</property>
	


	<!-- 加载hbm.xml映射文件 -->
	<mapping resource="cn/itcast/crm/domain/CstCustomer.hbm.xml"/>
	</session-factory>
</hibernate-configuration>

Dao

Dao模式(data access object)它包括Data Accessor和Domain Object两部分。

  • data accessor可以将业务层访问数据库的细节代码封装起来,常见的是封装成一个java接口,比如插入用户信息dao接口。
  • Domain Object为领域对象,将业务数据封装在一个java对象中,供dao接口使用,比如将用户信息封装在一个User对象中。

hibernate

hibernate是轻量级javaee应用的持久层框架,它用于实现DAO,它是一个关系型数据库的ORM框架。

  • ORM框架:Object Relational Mapping对象关系映射
  • Object:对象,java对象
  • Relational:关系,关系数据库中的二维表
  • Mapping:映射,通过操作java对象去操作数据库
对应关系
java类
java对象表中每一条记录
java对象属性表中字段

新增客户功能实现

1. sessionFactory生命周期

sessionFactory是会话工厂,它的作用是创建session。sessionFactory是线程安全的,多个并发线程可以同时访问一个sessionFactory并从中获取session实例,sessionFactory在实际开发中可以单例模式管理,即应用程序在执行过程中只存在一个sessionFactory,创建工具类如下:

public class HibernateUtil{
    
    private static SessionFactory sessionFactory;
    
    //通过单例管理sessionFactory,整个系统运行过程中只会构建一个sessionFactory对象
    static{
        sessionFactory = new Configuration().configure().buildSessionFactory();
    }
    //获取sessionFactory
    public static SessionFactory getSessionFactory(){
        return sessionFactory;
    }
    
    //获取session
    public static Session openSession(){
        return sessionFactory.openSession();
    }
}

2. Dao

开发dao原则:

  1. 针对每一张表有一个dao 接口

  2. dao中不要有业务逻辑,因为dao是一个通用的数据库访问的接口

public interface CstCustomerDao{
    //插入客户信息
    public void insert(CstCustomer customer);
}

public class CstCustomerDaoImpl implements CstCustomerDao{
    @Override
    public void insert(CstCustomer customer){
        
        //创建session
        Session session = HibernateUtil.openSession();
        //开启事务
        Transaction transaction = session.beginTransaction();
        try{
            session.save(customer);
            transaction.commit();
        }catch(Exception e){
            e.printStackTrace();
            //回滚事务
            transaction.rollback();
        }finally{
            session.close();
        }
    }
}

3. service

开发service根据模块去创建,一个模块创建一个service

public class CusomerServiceImpl implements CustomerService{
    @Override
    public void insertCustomer(CstCustomer cstCustomer){
        //调用dao插入客户信息
        CstCustomerDao cstCustomerDao = new CstCustomerDaoImpl();
        cstCustomerDao.insert(cstCustomer);
    }
}

4. servlet

接受http请求,调用service执行业务逻辑,返回http结果。

接受客户信息:jsp向servlet提交客户信息

将客户信息封装成polo对象,调用service

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值