手下的侦察兵跑回来报告:“柳长官,铁丝网那边有个口子,发现有一批鬼子卡车进出,估计就是鬼子的弹药车!”

共享一个二级缓存


一、Hbernate中的日志框架_整合log4j(了解)

  • Hibernate 利用 Simple Logging Facade for Java (SLF4J)
    来记录不同系统事件的日志。SLF4J 可以根据你选择的绑定把日志输出到几个日志框架(NOP、Simple、log4j version
    1.2、JDK 1.4 logging、JCL 或 logback)上。
  • slf4j 核心jar:slf4j-api-1.6.1.jar 。slf4j 是日志框架,将其他优秀的日志第三方进行了整合。
  • 整合导入jar包,添加至构建路径
      1、log4j 核心包:log4j-1.2.17.jar
      2、过渡jar(整合jar):slf4j-log4j12-1.7.5.jar
  • 导入配置文件,该文件在 hibernate-distribution-3.6.10.Finalprojectetc 中,拷贝至项目的src 目录下
      log4j.properties,此配置文件配置log4j 如何输出日志。
  • 编写配置文件内容:
      1、记录器
      2、输出源
      3、布局
  • 记录器:
      例如:log4j.rootLogger=info, stdout, file
      格式:log4j.rootLogger=日志级别, 输出源1, 输出源2, ……
      log4j 日志级别:fatal 致命错误、error 错误、warn 警告、info 信息、debug 调试信息、trace 堆栈信息 (输出信息多少:日志信息量逐渐增加),项目上线时用error项目开发中用info
  • 输出源:
      例如:log4j.appender.file=org.apache.log4j.FileAppender
      格式:log4j.appender.输出源的名称=输出源的实现类
        输出源的名称:自定义
        输出源的实现类:log4j提供
      输出源的属性,例如:log4j.appender.file.File=d:mylog.log
      输出源的属性格式:log4j.appender.名称.属性=值
      每一个输出源对应一个实现类,实现类都是属性(setter),底层执行setter方法进行赋值。
  • 常见的输出源实现类:
      org.apache.log4j.FileAppender 输出文件中
        file,表示文件输出位置
      org.apache.log4j.ConsoleAppender 输出到控制台
        Target,表示使用哪种输出方式,在控制台打印内容,取值:System.out / System.err
  • 布局 => 确定输出格式
      例如:log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
      格式:log4j.appender.数据源.layout=org.apache.log4j.PatternLayout
      布局属性:log4j.appender. 数据源.layout.ConversionPattern=值
        例如1:log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
        输出为:21:57:26,197 INFO SessionFactoryImpl:927 - closing
        例如2:log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
        输出为:closing
  • 扩展:对指定的目录设置日志级别
      例如:log4j.logger.org.hibernate.transaction=debug
      格式:log4j.logger.包结构=级别

二、Hibernate的关联关系映射(一对一)(了解)

  • 情况1:主表的主键,与从表的外键(唯一),形成主外键关系。
  • 情况2:主表的主键,与从表的主键,形成主外键关系 (从表的主键又是外键,即主键同步)-- 推荐使用该方式
  • 如下图所示:

2.1、情况1示例

Company.hbm.xml

<?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  package="com.itheima.domain">
    <class name="Company" table="t_company">
        <id name="cid" column="cid">
            <generator class="native"></generator>
        </id>
        <property name="cname" column="cname" type="string"></property>

        <!-- 一方的配置:一对一,特殊的多对一。
             one-to-one:默认使用主键同步策略完成一对一的表关系体现。
                但是我们现在使用的是主外键引用来完成一对一的表关系体现。那么需要进行修正。
                使用 property-ref="company"   值是对方引用本方的属性名称
        -->

        <one-to-one name="address" class="Address" property-ref="company"></one-to-one>
    </class>
</hibernate-mapping>

Address.hbm.xml

<?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  package="com.itheima.domain">
    <class name="Address" table="t_address">
        <id name="aid" column="aid">
            <generator class="native"></generator>
        </id>
        <property name="aname" column="aname" type="string"></property>

        <!-- 多方的配置:一对一,特殊的多对一。外键唯一(外键不能重复),提供外键名称,unique默认值是false -->
        <many-to-one name="company" class="Company" column="company_id" unique="true"></many-to-one>
    </class>
</hibernate-mapping>

测试代码如下:

package com.itheima.a_one2one;

import org.hibernate.Session;
import org.junit.Test;

import com.itheima.domain.Address;
import com.itheima.domain.Company;
import com.itheima.utils.HibernateUtils;

