分页
分页功能存在在我们网页的方方面面,例如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>