Mybatis的一些扩展操作

Mybatis的一些扩展操作

1.日志

入门的时候我们看过config中有settings的设置。其中就有日志有关的设置。

在这里插入图片描述

我们可以通过设置这些日志来查看我们程序的详细运行流程

<settings>
	<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>

1.1日志工厂

第三个字段就是描述的都有那些日志工厂:

  • SLF4J
  • LOG4J
  • LOG4J2
  • JDK_LOGGING
  • COMMONS_LOGGING
  • STDOUT_LOGGING (常用)
  • NO_LOGGING

用上面的那个设置来输出一下日志:在这里插入图片描述
这样能够帮助我们更容易的分析出问题.
这里样例为常用的查询所有。

1.2 Log4j

Log4j也是一个常用的日志项目。

  • 可以控制日志信息输送的目的是控制台,文件,GUI组件等。
  • 我们可以控制每一条日志的输出格式。
  • 可以定义每一条日志信息的级别。
  • 可以通过配置文件来进行配置而不需要修改其代码。

百度一下就有其详细的使用步骤:

  1. 导入jar包

    <dependencies>
    	<dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>
    </dependencies>
    
  2. 在资源目录下创建一个log4j.properties文件

  3. 设置对应的属性

    百度上有现成的,抄一份过来:我也忘记了从哪找的,应该就是百度百科了.

    #将等级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
    
  4. 在输出日志的类中加入相关语句:

    static Logger logger = Logger.getLogger(LogDemo.class); //定义属性:LogDemo为相关的类
    //在相应的方法中:
    if (logger.isDebugEnabled()){
    logger.debug(“System …..);
    }
    
  5. 输出查看:直接运行就好了:
    在这里插入图片描述

2.分页

减少单位时间的数据的处理量,来更好的优化性能。

2.1 Limit分页

语法:

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>
<!--
输出:
User{id=1,name='a',password='1'}
User{id=2,name='b',password='2'}
-->

动态分页的话,传入对应的值就好了。

  1. 新增一个接口:
//分页查询
List<User> getUserListByLimit(Map<String,Integer> map);
  1. 配置对应的mapper:
<!--分页查询-->
<select id="getUserListByLimit" parameterType="map" 		resultMap="userMap">
	select * from user limit #{startIndex},#{pageSize};
</select>
  1. 在测试类中调用:
@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分页

2.2 RowBounds分页

通过使用方法RowBounds来实现代码层面的分页。

  1. 新增查询接口:

    //分页查询
    List<User> getUserListByRowBounds();
    
  2. 修改mapper文件:

    <!--分页查询-->
    <select id="getUserListByRowBounds" resultMap="userMap">
        select * from user ;
    </select>
    
  3. 测试类中调用:

    @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'}
    

这个RowBounds方法非常简单:在这里插入图片描述

主要是sqlSession中有一个重载的方法,可以调用这个类。

不过据说这样操作效率更低。

2.3 更多的分页方式–插件

插件很多,比较出名的比如:PageHelper:https://pagehelper.github.io/

在这里插入图片描述

3.Lombok插件

3.1 Lombok插件概述

查看一下官网: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等方法了。

3.2 Lombok使用

  1. IDEA安装插件setting->Plugins->Lombok

  2. 导入maven的jar包。

    <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.10</version>
        <scope>provided</scope>
    </dependency>
    
    
  3. 使用。

    看一下官方的解释:在这里插入图片描述

    看到这么多的注解,其实常用的也就圈出来的几个。

    • Data:生成无参构造,get和set,tostring。
    • Constructor的有参无参构造。
    • 上面的就是我们常用的,getset,tostring的具体了。

3.3测试

在一个实体类中,使用以上注解:在这里插入图片描述

这里只使用一个Data注解,可以看到结果还是很省事的。看一下注解的定义:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.SOURCE)
public @interface Data{
    String staticConstructor() default "";
}

可以用在类上,也可以用在变量上。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值