分页功能存在在我们网页的方方面面,例如b站的这个评论
这个就是一个很典型的分类,如果你细心一点还会发现每一页的评论数都是10条。
这个就是分页查询的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配置文件
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.5.5version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>8.0.25version>
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>
再写一下映射文件
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的官方网站
性能较log4j更好
是基于slf4j开发的
其分为三个技术模块
logback-core:为其他两个模块奠定了基础
logback-classic:log4j的一个改良版本,同时完整的实现了slf4j的API
logback-access:于Tomcat和Jetty容器集成,提供HTTP访问日志的功能
<dependencies>
<dependency>
<groupId>org.slf4jgroupId>
<artifactId>jcl-over-slf4jartifactId>
<version>1.7.26version>
dependency>
<dependency>
<groupId>ch.qos.logbackgroupId>
<artifactId>logback-classicartifactId>
<version>1.2.3version>
dependency>
<dependency>
<groupId>ch.qos.logbackgroupId>
<artifactId>logback-coreartifactId>
<version>1.2.3version>
dependency>
dependencies>
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<target>System.outtarget>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %c [%thread] : %msg%npattern>
encoder>
appender>
<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%npattern>
<charset>utf-8charset>
encoder>
<file>D:/logback/Demo01/data.logfile>
<rollingPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>D:/logback/Demo01/data2-%d{yyyy-MM-dd}.log%i.gzfileNamePattern>
<maxFileSize>1MBmaxFileSize>
rollingPolicy>
appender>
<root level="ALL">
<appender-ref ref = "CONSOLE"/>
<appender-ref ref="FILE"/>
root>
configuration>