IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> Mybatis框架② -> 正文阅读

[PHP知识库]Mybatis框架②

🧆Mybatis②

目录

  1. log4j日志文件配置
  2. 接口绑定之批量操作
  3. 测试动态SQL
    (1)if标签
    (2)where标签(if的优化)
    (3)choose…when…otherwise标签
    (4)bind标签
    (5)set标签
    (6)trim标签
    (7)sql…include标签
  4. Mybatis的内建别名

一、log4j日志文件配置

1、官网下载jar包或者Mybatis资源包里的jar包导入项目lib

在这里插入图片描述


2、创建log4j配置文件

文件内容》》

# Set root category priority to INFO and its only appender to CONSOLE. 
log4j.rootCategory=INFO, CONSOLE 
# log4j.rootCategory=INFO, CONSOLE, LOGFILE

#单独设置SQL语句的输出级别为DEBUG级别
#方法级别设置
#log4j.logger.com.yjxxt.mappers.DeptMapper.queryAll=DEBUG
#类级别
#log4j.logger.com.yjxxt.mappers.DeptMapper=DEBUG
#包级别
log4j.logger.com.mybatis.mappers=DEBUG 


# CONSOLE is set to be a ConsoleAppender using a PatternLayout. 
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender 
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout 
log4j.appender.CONSOLE.layout.ConversionPattern= %m%c%l%n

# LOGFILE is set to be a File appender using a PatternLayout. 
log4j.appender.LOGFILE=org.apache.log4j.FileAppender 
log4j.appender.LOGFILE.File=D:\\Java\\Project\\untitled\\Mybatis\\src\\test.log
log4j.appender.LOGFILE.Append=true 
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout 
log4j.appender.LOGFILE.layout.ConversionPattern=- %m %l%n

在这里插入图片描述


3、测试
public class test{
	public static void main(String[] args){
	 //日志文件的测试
        Logger log=Logger.getLogger(Test01.class);
        log.fatal("致命的,系统错误");
        log.error("错误");
        log.warn("警告");
        log.debug("debug");
	}
}

在这里插入图片描述


二、接口绑定之批量操作

1、批量增加用户

测试》》

//批量插入
EmpMapper em=session.getMapper(EmpMapper.class);
        em.muchinsert(List.of(
                new Emp(100,"王二"),
                new Emp(101,"王三")
        ));

sql映射文件》》

<!--separator标识一个字符串,分隔符用于sql循环拼接-->
<!--    批量记录插入-->
    <insert id="muchinsert" parameterType="list">
        insert into emp(empno,ename)
        <foreach collection="list" item="item" separator="union">
            select #{item.empno},#{item.ename}from dual
        </foreach>
    </insert>

接口文件》》

//多行插入
    int muchinsert(@Param("list") List<Emp> listemp);

结果》》

在这里插入图片描述
在这里插入图片描述

2、批量删除用户

测试》》

        //批量删除
        em.muchdelete(List.of(
                new Emp(100),
                new Emp(101)
        ));

sql映射文件》》

<!--    批量删除-->
    <delete id="muchdelete" parameterType="list">
        delete from emp where empno in (
            <foreach collection="list" item="item" separator=",">
            #{item.empno}
            </foreach>
        )
    </delete>

接口文件》》

  //批量删除
    int muchdelete(@Param("list") List<Emp> listemp);

结果》》


在这里插入图片描述
在这里插入图片描述
更新update与上面类似……略


三、测试动态SQL

  • 动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦。
  • 使用动态 SQL 并非一件易事,但借助可用于任何 SQL 映射语句中的强大的动态 SQL 语言,MyBatis 显著地提升了这一特性的易用性。

1、 if 标签
  • 用于进行条件判断, test 属性用于指定判断条件. 为了拼接条件, 在 SQL 语句后强行添加 1=1 的恒成立条件

测试》》

        //if
        System.out.println("-----------------全空--------------------");
        System.out.println(em.queryif(null, 0));
        System.out.println("-----------------ename--------------------");
        System.out.println(em.queryif("JONES", 0));
        System.out.println("-----------------empno--------------------");
        System.out.println(em.queryif(null, 7698));

sql映射文件》》

<!--    if-->
    <select id="queryif" resultType="Emp">
        select * from emp where 1=1
        <if test="ename!=null">and ename=#{ename}</if>
        <if test="empno!=0">and empno=#{empno}</if>
    </select>
