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 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 【狂神Mybatis笔记】Mybatis整理笔记(附代码)(更新中……) -> 正文阅读

[Java知识库]【狂神Mybatis笔记】Mybatis整理笔记(附代码)(更新中……)

Mybatis

环境:

  • JDK1.8

  • Mysql 5.7

  • maven 3.6.1

  • IDEA

回顾:

  • JDBC

  • Mysql

  • java基础

  • Maven

  • Junit

SSM框架:配置文件的。 最好的方式:看官网文档;

1、简介

1.1、什么是Mybatis

在这里插入图片描述

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

MyBatis 本是apache的一个开源项目iBatis, 2010个项目由apache software foundatic迁移google code,并且改名为MyBatis 。

2013年11月迁移到Github

如何获得Mybatis?

  • maven仓库

    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.6</version>
    </dependency>
    
    
  • Github:地址:Github:地址

  • 中文文档:https://mybatis.org/mybatis-3/zh/index.html

在这里插入图片描述

地址:上图地址

在这里插入图片描述

在这里插入图片描述

1.2、持久层

数据持久化

  • 持久化就是将程序的数据在特久状态和瞬时状态转化的过程
  • 内存:断电即失
  • 数据库(jdbc),io文件持久化。
  • 生活:冷藏。罐头

为什么需要需要持久化?

  • 有一些对象,不能让他丢掉。
  • 内存太贵了

1.3、持久层

Dao层,Service层,Controller层…

  • 完成持久化工作的代码块
  • 层界限十分明显。

1.4、为什么需要Mybatis?

  • 方便
  • 帮助程序猿将数据存入到数据库中。
  • 传统的JDBC代码太复杂了。简化。框架。
  • 不用Mybatis也可以。更容易上手。技术没有高低之分
  • 优点
    • 简单易学
    • 灵活
    • sql和代码的分离,提高了可维护性。
    • 提供映射标签,支持对象与数据库的orm字段关系映射
    • 提供对象关系映射标签,支持对象关系组建维护
    • 提供xml标签,支持编写动态sql。

最重要的一点:使用的人多!

Spring SpringMVC SpringBoot

2、第一个Mybatis程序

思路:搭建环境-> 导入Mybatis-> 编写代码-> 测试!

2.1、搭建环境

搭建数据库

创建表

在这里插入图片描述

插入数据

在这里插入图片描述

新建项目

1、新建一个普通的maven项目

2、删除src目录

在这里插入图片描述

注意查看

在这里插入图片描述

官网:mybatis – MyBatis 3 | 简介

3、 导入依赖

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.2、创建一个模块

1、编写mybatis的核心配置文件

  • 创建文件

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="org/mybatis/example/BlogMapper.xml"/>
    </mappers>
</configuration>

在这里插入图片描述

2、编写mybatis工具类

在这里插入图片描述

String resource = "org/mybatis/example/mybatis-config.xml";

在这里插入图片描述

package com.blue.utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;
    static {
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }


}

2.3、编写代码

第一步:MabstisUtils工具类

第二步:resources配置文件mybatis-config.xml

第三步:实体类-User

第四步:接口UserMapper.xml

在这里插入图片描述

在这里插入图片描述

  • 实体类

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 接口实现类

接口实现类由原来的JserDaolmpl转变为一个Mapper配置文件.

在这里插入图片描述

在这里插入图片描述

代码复制过来

在这里插入图片描述

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace=绑定一个对应的Dao/Mapper接口-->
<mapper namespace="com.blue.dao.UserDao">
    <!--select查询语句-->
    <!--id相当于重写方法的名字们这里是重写方法,当实现一个接口的时候以前是需要重写方法的-->
    <!--resultType时返回类型-->
    <select id="getUserList" resultType="com.blue.pojo.User">
        select * from mybatis.user
    </select>
</mapper>

2.4

新建文件对应好

在这里插入图片描述

注意点:

错误1

在这里插入图片描述

MapperRegistry是什么?

解决

