日志
日志工厂
如果一个数据库操作,出现了异常,我们需要排错,日志就是最好的助手!
参考官方文档
在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实现分页!