分页&日志

分页

分页功能存在在我们网页的方方面面,例如b站的这个评论
在这里插入图片描述
这个就是一个很典型的分类,如果你细心一点还会发现每一页的评论数都是10条。

那么想这样的分页要如何实现呢

很简单,写一个分页查询的sql查询语句就可以了

这个就是分页查询的sql语句了

select * from tb_user limit #{begin} , #{size}

begin代表的是从哪里开始查,默认的初始下标为0,所以begin的值应为我们要开始查询的记录的位序加一,size者代表要查询出几条结果

下面我们到IDEA中实践一下

先建立一个user的表,多创建一点数据,方便查看分页效果

-- 删除user表
drop table if exists user;
-- 创建user表
create table user
(
    -- id 主键
    id           int primary key auto_increment,
    
    user_name   varchar(20),
    
    password    varchar(20),
		
    age      int
);
-- 添加数据
insert into user (user_name , password , age)
values 
       ('小明', '123456', 100),
			 ('小红', '123456', 50),
			 ('李华', '123456', 500),
			 ('张三', '123456', 110),
			 ('田所浩二', '114514', 1919810),
			 ('只因', '12138', 2),
			 ('小明', '123456', 100),
			 ('小红', '123456', 50),
			 ('李华', '123456', 500),
			 ('张三', '123456', 110),
			 ('田所浩二', '114514', 1919810),
			 ('只因', '12138', 2),
			 ('小明', '123456', 100),
			 ('小红', '123456', 50),
			 ('李华', '123456', 500),
			 ('张三', '123456', 110),
			 ('田所浩二', '114514', 1919810),
			 ('只因', '12138', 2),
			 ('小明', '123456', 100),
			 ('小红', '123456', 50),
			 ('李华', '123456', 500),
			 ('张三', '123456', 110),
			 ('田所浩二', '114514', 1919810),
			 ('只因', '12138', 2),
			 ('小明', '123456', 100),
			 ('小红', '123456', 50),
			 ('李华', '123456', 500),
			 ('张三', '123456', 110),
			 ('田所浩二', '114514', 1919810),
			 ('只因', '12138', 2),
			 ('小明', '123456', 100),
			 ('小红', '123456', 50),
			 ('李华', '123456', 500),
			 ('张三', '123456', 110),
			 ('田所浩二', '114514', 1919810),
			 ('只因', '12138', 2)
        ;
   
SELECT * FROM user;

之后我们导入一下要导入的maven依赖和XML配置文件

 <!--mybatis 依赖-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.5</version>
    </dependency>

    <!--mysql 驱动-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.25</version>
    </dependency>
<?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>

    <typeAliases>
        <package name="com.pojo"/>
    </typeAliases>


    <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:///mybatis?useSLL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--加载sql的映射文件-->
        <package name="com.mapper"/>
    </mappers>
</configuration>

再写一下映射文件

<?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.mapper.UserMapper">
    <resultMap id="userMapper" type="com.pojo.User">
        <result column="user_name" property="userName"></result>
    </resultMap>
</mapper>

在导入一个数据库连接的工具类

public class SqlSessionFactoryUtils {

    private static SqlSessionFactory sqlSessionFactory;

    static {
        //静态代码块会随着类的加载而自动执行,且只执行一次
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    public static SqlSessionFactory getSqlSessionFactory(){
        return sqlSessionFactory;
    }
}

下面是查询语句,我比较懒啊,这里就直接用一个注解开发,主要也是这个sql语句比较的简单

    @Select("select * from user limit #{page},#{size}")
    @ResultMap("UserMapper")
    List<User> selectByPage(@Param("page")int page,@Param("size")int size);

日志

可以将系统执行的信息选择性的记录到指定位置,例如控制台,文件,数据库等
可以随时开关是否记录日志,无需修改源代码

日志的规范

一般时一些接口
常见的有JCL和slf4j

日志的框架

类似于接口的实现类
常见的有Log4J,Logback

Logback简介

Logback的官方网站
性能较log4j更好
是基于slf4j开发的

其分为三个技术模块
logback-core:为其他两个模块奠定了基础
logback-classic:log4j的一个改良版本,同时完整的实现了slf4j的API
logback-access:于Tomcat和Jetty容器集成,提供HTTP访问日志的功能

Logback所需的环境配置

maven依赖导入

<dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>1.7.26</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
        </dependency>
    </dependencies>

导入XML文件以及XML文件的配置信息详解

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--
        CONSOLE :表示当前的日志信息是可以输出到控制台的。
    -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--输出流对象 默认 System.out 改为 System.err则日志输出为红色-->
        <target>System.out</target>
        <encoder>
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度
                %msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level]  %c [%thread] : %msg%n</pattern>
        </encoder>
    </appender>

    <!-- File是输出的方向通向文件的 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!--日志输出路径-->
        <file>D:/logback/Demo01/data.log</file>
        <!--指定日志文件拆分和压缩规则-->
        <rollingPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--通过指定压缩文件名称,来确定分割文件方式-->
            <fileNamePattern>D:/logback/Demo01/data2-%d{yyyy-MM-dd}.log%i.gz</fileNamePattern>
            <!--文件拆分大小,超过1MB的文件会被拆分并压缩-->
            <maxFileSize>1MB</maxFileSize>
        </rollingPolicy>
    </appender>

    <!--
    level:用来设置打印级别,大小写无关:TRACE< DEBUG< INFO< WARN< ERROR    |    ALL 和 OFF, 默认debug
    <root>可以包含零个或多个<appender-ref>元素,标识这个输出位置将会被本日志级别控制。
    -->
    <root level="ALL">
        <!-- 注意:如果这里不配置关联打印位置,该位置将不会记录日志-->
        <appender-ref ref = "CONSOLE"/>
        <appender-ref ref="FILE"/>
    </root>
</configuration>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

风过于前

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

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

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

打赏作者

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

抵扣说明:

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

余额充值