在这里插入图片描述

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.examplecom.blue</groupId>
    <artifactId>Mybatis-Study</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>mybatis-01</module>
    </modules>

    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.20</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>



    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>

        </resources>
    </build>

</project>

你们可以能会遇到的问题:

1.配置文件没有注册
2.绑定接口错误。
3.方法名不对
4.返回类型不对
5.Maven导出资源问题

了解方式二

在这里插入图片描述

UserDaoText

package com.blue.dao;

import com.blue.pojo.User;
import com.blue.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class UserDaoText {
    @Test
    public void test(){
        //第一步获取SqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
//        //方式一:执行sql getMapper
//        UserDao userDao = sqlSession.getMapper(UserDao.class);
//        List<User> userList = userDao.getUserList();

        //方式2
        List<User> userList = sqlSession.selectList("com.blue.dao.UserDao.getUserList");

        for (User user : userList){
            System.out.println(user);
        }

        sqlSession.close();
    }

}

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=GMT&amp;useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>

方法对比

在这里插入图片描述

命名

在这里插入图片描述

在这里插入图片描述

3、CRUD

改三个

在这里插入图片描述

3.1、namespace

namespace中的包名要和Dao/mapper接口的包名一致!

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.blue.dao.UserMapper">

    <select id="getUserList" resultType="com.blue.pojo.User">
        select * from mybatis.user
    </select>
</mapper>

3.2、select——查询用户id

选择,查询语句;

  • id:就是对应的namespace中的方法名;
  • resultType:Sql语句执行的返回值!
  • parameterType:参数类型!

在这里插入图片描述

1、编写接口

在这里插入图片描述

package com.blue.dao;

import com.blue.pojo.User;

import java.util.List;

public interface UserMapper {
    //可以避免JDBC代码和手动设置参数
    List<User> getUserList();

    根据ID查询用户
    User getUserById(int id);


}

2、编写对应的mapper中的sql语句

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.blue.dao.UserMapper">

    <select id="getUserList" resultType="com.blue.pojo.User">
        select * from mybatis.user
    </select>
    
    <select id="getUserById" parameterType="int" resultType="com.blue.pojo.User">
        select * from mybatis.user where id =#{id}
    </select>
    
</mapper>

3、测试

在这里插入图片描述

package com.blue.dao;

import com.blue.pojo.User;
import com.blue.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class UserDaoText {
    @Test
    public void test(){
        //第一步获取SqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        try {
            //方式一:执行sql getMapper
            UserMapper userDao = sqlSession.getMapper(UserMapper.class);
            List<User> userList = userDao.getUserList();

//        //方式2
        List<User> userList = sqlSession.selectList("com.blue.dao.UserDao.getUserList");

            for (User user : userList){
                System.out.println(user);
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            sqlSession.close();
        }
    }

    public void getUserById(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = mapper.getUserById(1);
        System.out.println(user);

        sqlSession.close();

    }




}

3.3、Insert——插入用户

1、编写接口

在这里插入图片描述

package com.blue.dao;

import com.blue.pojo.User;

import java.util.List;

public interface UserMapper {
    //可以避免JDBC代码和手动设置参数
    List<User> getUserList();

    根据ID查询用户
    User getUserById(int id);

    //'insert一个用户
    int addUser(User user);

}

