MyBatis入门学习(四)

日志

日志工厂

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

参考官方文档

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

STDOUT_LOGGING标准日志输出

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

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

Log4J

我们用的更多的日志为log4j;

使用log4j步骤:

1、导入包依赖

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

如果要手动导入的话需要导入两个jar包(idea会自动导入另一个)

2、编写log4j的配置文件

### 设置###
log4j.rootLogger = debug,stdout,D,E

### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

### 输出DEBUG 级别以上的日志到=E://logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = ./log/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 输出ERROR 级别以上的日志到=E://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =./log/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout

3、修改日志实现为LOG4J,注意大小写问题

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

4、假设我们要使用LOG4J的类取打印日志

import com.star.mapper.RMapper;
import com.star.pojo.User;
import com.star.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;

public class MyTest {

    static Logger logger = Logger.getLogger(MyTest.class);

    public static void main(String[] args) {
        SqlSession session = MybatisUtils.getSession();
        RMapper mapper = session.getMapper(RMapper.class);

        System.out.println("2345675432");

        //通过log4j 可以将日志实现细粒度的控制;
        logger.debug("2345675432");
        logger.info("2345675432");//提示信息
        logger.error("2345675432");//错误信息

        //属性名和字段名不一致
        User user = mapper.selectById(2);
        System.out.println(user);
    }
}

测试结果:

分页

分页可以提高服务器性能,按照一小部分一小部分的来处理我们的数据!

1、使用Limit分页

limit语法

    -- startIndex:起始数据的索引(从0开始)     pageSize:页面大小
    Select * from user limit startIndex,PageSize

接口中的方法

    //参数如果超过两个,可以使用map来进行传递 key value
    List<User> selectUserByLimit(Map<String,Integer> map);

配置文件

    <select id="selectUserByLimit" parameterType="map" resultType="user">
        select * from user limit #{startIndex},#{pageSize};
    </select>

测试类

package com.star.mapper;

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

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class UserMapperTest {

    @Test
    public void selectUserByLimitTest(){
        SqlSession session = MybatisUtils.getSession();
        UserMapper mapper = session.getMapper(UserMapper.class);

        Map<String, Integer> map = new HashMap<String, Integer>();

        //分页  起始数据的索引(从0开始)     页面大小
        map.put("startIndex",1);
        map.put("pageSize",3);

        List<User> users = mapper.selectUserByLimit(map);
        for (User user : users) {
            System.out.println(user);
        }
    }
}

测试结果:

2、RowBounds分页

接口中的方法

    List<User> selectUserByLimit();

配置文件

    <select id="selectUserByLimit" parameterType="map" resultType="user">
        select * from user;
    </select>

测试类

package com.star.mapper;

import com.star.pojo.User;
import com.star.utils.MybatisUtils;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSession;
import java.util.List;

public class UserMapperTest {
    
    public static void main(String[] args) {
        SqlSession session = MybatisUtils.getSession();

        RowBounds rowBounds = new RowBounds(1, 3);

        // selectList(方法的路径)
        // 通过Java操作查询
        List<User> list = session.selectList("com.star.mapper.UserMapper.selectUserByLimit", null, rowBounds);
        for (User user : list) {
            System.out.println(user);
        }
    }
}

测试结果:

我们可以通过 selectXXX 执行具体的某一个方法,得到结果,在这种方式下,可以通过Java实现分页!

原文地址:https://www.cnblogs.com/lmx-181028/p/12358893.html