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

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

d33dbb47923641cdb3e6231a514d0b1a.png

 解决办法:

  • 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 标签来实现。

4ebf5c9c5ec54aa6a36e1c19281ff8be.png

 

<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

运行后生成日志文件  

2a311d06f58d4f068c9346cc09625bd4.png

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

9d4bd9b214194db08314a39569e67f9e.png

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

让线程再跑一会

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

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

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

打赏作者

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

抵扣说明:

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

余额充值