2、编写对应的mapper中的sql语句

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.blue.dao.UserMapper">

    <select id="getUserList" resultType="com.blue.pojo.User">
        select * from mybatis.user
    </select>
    
    <select id="getUserById" parameterType="int" resultType="com.blue.pojo.User">
        select * from mybatis.user where id =#{id}
    </select>
    
    <insert id="addUser" parameterType="com.blue.pojo.User">
        insert into mybatis.user (id, name, pwd) VALUES (#{id},#{name},#{pwd});
    </insert>
    
</mapper>

3、测试

在这里插入图片描述

@Test
public void addUser(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();

    UserMapper mapper = sqlSession.getMapper(UserMapper.class);

    int hh = mapper.addUser(new User(4, "hh", "123456"));
    if (hh>0){
        System.out.println("插入成功");
    }

    //提交事务
    sqlSession.commit();
    sqlSession.close();

}

3.4、update——修改用户:

1、编写接口

在这里插入图片描述

package com.blue.dao;

import com.blue.pojo.User;

import java.util.List;

public interface UserMapper {
    //可以避免JDBC代码和手动设置参数
    List<User> getUserList();

    根据ID查询用户
    User getUserById(int id);

    //'insert一个用户
    int addUser(User user);
    
    //修改用户
    int updateUser(User user);

}

2、编写对应的mapper中的sql语句

在这里插入图片描述

<update id="updateUser" parameterType="com.blue.pojo.User">
    update mybatis.user
    set name = #{name},pwd=#{pwd}
    where id=#{id};
</update>

3、测试

在这里插入图片描述

@Test
public void updateUser(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    
    mapper.updateUser(new User(4,"hehe","123213"));
    
    sqlSession.commit();
    sqlSession.close();

}

3.5、delete——删除用户

1、编写接口

在这里插入图片描述

//删除一个用户
int deleteUser(int id);

2、编写对应的mapper中的sql语句

在这里插入图片描述

<delete id="deleteUser" parameterType="int">
    delete
    from mybatis.user
    where id=#{id};
</delete>

3、测试

在这里插入图片描述

@Test
public void deleteUser(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);

    mapper.deleteUser(4);

    sqlSession.commit();
    sqlSession.close();

}

注意点:

增删改需要提交事务!

3.6、分析错误:

1、标签不要匹配错

在这里插入图片描述

2、resource绑定mapper,需要使用路径!

用/,不用点.

在这里插入图片描述

3、程序配置文件必须符合规范!

4、空指针异常:NullPointerException,没有注册到资源

在这里插入图片描述

5、输出的xl文件中存在中文乱码问题!

6、maven资源没有导出

3.7、万能Map

假设,我们的实体类,或者数据库中的表,字段或者参数过多,我们应当考虑使用Map!

1、编写接口

在这里插入图片描述

2、编写对应的mapper中的sql语句

在这里插入图片描述

3、测试

在这里插入图片描述

1、

在这里插入图片描述

2、编写对应的mapper中的sql语句

在这里插入图片描述

3、

在这里插入图片描述

Map传递参数,直接在sql中取出key即可!

对象传递参数,直接在Sq中取对象的属性即可!

只有一个基本类型参数的情况下,可以直接在Sq中取到!

多个参数用Map,或者注解!

3.8、思考题

模糊查询怎么写?

  1. Java代码执行的时候,传递通配符%%

    List<User> userList = mapper.getUserLikel("%可%");

  2. 在sql拼接中使用通配符!

select * from mybatis.user where name like "%"#{value}"%"

1.Java代码执行的时候,传递通配符%%

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

不加%, 查询不出来

2.在sq拼接中使用通配符!

在这里插入图片描述

4、配置解析

image-20220313150235455

4.1、核心配置文件

  • mybatis-config.xml

  • MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。

    configuration(配置)
    properties(属性)
    settings(设置)
    typeAliases(类型别名)
    typeHandlers(类型处理器)
    objectFactory(对象工厂)
    plugins(插件)
    environments(环境配置)
    environment(环境变量)
    transactionManager(事务管理器)
    dataSource(数据源)
    databaseIdProvider(数据库厂商标识)
    mappers(映射器)
    

新建模块

image-20220314141308332

4.2、环境配置(environments)

MyBatis可以配置成适应多种环境

不过要记住:尽管可以配置多个环境,但每个SqlSessionFactory实例只能选择一种环境。

学会使用配置多套运行环境!

Mybatis默认的事务管理器就是JDBC,连接池:POOLED

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=GMT&amp;useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/blue/dao/UserMapper.xml"/>
    </mappers>
</configuration>

image-20220314142517831

image-20220314142702438

了解的:

  • 事务管理器

image-20220314142818043

  • 数据源

