Mybatis【结果集映射、日志、分页】

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Mybatis【结果集映射、日志、分页】

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

解决办法:

  • 1、起别名
select * from mybatis.user where id = #{id}
select id,name,pwd from mybatis.user where id = #{id}
select id,name,pwd as password from mybatis.user where id = #{id}
  • 2、ResultMap 结果集映射
数据库字段:    id    name    pwd
实体类属性:    id    name    password

给 select 标签设置 resultMap 属性值,对应resultType 标签的id 。

标签 resultType 的 type 值为接口方法的返回值类型 User 类。

<!--  结果集映射  -->
    <resultMap id="UserMap" type="User">
        <!--    column:数据库中的字段 property:实体类中的属性    -->
        <result column="pwd" property="password"></result>
    </resultMap>
    <select id="getUserById" resultType="User" resultMap="UserMap">
        select * from mybatis.user where id = #{id}
    </select>
  • resultMap 元素是 MyBatis 中最重要最强大的元素。它可以让你从 90% 的 JDBC ResultSets 数据提取代码中解放出来,并在一些情形下允许你进行一些 JDBC 不支持的操作。

报错问题:

xxx is not known to the MapperRegistry.

1. 查看mapper.xml的namespace是不是对应的DAO全路径。(每次都是namespace 前面多一个com)

2:查看是不是这个mapper没有添加到mybatis-config.xml文件中。

3:低级错误,数据库中没有对应的表(我们分,开发,测试,线上库)

2、日志工厂

Mybatis给我们提供了很多日志功能,可以在 mybatis-config.xml 中设置setting 标签来实现。

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

Log4j

在mybatis-config.xml 中配置

    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>
  • Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;
  • 我们也可以控制每一条日志的输出格式;
  • 通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。
  • 最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

log4j.properties

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/logFile.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

运行后生成日志文件  

log4j的使用

实际开发中,我们在导入log4j 的包并配置好 log4j.properties 后,直接在我们需要输出日志信息的地方 通过 Logger对象调用不同级别的方法即可。

import org.apache.log4j.Logger;
import org.junit.Test;
public class TestLog4j {
    static Logger logger = Logger.getLogger(TestLog4j.class);
    @Test
    public void testLog(){
        //不同的日志级别
        logger.info("info: 进入了 testLog 方法");
        logger.debug("debug: 进入了 testLog 方法");
        logger.error("error: 进入了 testLog 方法");
    }
}

3、分页

  • 减少数据的处理量,加载更快

3.1、Limit 分页

语法

select * from user limit startIndex,pageSize;
# 从0行开始查 每页显示2行
select * from user limit 0,2;
# 从0行开始查 每页显示2行
select * from user limit 2;

使用Mybatis实现分页

1、接口

    //分页查询
    List<User> getUserByLimit(Map<String,Integer> map);

2、Mapper.xml

    <select id="getUserByLimit" parameterType="map" resultType="User">
        select * from mybatis.user limit #{startIndex},#{pageSize}
    </select>

3、测试

 @Test
    public void getUserByLimit(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //通过接口获取 mapper
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        Map<String,Integer> map = new HashMap<>();
        map.put("startIndex",0);
        map.put("pageSize",2);
        List<User> list =  mapper.getUserByLimit(map);
        for(User user: list)
            System.out.println(user);
        sqlSession.close();
    }

3.2、RowBounds 分页

1、接口

    //分页2 - 不推荐使用 了解
    List<User> getUserByRowBounds();

2、Mapper.xml

    <select id="getUserByRowBounds" resultType="User">
        select * from mybatis.user
    </select>

3、测试

    @Test
    public void getUserByRowBounds(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        RowBounds rowBounds = new RowBounds(1,2);
//        查询所有用户
//        List<User> list = sqlSession.selectList("com.study.dao.UserMapper.getUserByRowBounds");
        //使用 RowBounds实现
        List<User> list = sqlSession.selectList("com.study.dao.UserMapper.getUserByRowBounds",null,rowBounds);
        for (User user : list) {
            System.out.println(user);
        }
        sqlSession.close();
    }

3.3、分页插件

Mybatis 分页插件 PageHelper



相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
6月前
|
SQL XML Java
8、Mybatis-Plus 分页插件、自定义分页
这篇文章介绍了Mybatis-Plus的分页功能,包括如何配置分页插件、使用Mybatis-Plus提供的Page对象进行分页查询,以及如何在XML中自定义分页SQL。文章通过具体的代码示例和测试结果,展示了分页插件的使用和自定义分页的方法。
8、Mybatis-Plus 分页插件、自定义分页
|
3月前
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
|
3月前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
4月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
133 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
5月前
|
SQL XML Java
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
文章介绍了MyBatis中高级查询的一对多和多对一映射处理,包括创建数据库表、抽象对应的实体类、使用resultMap中的association和collection标签进行映射处理,以及如何实现级联查询和分步查询。此外,还补充了延迟加载的设置和用法。
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
|
5月前
|
SQL Java 数据库连接
解决mybatis-plus 拦截器不生效--分页插件不生效
本文介绍了在使用 Mybatis-Plus 进行分页查询时遇到的问题及解决方法。依赖包包括 `mybatis-plus-boot-starter`、`mybatis-plus-extension` 等,并给出了正确的分页配置和代码示例。当分页功能失效时,需将 Mybatis-Plus 版本改为 3.5.5 并正确配置拦截器。
1510 6
解决mybatis-plus 拦截器不生效--分页插件不生效
|
5月前
|
SQL XML Java
springboot整合mybatis-plus及mybatis-plus分页插件的使用
这篇文章介绍了如何在Spring Boot项目中整合MyBatis-Plus及其分页插件,包括依赖引入、配置文件编写、SQL表创建、Mapper层、Service层、Controller层的创建,以及分页插件的使用和数据展示HTML页面的编写。
springboot整合mybatis-plus及mybatis-plus分页插件的使用
|
6月前
|
SQL Java 关系型数据库
SpringBoot 系列之 MyBatis输出SQL日志
这篇文章介绍了如何在SpringBoot项目中通过MyBatis配置输出SQL日志,具体方法是在`application.yml`或`application.properties`中设置MyBatis的日志实现为`org.apache.ibatis.logging.stdout.StdOutImpl`来直接在控制台打印SQL日志。
SpringBoot 系列之 MyBatis输出SQL日志
|
6月前
|
Java 数据库连接 数据库
后端框架的学习----mybatis框架(6、日志)
这篇文章介绍了如何在MyBatis框架中使用日志功能,包括配置MyBatis的日志实现、使用log4j作为日志工具,以及如何通过配置文件控制日志级别和输出格式。
|
6月前
|
Java 数据库 Spring
MyBatisPlus分页插件在SpringBoot中的使用
这篇文章介绍了如何在Spring Boot项目中配置和使用MyBatis-Plus的分页插件,包括创建配置类以注册分页拦截器,编写测试类来演示如何进行分页查询,并展示了测试结果和数据库表结构。
MyBatisPlus分页插件在SpringBoot中的使用