Mybatis(二)进阶——日志管理与动态SQL

MyBatis日志管理

  • 日志文件是用于记录系统操作事件的记录文件或文件集合
  • 日志保存历史数据,是诊断问题以及理解系统活动的重要依据

SLF4j与Logback

在这里插入图片描述
如果程序之前用的是log4j想换成logback,只需要把log4j的jar包从系统中剔除,引入logback的jar包就可以了。程序访问的门面不用做修改,SLF4J会自动完成log4j到logback的迁移工作,切换的工作由日志门面自动帮我们完成。
对于实现来说,目前主流的日志组件有log4j,logback,java.util.logging(jul),这些组件每个都有自己设计的特点,logback是目前的主流。log4j是早期java项目中非常著名的日志组件,logback和log4j是由一个人开发的,两者设计理念是非常相似的,使用也是非常相像的。
logback官网
引入logback依赖

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.3</version>
</dependency> 

引入logback后同时自动添加了以下3个组件
在这里插入图片描述
运行之前的测试程序控制台打印出MyBatis运行过程中产生的日志,日志更方便我们程序的调试
在这里插入图片描述
logback是允许对日志自定义的。在resources中新建logback.xml文件

<?xml version="1.0" encoding="UTF-8"?>

<configuration scan="true" scanPeriod="10 seconds">
    <!--输出器也叫追加器,用于说明在什么地方进行日志输出,name是自定义的-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!-- 日志打印时最前方信息是从哪个线程输出,具体时间,日志级别按5个字符右对齐,
            由哪个类产生的日志, - 具体日志内容, 换行  -->
            <Pattern>[%thread] %d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
<!--    日志打印的根标签 -->
<!--
     level代表日志输出级别(优先级高到低):
        error: 错误 - 系统的故障日志
        warn: 警告 - 存在风险或使用不当的日志
        info: 一般性消息
        debug: 程序内部用于调试信息
        trace: 程序运行的跟踪信息
     开发环境建议用debug便于调试,生产环境建议用info及以上
     -->
    <root level="debug">
<!--        把appender中定义的name加入进来-->
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

MyBatis动态SQL

动态SQL的应用场景

网站筛选条件
在这里插入图片描述

  • 动态SQL是指根据参数数据动态组织SQL的技术
    <select id="dynamicSQL" parameterType="java.util.Map" resultType="com.zl.mybatis.entity.RepositoryStock">
      SELECT * FROM repository_stock
      <where>
          <if test="materialName != null">
              and material_name = #{materialName}
          </if>
          <if test="amount != null">
              and amount &lt; #{amount}
          </if>
      </where>
    </select>

由于在xml中< 是特殊字符,所以这里使用转义字符

    /**
     * 动态SQL语句
     * @throws Exception
     */
    @Test
    public void testDynamicSQL() throws Exception {
        SqlSession session = null;
        try{
            session = MybatisUtils.openSession();
            Map param = new HashMap();
            param.put("materialName", "镀锌沉头螺丝钉");
            param.put("amount", 500);
            //查询条件
            List<RepositoryStock> list = session.selectList("stock.dynamicSQL", param);
            for(RepositoryStock g:list){
                System.out.println(g.getMaterialName() + ":" +
                        g.getSpecs()  + ":" + g.getAmount());

            }
        }catch (Exception e){
            throw e;
        }finally {
            MybatisUtils.closeSession(session);
        }
    }

在这里插入图片描述
< where>标签可以动态地对子SQL进行判断,如果一开始出现and可以自动去掉

MyBatis多表级联查询

多表级联和多表关联查询不同,多表关联是指两个表通过主外键在一条SQL中完成所有数据的提取,多表级联查询是指通过一个对象获取与他关联的另外一个对象,执行SQL语句是多条。

OneToMany对象关联查询

ManyToOne对象关联查询

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三毛村滴雪鱼粉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值