<!--    select * from emp where 1=1 and ename!=null and empno!=0-->

接口文件》》

  //if标签
    List<Emp> queryif(@Param("ename") String ename,@Param("empno") int empno);

结果》》

在这里插入图片描述


2、 where 标签(if的优化)
  • 如果没有条件, 不会生成 where 关键字
  • 如果有条件, 会自动添加 where 关键字
  • 如果第一个条件中有 and, 去除之
    <select id="queryif" resultType="Emp">
        select * from emp
        <where>
            <if test="ename!=null">and ename=#{ename}</if>
            <if test="empno!=0">and empno=#{empno}</if>
        </where>
    </select>

3、choose…when…otherwise标签
  • 类似于switch……case

sql映射文件》》

 <select id="querychoose" resultType="dept" parameterType="int">
        select * from dept
        <where>
            <choose>
                <when test="deptno!=0">
                    and deptno=#{deptno}
                </when>

                <otherwise>
                    and 1=1
                </otherwise>
            </choose>
        </where>
    </select>


测试》》

 //choose
        System.out.println("------------------deptno=10-----------------------");
        System.out.println(em.querychoose(10));
        System.out.println("------------------deptno=100-----------------------");
        System.out.println(em.querychoose(100));

结果
在这里插入图片描述

非常放便好用!


4、 bind 标签
  • 用于对数据进行再加工, 用于模糊查询

测试》》

        //bind
        System.out.println("------------------------bind---------------------------------");
        System.out.println(em.querybind("A"));

sql映射文件》》

<!--bind-->
    <select id="querybind" parameterType="String" resultType="Emp">
        select * from emp
        <where>
            <if test="ename!=null">
                <bind name="ename" value="'%'+ename+'%'" />
                and ename like #{ename}
            </if>
        </where>
    </select>

接口文件》》

    //bind
    List<Emp> querybind(@Param("ename") String ename);

结果》》

在这里插入图片描述


5、 set 标签
  • 满足条件时, 会自动添加 set 关键字
  • 会去除 set 子句中多余的逗号
  • 不满足条件时, 不会生成 set 关键字

测试》》

    //set
        em.queryset(20,"lisi");

sql映射文件》》

 <update id="queryset">
        update dept
        <set>
            dname=#{dname},
        </set>
        where deptno=#{deptno}
    </update>

接口文件》》

    //Set标签
    int queryset(@Param("deptno") int deptno,@Param("dname") String dname);

结果》》
在这里插入图片描述

在这里插入图片描述


6、trim 标签
  1. prefix, 在前面添加内容
  2. prefixOverrides, 从前面去除内容
  3. suffix, 向后面添加内容
  4. suffixOverrides, 从后面去除内容

测试》》

    //trim
        em.querytrim(20,"wangwu");

sql映射文件》》

<update id="querytrim" parameterType="int">
        update dept
        <trim prefix="set" suffix="where">
            dname=#{dname}
        </trim>
        deptno=#{deptno}
    </update>

接口文件》》

 //trim标签
    int querytrim(@Param("deptno") int deptno,@Param("dname") String dname);

结果》》

在这里插入图片描述

在这里插入图片描述


7、 sql…include标签
  • sql用于提取 SQL 语句, include用于引用 SQL 语句

测试》》

    //sql....include
        System.out.println(em.queryinclude());

sql映射文件》》

<!--    sql....include-->
    <sql id="sql"> empno,ename,sal</sql>
    <select id="queryinclude" resultType="Emp">
        select 
        <include refid="sql"/>
        from emp
    </select>

接口文件》》

//sql....include
    List<Emp> queryinclude();

结果》》

在这里插入图片描述


四、Mybatis的内建别名

  • 下面是一些为常见的 Java 类型内建的类型别名。它们都是不区分大小写的,注意,为了应对原始类型的命名重复,采取了特殊的命名风格。
别名映射的类型
_bytebyte
_longlong
_shortshort
_intint
_integerint
_doubledouble
_floatfloat
_booleanboolean
stringString
byteByte
longLong
shortShort
intInteger
integerInteger
doubleDouble
floatFloat
booleanBoolean
dateDate
decimalBigDecimal
bigdecimalBigDecimal
objectObject
mapMap
hashmapHashMap
listList
arraylistArrayList
collectionCollection
iteratorIterator
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-09-20 15:33:56  更:2021-09-20 15:34:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 4:15:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计