zoukankan      html  css  js  c++  java
  • hibernate框架学习第一天:hibernate介绍及基本操作

    框架
    辅助开发者进行开发,半成品软件,开发者与框架进行合作开发

    Hibernate3
    Hibernate是一种基于Java的轻量级的ORM框架
    基于Java:底层实现是Java语言,可以脱离WEB,在纯JAVA环境下运行
    轻量级:与重量级比对,消耗资源比较小,运算速度比较快
    ORM:(ORMapping:Object Relation Mapping)对象关系映射
    O:Java对象
    R:关系型数据库表
    M:映射(map:地图 映射)

    对象与表的对应关系
    1.类与表对应
    2.类的属性与表的字段对应
    3.类实例(对象)与表记录对应
    4.一个类可以对应多个表,一个表可以对应多个类
    5.类的属性个数与表的字段个数无需完全对应
    类中有5个,表中有5个,只对应3个
    6.类的属性名称与表的字段名称无需完全对应
    7.对应关系中的数据类型必须是可转化的
    8.表与表的关系转化成对象与对象的关系

    Java操作数据库:JDBC+SQL
    Hibernate可以帮助开发者实现自动的JDBC+自动的SQL语句
    工程:
    表现层
    业务层(逻辑层)
    数据层
    Hibernate是一种数据层解决方案

    数据层解决方案了解:
    JDBC
    JPA(Java Persistence API )
    Hibernate实现JPA
    iBatis/MyBatis
    其他
    Apache
    Spring JDBCTemplate、HibernateTemplate、等等
    Toplink

    Hibernate有什么东西
    系统架构图:描述一个技术中所有的相关模块,以及模块与模块之间的关系(上层依赖于下层)
    图一:
    应用程序 Hibernate 数据库
    APP依赖H3 H3依赖DB
    H3:需要进行配置
    映射:需要使用XML格式
    持久化对象:出现在APP于H3间,起桥梁的作用,连接APP与H3
    图二:
    H3裂变成5块
    SessionFactory制作Session
    JDBC,JNDI,JTA??
    APP中包含一种叫做瞬时对象
    APP与H3关联靠Session进行
    图三:
    H3依赖别人实现的JDBC,JTA,JNDI
    H3存在有事务及事务工厂
    H3的连接需要别人提供

    -----------------------------------------------------------------
    课程Hibernate3.6.10版本
    下载Hibernate
    http://sourceforge.net/projects/hibernate/files/hibernate3/
    JBOSS
    JBOSS服务器
    Hibernate
    jbpm

    H3目录结构
    documentation:帮助文档
    lib:开发使用jar包
    hibernate3.jar:核心jar包
    project:源码
    hibernate-testing.jar:测试包

    H3开发jar包
    一共9个+2个日志包,共11个
    日志:
    slf4j:简单日志门面
    log4j:略
    开发使用日志技术:
    slf4j整合log4j的jar包:slf4j-log4j12-1.7.2.jar
    log4j包:log4j-1.2.16.jar

    Hibernate开发
    O:对象,也就是封装数据的模型(开发者完成)
    R:关系型数据库表(开发者完成)
    M:映射关系(开发者完成)

    1.创建工程
    2.导入jar包
    3.做表(R)
    CREATE TABLE `tbl_user` (
    `uuid` varchar(10) NOT NULL,
    `userName` varchar(30) NOT NULL,
    `age` int(3) NOT NULL,
    `address` varchar(30) NOT NULL,
    PRIMARY KEY (`uuid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    4.做模型类(O)
    UserModel.class
    private String uuid;
    private String userName;
    private Integer age;
    private String address;
    1.提供无参可访问的构造方法
    2.声明一个主键属性(uuid)
    3.声明其他的属性
    4.提供对应的访问器(getter/setter)
    5.映射文件(R)
    在Model对应的目录下创建一个文件,名:****Model.hbm.xml
    去资源中查找*.hbm.xml
    把内容复制到对应的文件中
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    '-//Hibernate/Hibernate Mapping DTD 3.0//EN'
    'http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd'>
    <hibernate-mapping>
    <!-- name写全路径模型名,table写DB中表名 -->
    <class name="cn.itcast.h3.helloworld.vo.UserModel" table="tbl_user">
    <!-- 模型中的主键名 -->
    <id name="uuid">
    <!-- assigned -->
    <generator class="assigned" />
    </id>
    <!-- 将模型中的所有属性都写上,使用name -->
    <property name="userName"/>
    <property name="age"/>
    <property name="address"/>
    </class>
    </hibernate-mapping>
    6.系统配置文件
    src/hibernate.properties(早期)
    src/hibernate.cfg.xml(主流)
    在src目录下创建 hibernate.cfg.xml
    从资源包中查找资源
    <?xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
    <session-factory>
    <!-- 数据库连接的配置 -->
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="connection.url">jdbc:mysql://localhost:3306/h3</property>
    <property name="connection.username">root</property>
    <property name="connection.password">root</property>
    <!-- 可选配置 -->
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="show_sql">true</property>
    <!-- 资源注册 -->
    <mapping resource="cn/itcast/h3/helloworld/vo/UserModel.hbm.xml"/>
    </session-factory>
    </hibernate-configuration>
    8.客户端
    //1.加载配置文件hibernate.cfg.xml,得到一个配置对象
    Configuration conf = new Configuration().configure();
    //2.由配置创建一个SessionFactory
    SessionFactory sf = conf.buildSessionFactory();
    //3.由SessionFactory得到Session
    Session s = sf.openSession();
    //4.由Session对象获取事务对象Transaction
    Transaction t = s.beginTransaction();
    //5.完成任务
    //5.1创建一个要存储的对象
    UserModel um = new UserModel();
    um.setUuid("1");
    um.setUserName("李若亮");
    um.setAge(34);
    um.setAddress("传智播客");
    //5.2保存
    s.save(um);

    //6.提交事务
    t.commit();
    //7.关闭Session
    s.close();
    //8.关闭SessionFactory(略)
    sf.close();

    总结:
    1.导包
    2.ORM:O自己做UsreModel R自己做tbl_user M做映射文件hbm.xml
    3.系统配置:cfg.xml
    4.客户端

    ------------------------------------------------
    基本操作
    1.添加数据
    save(obj) 返回的是添加的对象的uuid
    2.修改数据
    update(obj)
    3.删除数据
    delete(obj)
    4.查单个数据
    get(要查询的模型类.class,主键)
    load(要查询的模型类.class,主键)
    返回一个对象,该对象使用反射思想已经被包装成了要查询的模型类
    5.查全部数据
    1.Query
    使用Query进行查询,Query对象需要依赖Session对象创建
    String hql = "from UserModel";
    Query q = s.createQuery(hql);
    查询完毕,可以将查询结果直接以集合的形式展示
    q.list();
    得到一个查询结果(已经被封装成了Model)的集合
    2.SQLQuery查询
    使用SQLQuery查询,SQLQuery对象需要依赖Session对象创建
    SQLQuery q = s.createSQLQuery(sql);
    查询完毕,可以将查询结果直接以集合的形式展示
    q.list();
    结果是将每行查询的数据包装成了一个对象数组Object[]
    每个数组中包装是当前查询的每个字段的内容

  • 相关阅读:
    UOJ #455 [UER #8]雪灾与外卖 (贪心、模拟费用流)
    Codeforces 482E ELCA (LCT)
    Codeforces 798D Mike and distribution (构造)
    AtCoder AGC017C Snuke and Spells
    HDU 6089 Rikka with Terrorist (线段树)
    HDU 6136 Death Podracing (堆)
    AtCoder AGC032D Rotation Sort (DP)
    jenkins+python+kubectl实现批量更新k8s镜像
    Linux 下载最新kubectl版本的命令:
    jenkins X 和k8s CI/CD
  • 原文地址:https://www.cnblogs.com/xyhero/p/9348814.html
Copyright © 2011-2022 走看看