热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

mybatis打印SQL,并显示参数的实例

这篇文章主要介绍了mybatis打印SQL,并显示参数的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

在maven的pom.xml里面添加一下依赖:


UTF-8
3.2.4.RELEASE
1.7.6
1.1.2

 
  org.lazyluke
  log4jdbc-remix
  0.2.7
 
 
  org.slf4j
  slf4j-api
  ${version.slf4j}
 
 
  ch.qos.logback
  logback-classic
  ${version.logback}
 
 
  ch.qos.logback
  logback-access
            ${version.logback}
 
 
  org.logback-extensions
  logback-ext-spring
  0.1.2
 


org.slf4j
jul-to-slf4j
${version.slf4j}
/dependency>
 
 


org.slf4j
jcl-over-slf4j
${version.slf4j}

然后在数据源的配置文件添加以下配置:


 
 (此处数据源用来代理原有的数据源,注入sessionfactory的时候用此处的dataSource)

 
 (此处数据源用来代理原有的数据源,注入sessionfactory的时候用此处的dataSource)

最后添加一个配置的logback.xml文件:

<&#63;xml version="1.0" encoding="UTF-8"&#63;>






${tomcatName}${catalina.home}



DEBUG




[%-5level] %d{MM-dd HH:mm:ss} %method - %m%n













补充知识:使用mybatis-plus遇到的一些问题,以及一些简单的使用技巧

运行提示Invalid bound statement (not found)

原因一:

实体类的的id没有指定@TableId,

不管是主启动还是yml文件中的扫描mapper.xml的配置,还是dao接口,全部都没有错但就是运行报Invalid bound statement (not found)。

原因:

如果是使用mybatis-plus在涉及到主键id的查询的时候,如果实体类的属性字段不是叫做id,则需要使用@TableId指定实体类的id,就算是使用@TableField指定都没有用,必须要使用@TableId指定。

原因二:

yml文件中配置的mapper.xml配置不正确。

例如:

mybatis-plus:
 mapper-locations: classpath*:/mapping/**/*.xml
 //当表中的字段名有下划线,则需要开启这个配置,将下划线转成驼峰命名法
 configuration:
  map-underscore-to-camel-case: true

原因三

主配置文件中未配置@MapperScan注解扫描mapper接口。

当查询返回的字段特别多时,而使用的字段又只有一两个。

可以使用 entityWrapper.setSqlSelect()方法指定查询那些列。

当order by和limit一起使用的时候,如果使用wrapper,他会先分页后排序

解决方式:

可以将page引入进来,结合一起使用。

selectById方法问题

mybatis-plus默认是根据主键去查询的,如果是非主键的查询,使用该方法不能达到预期的效果。

wrapper构造器的in方法的问题

如果使用wrapper.in(id,list),当list集合的元素size为0时,这个in的id操作会直接去掉。

多个模糊查询条件为and并列问题

在使用wrapper的时候有多个条件并列的时候,它是使用or来连接这些条件的。

例如:

wrapper.eq("id","123").eq("name","zs")

sql语句会变成id=“123” and name="zs"

解决方式:

wrapper.eq("id","123").eq("name","zs")

sql语句会变成id=“123” and name="zs"

mybatis和mybatis-plus的配置扫描的方式有些不同

如果使用mybatis-plus的依赖,不能使用mybatis的方式配置,否则会一直有问题,可能会报invalid not bind statement

mybatis提示java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String

在mapper.xml文件中使用了这种判断 date != null and date != ‘',把date!=''删除就可以了。

使用Map作为返回值,查询出来的记录属性字段转成大写,或者转成小写问题

解决方式:将mapper.xml中的sql语句的sql列名使用双引号包裹。

例如:

select name as "userName" from user

查询出来的记录字段名是驼峰命名法,但是传回前端却全部变成了小写

在使用mybatis和lombok的时候,遇到一个特别奇怪的问题。实体类是驼峰命名,查出来的属性名也是驼峰命名,属性值什么的也注入到了实体了,但是传回前端就变成小写了。

原因:

在java bean的规范中实体类的属性名前两位必须要小写或者大写。

例如

private String cName;

传递到前端就会变成cname

这个问题确实挺坑的,又因为用的是@Data的注解修饰的实体类。

解决方式:

1、使用@JsonProperty注解修饰该字段

2、手动添加get、set方法。

3、换一个属性名。

以上这篇mybatis打印SQL,并显示参数的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


推荐阅读
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • Linux下部署Symfoy2对app/cache和app/logs目录的权限设置,symfoy2logs
    php教程|php手册xml文件php教程-php手册Linux下部署Symfoy2对appcache和applogs目录的权限设置,symfoy2logs黑色记事本源码,vsco ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 延迟注入工具(python)的SQL脚本
    本文介绍了一个延迟注入工具(python)的SQL脚本,包括使用urllib2、time、socket、threading、requests等模块实现延迟注入的方法。该工具可以通过构造特定的URL来进行注入测试,并通过延迟时间来判断注入是否成功。 ... [详细]
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
  • 本文介绍了一个免费的asp.net控件,该控件具备数据显示、录入、更新、删除等功能。它比datagrid更易用、更实用,同时具备多种功能,例如属性设置、数据排序、字段类型格式化显示、密码字段支持、图像字段上传和生成缩略图等。此外,它还提供了数据验证、日期选择器、数字选择器等功能,以及防止注入攻击、非本页提交和自动分页技术等安全性和性能优化功能。最后,该控件还支持字段值合计和数据导出功能。总之,该控件功能强大且免费,适用于asp.net开发。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 本文详细介绍了Mybatis中#与$的区别及其作用。#{}可以防止sql注入,拼装sql时会自动添加单引号,适用于单个简单类型的形参。${}则将拿到的值直接拼装进sql,可能会产生sql注入问题,需要手动添加单引号,适用于动态传入表名或字段名。#{}可以实现preparedStatement向占位符中设置值,自动进行类型转换,有效防止sql注入,提高系统安全性。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • SpringMVC工作流程概述
    SpringMVC工作流程概述 ... [详细]
  • PHP函数实现分页含文本分页和数字分页【PHP】
    后端开发|php教程PHP,分页后端开发-php教程最近,在项目中要用到分页。分页功能是经常使用的一个功能,所以,对其以函数形式进行了封装。影视网源码带充值系统,vscode配置根 ... [详细]
  • 面试经验分享:华为面试四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试
    最近有朋友去华为面试,面试经历包括四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试。80%的人都在第一轮电话面试中失败,因为缺乏基础知识。面试问题涉及 ... [详细]
  • 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之六 || API项目整体搭建 6.1 仓储模式
    代码已上传Github+Gitee,文末有地址  书接上文:前几回文章中,我们花了三天的时间简单了解了下接口文档Swagger框架,已经完全解放了我们的以前的Word说明文档,并且可以在线进行调 ... [详细]
author-avatar
___周麗
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有