// 演示:一对一
public class Demo1 {
    @Test
    // 一对一保存
    public void fun1() {
        Session session = HibernateUtils.openSession();
        session.beginTransaction();

        Company c = new Company();
        c.setCname("传智播客");

        Address a = new Address();
        a.setAname("北京市朝阳区平房乡红门村28号");

        // 注意:在一对一使用外键引用的时候,即情况1,外键所在的对象才能维护外键关系,另一方无法维护外键关系。
        a.setCompany(c); // 维护外键关系

        // 注意:在一对一使用主外键同步的时候,即情况2,双方都能维护外键关系。
        // a.setCompany(c); // 维护外键关系
        // c.setAddress(a); // 维护外键关系

        session.save(c);
        session.save(a);

        session.getTransaction().commit();
        session.close();
    }

    @Test
    // 一对一查询
    // 注意:Hibernate中一对一查询,一定会使用表连接查询,所以也就没有懒加载的问题了。
    public void fun2() {
        Session session = HibernateUtils.openSession();
        session.beginTransaction();

        Company c = (Company) session.get(Company.class, 1);
        System.out.println(c);

        session.getTransaction().commit();
        session.close();
    }
}

2.2、情况2示例

Company.hbm.xml

<?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  package="com.itheima.domain">
    <class name="Company" table="t_company">
        <id name="cid" column="cid">
            <generator class="native"></generator>
        </id>
        <property name="cname" column="cname" type="string"></property>

        <!-- 一方的配置:一对一,真正的一对一。不需要进行修正了。
             one-to-one:默认使用主键同步策略完成一对一的表关系体现。我们现在就使用默认的策略。
              注意:此时可以使用以下3个属性。
                cascade     lazy        fetch
        -->

        <one-to-one name="address" class="Address" ></one-to-one>
    </class>
</hibernate-mapping>

Address.hbm.xml

<?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  package="com.itheima.domain">
    <class name="Address" table="t_address">
        <id name="aid" column="aid">
            <!-- foreign:声明该键既是主键又是外键 -->
            <generator class="foreign">
                <!-- 当本方作为外键时,注入的是引用对方的属性名称 -->
                <param name="property">company</param>
            </generator>
        </id>
        <property name="aname" column="aname" type="string"></property>

        <!-- 一方的配置:一对一,真正的一对一。既是主键又是外键,需要在某一方声明外键 ,constrained表示约束,默认值是false-->
        <one-to-one name="company" class="Company" constrained="true"></one-to-one>
    </class>
</hibernate-mapping>

测试代码同上:

三、二级缓存【掌握】

亲朋棋牌客户端登录 杰克棋牌输得最惨的 腾讯棋牌游戏免费麻将 有人在做买单返吗 荣耀棋牌2.04版本 扑克王德州扑克社区 手机棋牌大全 亚洲杯 好乐棋牌官方网站 豪门娱乐棋牌真人版下载

编辑:安伯开安

相关新闻

央视《对话》伏彩瑞:在线教育不谈颠覆

2019-02-18 00:20:06

潜江欣禄狼传媒广告有限公司

国美会员关爱女性健康 打造粉丝带公益义诊活动

2019-02-18 00:55:43

阜阳确谈竞机械设备有限公司

男人养生 :男子吃姜有讲究

2019-02-18 00:03:10

扬中乖饭种美容美发化妆学校

靖边林产业成农民增收“干道”

2019-02-18 00:27:39

酒泉涯团电子有限公司

热门推荐

  • 造型激进 现代伊兰特Sport亮相SEMA改装展
  • 发力MPV高端市场 瑞风M6预计售价25-30万
  • 苹果iPhone X抢购24小时记:黄牛哭了,消费者笑了
  • 香港各界人士盛赞十九大:乘东风实现香港再腾飞
  • ‘뛰는 놈 위에 나는 밥 데용’…형·오빠 같은 따뜻한 리더십
  • 中国与马尔代夫签署自贸协定 印度耿耿于怀
  • 有人做了个“烂苹果”网站,帮你筛选有色狼参与的影视作品
  • 蔚来汽车融资10亿美元估值50亿美元,腾讯领投
  • 谷歌Pixel 2 XL质量门发酵:出厂竟没预装系统
  • 有望2018年上市 吉利全新SUV谍照曝光
  • 河北新闻网版权所有 本站点信息未经允许不得复制或镜像 法律顾问:辽宁微乐棋牌大全 象样棋牌骗局
  • 棋牌游戏 copyright ? 2000 - 2016
  • 新闻热线:0311-67563366 广告热线:0311-67562966 新闻投诉:0311-67562994
  • 冀ICP备 09047539号-1 | 互联网新闻信息服务许可证编号:1312006002
  • 广播电视节目制作经营许可证(冀)字第101号|信息网络传播视听节目许可证0311618号
  • 《没有硝烟的战争》 游玩广西棋牌开挂 棋牌水浒传 1368棋牌官方下载