zoukankan      html  css  js  c++  java
  • Hibernate配置与事务管理

    数据库中 @num:代表一个变量  

    Set @num = 10;

    Select @num+@num from dual;  dual:临时表

    得到结果 20

    Hibernate:运用数据持久化,使用ORM框架

    JSP:java server page

    ORM:object relationship mapping

    Hibernate:JDBC进行轻量级的对象封装,可取代CMP(容器管理持久化),完成数据持久化的重任

     

    JDBC:java数据连接技术 java database connection

    Hibernate入门:

    1.O/R Mapping:对象-关系映射,使用元数据(meata data)描述对象与数据库间的映射

    2.Entity Bean :重量级框架

    3.JDO:java database object  OJB:java桥接技术

    4.JPA:java持久化API(应用程序接口)

     

    开发Hibernate的第一步:

    1.导入包require文件夹(必要)

    2.创建实体对象

    3.src下面创建xml(hibernate.cfg.xml)-----导入dtd(基本配置文件----链接数据库)

    <hibernate-configuration>

    <session-factory>

    <!--配置方言 告诉hibernate是哪个数据库-->

    <property name=”dialect”>org.hibernate.dialect.MySqlDialect</property>

    <!--配置mysql驱动-->

    <property name=”connection.driver.class”>com.mysql.jdbc.Driber</property>

    <!--配置mysqlurl地址 注意不要空格-->

    <property name=”connection.url”>jdbc:mysql://127.0.0.1:3306/text</property>

    <!--配置mysql的使用名称 注意不要空格-->

    <property name=”connection.username”>root</property>

    <!--配置mysql的密码 注意不要空格-->

    <property name=”connection.password”>qwe</property>

    <!--配置显示sql语句-->

    <property name=”show_sql”>true</property>

    <!--自动创建一个表 create没有则创建,每次只有一次,会打印sql语句;update:没有则创建,有则直接用,不会打印sql语句-->

    <property name=”hbm2ddl.auto”>update</property>

    <!--格式化sql语句-->

    <property name=”format-sql”>true</property>

            <!--映射ormxml student.hdm.xml-->

    <mapping resource=”com/my/cfg/studnet.hdm.xml”/>

    </session-factory>

    </hibernate-configuration>

    4.实体类中必须设置get/set;必须提供一个默认空的构造函数;如果是集合:一般用set集合

       集合:set(不能重复) list(能重复);对象实现可序列化(serializable)

    5.创建一个实体数据关系映射 对象名称.hbm.xml(链接对象)  DTD:文档类型 DDL:数据库定义语言

    <!--packpage 对包文件进行映射-->

     

    -------不写table=t_student/column=sid,默认表对应类名,属性对应列名

     

    <hibernate-mapping package=”com.my.bean”>

    <!--对哪个实体bean进行映射 name必须对应的类的名字 table对应你要映射的表名-->

    <class name=”student” table=”t_student”>

    <!--对应表的标识符 id对应属性的id(标识符) type 可选择项-->

    <id name=”id” column=”sid” type=”java.lang.Integer”>

    <!--配置主键的生成策略 自动增长id-->

    <generator class=”increment”></generator>

    </id>

    <!--name为对象中的属性名,column对应表中的列名-->

    <property name=”name” column=”name” type=”java.lang.string”></property >

    <property name=”birthday” column=”birthday”></property >

    </class>

    </hibernate-mapping>

     

    http(session):与用户打交道的session

    hibernate中的session:与数据库打交道

     

    事务与数据库打交道

    数据库中的执行的一系列操作看做一个整体作为一个事务,要不全部执行成功,要不全部执行失败;----事务

    MySQL默认事务自动提交

     

    Show variables like %auto%;

    Set autocommit = 0;默认事务提交

    Rollback;回滚

    Commit;提交-----不能再实现回滚

     

     

    Savepoint nine;-----设置一个保存点,备份

    Rollback to nine;----回滚到nine所保存的数据

    Lock table 表名 write;-----锁表

    Unlock tables;-----解锁表

    Set names utf-8;------设置中文的字符集

     

    POJO:javaBean

    VO:value object    DO:database object   DTO:database translet object数据传输对象

     

    Teacher t = new Teacher();

    增加:session.save(t);

    1.增加时,直接添加id;

    session.saveorupdate(t);

    1.增加时,如果有id,则不添加,可修改数据;

    查询:Teacher t = (Teacher) session.get(Teacher.class,1);

    Teacher t1 = (Teacher)session.get(Teacher.class,1);

    1.只有一条数据,但是从缓存中取得第二条的数据;不管用不用数据,都会在数据库中提取数据

    2.如果找不到对象,则返回null

    Teacher t = (Teacher) session.load(Teacher.class,1);

    1.load中存在懒加载;当没有使用对象时,不会在数据库中提取数据,当使用对象时,才发送sql语句到数据库

    1. 如果找不到对象,则报错(objectNotFoundException)--------找不到对象

     

    Teacher t = new Teacher(“xiaoming12121”);

    瞬时态:1.new的对象

         2.还未与session相关联,还不能持久化到数据库中

    Session.save(t);

    持久态:1.session相关联

       2.在数据库中有与之对应的数据

    Session.close();

    脱管态:1.与数据库中有与之对应的数据

       2.session断开连接

       3.已经提交

     

    实体关系映射:一对一/一对多/多对多

    主键:跟业务不挂钩,不轻易变动的数据

    主键关联:主键对主键

    <!--必须依赖personid的值-->

    在配置一对一中的id,

    生成策略:

    <generator class=”foreign”>

    <param name=”property”>person</param>

    </generator>

    <onetoone name=”IDcard” class=”包名.类名” constrained=”true” ></onetoone>

    另一个表:

    <onetoone name=”person” class=”包名.类名” cascade=”IDcard”></onetoone>

    外键关联:外键对主键

    IDcard:

    <many-to-one name=”person” column=”p_id” class=”包名.类名” unique=true></many-to-one>

     

     

     

    双向关联:(外键建多方,Inverse建在一方,控制权交给多方) Inverse:反转

     

    1.加载配置 configuration

    2.生成一个session工厂

    3.获得session    

    openSession():每次都获得一个新的连接/getCurrentSession():每次都是同一个session

    4.开启一个事务(添加回滚,提交)

  • 相关阅读:
    老爹回忆录
    【日常】你这一辈子,有没有被保安拦住过

    【论文阅读】Deep Adversarial Subspace Clustering
    【日常】爱情故事应该是这样的
    maven打包遇到错误,Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.1:test
    Thymeleaf th:include、th:replace引用
    IDEA中log4j.properties配置文件详解
    错误Uncaught Error: Bootstrap's JavaScript requires jQuery at bootstrap.min.js:6 错误详解
    ybatis 逆向工程 自动生成的mapper文件没有 主键方法
  • 原文地址:https://www.cnblogs.com/z1234/p/6194616.html
Copyright © 2011-2022 走看看