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

简介: 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日志并进行多维度分析。
相关文章
|
5天前
|
Java 数据库连接 Maven
使用mybatis插件generator生成实体类,dao层和mapper映射
使用mybatis插件generator生成实体类,dao层和mapper映射
18 0
|
26天前
|
SQL Java 数据库连接
MyBatis映射文件深入
MyBatis映射文件深入
51 0
|
1月前
|
SQL Java 数据库连接
Mybatis之Mybatis简介、搭建Mybatis相关步骤(开发环境、maven、核心配置文件、mapper接口、映射文件、junit测试、log4j日志)
【1月更文挑战第2天】 MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下,iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBatis提供的持久层框架包括SQL Maps和Data Access Objects(DAO)
143 3
Mybatis之Mybatis简介、搭建Mybatis相关步骤(开发环境、maven、核心配置文件、mapper接口、映射文件、junit测试、log4j日志)
|
5天前
|
XML 监控 druid
【Java专题_02】springboot+mybatis+pagehelper分页插件+druid数据源详细教程
【Java专题_02】springboot+mybatis+pagehelper分页插件+druid数据源详细教程
28 0
|
8天前
|
SQL Java 数据库连接
MyBatis 的 3 种分页方式
MyBatis 的 3 种分页方式
79 1
MyBatis 的 3 种分页方式
|
24天前
|
SQL Java 关系型数据库
|
24天前
|
Java 数据库连接 mybatis
|
1月前
|
SQL Oracle 关系型数据库
mybatis-3.分页
mybatis-3.分页
mybatis-2.映射关系(1-1 1-n n-n)
mybatis-2.映射关系(1-1 1-n n-n)
|
1月前
|
SQL Java 数据库连接
myabtis中为什么说 MyBatis 是半自动 ORM 映射工具?它与全自动的区别在哪里
myabtis中为什么说 MyBatis 是半自动 ORM 映射工具?它与全自动的区别在哪里

相关产品

  • 云迁移中心