入门的时候我们看过config中有settings的设置。其中就有日志有关的设置。
我们可以通过设置这些日志来查看我们程序的详细运行流程
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
settings>
第三个字段就是描述的都有那些日志工厂:
用上面的那个设置来输出一下日志:
这样能够帮助我们更容易的分析出问题.
这里样例为常用的查询所有。
Log4j也是一个常用的日志项目。
百度一下就有其详细的使用步骤:
导入jar包
<dependencies>
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>1.2.12version>
dependency>
dependencies>
在资源目录下创建一个log4j.properties文件
设置对应的属性
百度上有现成的,抄一份过来:我也忘记了从哪找的,应该就是百度百科了.
#将等级DEBUG的日志输出到console目的地,console的定义在下面
log4j.rootLogger=DEBUG,console
#控制台输出的相关设置
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.Threshold = DEBUG
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = [%c]-%m%n
#日志输出级别
log4j.appender.org.mybatis=DEBUG
log4j.appender.java.sql=DEBUG
log4j.appender.java.sql.Statement=DEBUG
log4j.appender.java.sql.ResultSet=DEBUG
log4j.appender.java.sql.PrepareStatement=DEBUG
在输出日志的类中加入相关语句:
static Logger logger = Logger.getLogger(LogDemo.class); //定义属性:LogDemo为相关的类
//在相应的方法中:
if (logger.isDebugEnabled()){
logger.debug(“System …..”);
}
减少单位时间的数据的处理量,来更好的优化性能。
语法:
select * from user limit startIndex,pageSize;
这样可以在sql层面上实现分页:
原数据:
User{id=1,name='a',password='1'}
User{id=2,name='b',password='2'}
User{id=3,name='c',password='3'}
User{id=5,name='aa',password='null'}
使用0,2分页:
<select id="getUserList" resultMap="userMap">
select * from user limit 0,2;
select>
动态分页的话,传入对应的值就好了。
//分页查询
List<User> getUserListByLimit(Map<String,Integer> map);
<select id="getUserListByLimit" parameterType="map" resultMap="userMap">
select * from user limit #{startIndex},#{pageSize};
select>
@Test
public void testAllLimit(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
Map<String,Integer> map = new HashMap<String, Integer>();
map.put("startIndex",1);
map.put("pageSize",2);
List<User> userList = userMapper.getUserListByLimit(map);
for(User user:userList){
System.out.println(user);
}
sqlSession.close();
}
运行结果:
User{id=2,name='b',password='2'}
User{id=3,name='c',password='3'}
以上的办法本质上还是修改sql来实现分页。在Java中,有着一个类来专门实现分页,那就是RowBounds分页
通过使用方法RowBounds来实现代码层面的分页。
新增查询接口:
//分页查询
List<User> getUserListByRowBounds();
修改mapper文件:
<select id="getUserListByRowBounds" resultMap="userMap">
select * from user ;
select>
测试类中调用:
@Test
public void testAllRowBounds(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
RowBounds rowBounds = new RowBounds(1,2);
List<User> userList = sqlSession.selectList("com.admin.dao.UserMapper.getUserListByRowBounds",null,rowBounds);
for(User user: userList){
System.out.println(user);
}
sqlSession.close();
}
看一下输出结果:
User{id=2,name='b',password='2'}
User{id=3,name='c',password='3'}
主要是sqlSession中有一个重载的方法,可以调用这个类。
不过据说这样操作效率更低。
插件很多,比较出名的比如:PageHelper:https://pagehelper.github.io/
查看一下官网:https://projectlombok.org/
官网介绍:
Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java.
Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more.
大概意思就是lombok是一个java库,是一个插件,可以让我们不用再写get,set等方法了。
IDEA安装插件setting->Plugins->Lombok
导入maven的jar包。
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<version>1.18.10version>
<scope>providedscope>
dependency>
使用。
看到这么多的注解,其实常用的也就圈出来的几个。
这里只使用一个Data注解,可以看到结果还是很省事的。看一下注解的定义:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.SOURCE)
public @interface Data{
String staticConstructor() default "";
}
可以用在类上,也可以用在变量上。