image-20220314143055847

image-20220314143358766

4.3、属性(properties)

我们可以通过properties属性来实现引用配置文件

这些属性都是可外部配置且可动态替换的,既可以在典型的ava属性文件中配置,亦可通过properties元素的子元素来传递。【db.properties】.

image-20220314144117947

新建数据库配置文件

image-20220314144222425

db.properties

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=GMT&amp;useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false
username=root
password=123456

在核心配置文件中映入

<!--引入外部胤置文件-->
<properties resource="db.properties">
    <property name="username" value="root"/>
    <property name="pwd" value="123456"/>
</properties>

注意顺序

image-20220314144925470

映入配置文件的几种方式:

  • 可以直接引入外部文件
  • 可以在其中增加一些属性配置
  • 如果两个文件有同一个字段,优先使用外部配置文件的!

第一种方式

image-20220314145232053

第二种方式外部配置文件

image-20220314145451366

4.4、类型别名(typeAliases)

  • 类型别名是为Java类型设置一个短的名字。
  • 存在的意义仅在于用来减少类完全限定名的冗余。

image-20220314150236035

image-20220314150522041

<!--可以给实体类起别名-->
<typeAliases>
    <typeAlias type="com.blue.pojo.User" alias="User"/>
</typeAliases>

4.5、设置

这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。

image-20220314160252169

image-20220314160542359

4.6、其他配置

mybati-Plus

image-20220314164709271

image-20220314164824050

4.7、映射器(mappers)

MapperRegistry:注册绑定我们的Mapper文件;

方式一:

 <mappers>
<!--        <mapper resource="com/blue/dao/UserMapper.xml"/>-->
        <mapper class="com.blue.dao.UserMapper"/>
    </mappers>

方式二:使用class文件绑定

 <mappers>
        <mapper resource="com/blue/dao/UserMapper.xml"/>-->
    </mappers>

image-20220314165431279

方式三:使用扫描包进行注入绑定

image-20220314165238195

image-20220314165431279

注意点:

  • 接口和他的Mapper配置文件必须同名!
  • 接口和他的Mapperi配置文件必须在同一个包下!

练习时间:(重点)

  • 将数据库配置文件外部引入
  • 实体类别名
  • 保证JserMapper接口和UserMapper.Xml改为一致!并且放在同一个包下!

4.8、生命周期和作用域

image-20220314202318028

生命周期是至关重要的,因为错误的使用会导致非常严重的并发问题

SqlSessionFactoryBuilder:

  • 但创建了SqlSessionFactory,就不再需要它了
  • 局部变量

image-20220314202820285

SqlSessionFactory:

  • 说白了就是可以想象为:数据库连接池
  • SqlSessionFactory一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。
  • 因此SqlSessionFactory的最佳作用域是应用作用域。
  • 最简单的就是使用单例模式或者静态单例模式。

SqlSession:

  • 连接到连接池的一个请求!
  • SqlSession的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。
  • 用完之后需要赶紧关闭,否则资源被占用!

image-20220314203127577

image-20220314203307609

这里面的每一个Mapper,就代表一个具体的业务!

5、解决属性名和字段名不一致的问题

5.1、问题

数据库中的字段

新建一个项目,拷贝之前的,测试实体类字段不一致的情况

image-20220314203805934

实体类User修改如下

public class User {
    private int id;
    private String name;
    private String password;
}

image-20220314210032846

image-20220314210100374

image-20220314210204645

输出结果:

image-20220314210244944

//  select from mybatis.user where id #{id}
//类型处理器
//  select id,name,pwd from mybatis.user where id =#{id}

解决方法:-

  • 起别名
<select id="getUserById" parameterType="int" resultType="com.blue.pojo.User">
    select id,name,pwd from mybatis.user where id =#{id}
</select>

5.2、resultMap 结果集映射

结果集映射

id	name	pwd
id	name	password

image-20220314214353761

<resultMap id="UserMap" type="User">
    <result column="id" property="id"/>
    <result column="name" property="name"/>
    <result column="pwd" property="password"/>

</resultMap>

<select id="getUserById" parameterType="int" resultMap="UserMap">
    select * from mybatis.user where id =#{id}
</select>
  • resultMap元素是MyBatis中最重要最强大的元素
  • ResultMap的设计思想是,对于简单的语句根本不需要配置显式的结果映射,而对于复杂一点的语句只需要描述它们的关系就行了。
  • Resu1tMap最优秀的地方在于,虽然你已经对它相当了解了,但是根本就不需要显式地用到他们。
  • 如果世界总是这么简单就好了。

image-20220315090042828

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JYj1Kyab-1647332164411)(C:\Users\dlmu\AppData\Roaming\Typora\typora-user-images\image-20220315090559917.png)]

接下来讲

image-20220315085504808

image-20220315090931943

6、日志

6.1、日志工厂

如果一个数据库操作,出现了异常,我们需要排错。日志就是最好的助手!

曾经:sout、debug

现在:日志工厂!

image-20220315093105129

image-20220315093130062

  • SLF4J |
  • LOG4J【掌握】
  • LOG4J2 |
  • JDK_LOGGING |
  • COMMONS_LOGGING |
  • STDOUT_LOGGING | 【掌握】
  • NO_LOGGING

在Mybatis中具体使用那个一日志实现,在设置中设定!

STDOUT LOGGING标准日志输出

在mybatis核心配置文件中,配置我们的日志!

在这个文件中配置日志输出

image-20220315093518492

<settings>
    <setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>

image-20220315093758121

日志如下

image-20220315094204966

6.2、Log4j

什么是Log4j?

  • Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件
  • 我们也可以控制每一条日志的输出格式:
  • 通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。
  • 通过一个配置文住来灵活地进行配置,而不需要修改应用的代码。

1、先导入1og4j的包

<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

image-20220315095518663

导入log4j步骤

  1. Maven Repository: log4j ? log4j (mvnrepository.com)

  2. image-20220315100301117

  3. image-20220315100423255

<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

image-20220315100849937

2、log4j.properties

配置文件

Log4j框架配置文件log4j.properties配置使用详解_CycloneKid的博客-CSDN博客_log4j配置文件详解

#将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码
log4j.rootLogger=DEBUG,console,file

#控制台输出的相关设置
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%c]-%m%n

# 文件输出的相关设置
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File=./log/kuang.log
log4j.appender.file.MaxFileSize=10mb
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n

# 日志输出级别
log4j.logger.org.mybatis=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

3、配置log4j为日志的实现

<settings>
        <setting name="logImpl" value="LOG4J"/>
</settings>

4、Log4j的使用!直接测试运行刚才的查询

image-20220315153854481

简单使用

  1. 在要使用Log4j的类中,导入包import org.apache.log4j.Log8er;
  2. 日志对象,参数为当前类的class
static Logger logger Logger.getLogger(UserDaoTest.class);
  1. 日志级别
logger.info("info:进入了testLog4j");
logger.debug("debug:进入了testLog4j");
logger.error("error:进入了testLog4j");

测试:

image-20220315160312869

package com.blue.dao;

import com.blue.pojo.User;
import com.blue.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.Test;

import java.util.List;

public class UserDaoText {

    Logger logger = Logger.getLogger(UserDaoText.class);

    @Test
    public void textLog4j(){
       logger.info("info:进入了testLog4j");
       logger.debug("debug:进入了testLog4j");
       logger.error("error:进入了testLog4j");
    }

}

输出:

image-20220315160337881

运行后输出:log文件

image-20220315160402296

[INFO][22-03-15][com.blue.dao.UserDaoText]info:进入了testLog4j
[DEBUG][22-03-15][com.blue.dao.UserDaoText]debug:进入了testLog4j
[ERROR][22-03-15][com.blue.dao.UserDaoText]error:进入了testLog4j
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-15 22:18:55  更:2022-03-15 22:18:58 
 
开发: 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年11日历 -2024/11/24 9:59:59-

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