GVKun编程网logo

SpringBoot配置使Mybatis打印SQL执行时的实际参数值操作

8

如果您想了解SpringBoot配置使Mybatis打印SQL执行时的实际参数值操作的知识,那么本篇文章将是您的不二之选。同时我们将深入剖析logback+mybatis打印sql、logback中m

如果您想了解SpringBoot配置使Mybatis打印SQL执行时的实际参数值操作的知识,那么本篇文章将是您的不二之选。同时我们将深入剖析logback+mybatis打印sql、logback中mybatis打印SQL、mybatis+springboot中使用mysql的实例、mybatis打印SQL,并显示参数的实例的各个方面,并给出实际的案例分析,希望能帮助到您!

本文目录一览:

SpringBoot配置使Mybatis打印SQL执行时的实际参数值操作

SpringBoot配置使Mybatis打印SQL执行时的实际参数值操作

这篇文章主要介绍了SpringBoot配置使Mybatis打印sql执行时的实际参数值操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

问题描述

在开发过程中,默认配置下SpringBoot和Mybatis正常结合运行,但在打印的日志中动态sql中的参数位置显示的是?,当sql执行违背预期时不免是因为传到Mapper中sql参数值不正确所导致,这时候如果调试能查看sql执行时占位符处的值,这无疑能让问题展示得更加直观,如何在SpringBoot、Mybatis的框架下使日志中打印出sql执行时获得的实际参数呢?

问题表现

解决办法

在SpringBoot项目中的配置文件application.properties或者bootstrap.properties添加如下内容

mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

如果如果文件为yml的格式则在application.yml或者bootstrap.yml文件中添加如下内容

mybatis:

configuration:

log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

效果

配置后效果如下

补充知识:mybatis 显示参数${} #{},${}适用场景 miniui sortField sortOrder

最近配合miniui 排序,发现用${} 可以直接使用 sortField、sortOrder 里面的值进行排序,而用#{} 就不行了

查了下 这两个区别:

1.#{} 传参,sql语句解析会加上"",

例如

select * from report where orgname= #{orgname}, 结果会是 select * fromreport whereorgname= ‘花果山'

2.${} 传参,mybatis不会修改或转义字符串,

select * from report order by ${sortField}, 结果会是 select * fromreport order by orgname.

#{}传参能防止sql注入,mybatis会创建preparedstatement 并以它为背景设置安全的值

使用${field}不应该允许用户输入这些field,或者通常自行转义并检查。

以上这篇SpringBoot配置使Mybatis打印sql执行时的实际参数值操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小编。

logback+mybatis打印sql

logback+mybatis打印sql

使用的mybatis版本号

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.22</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>

logback.xml配置

org.kai.practice.dao是我的dao层包路径,日志级别必须使用debug

    <logger name="org.kai.practice.dao" level="debug" additivity="false">
        <appender-ref ref="STDOUT"/>
    </logger>

参考

mybatis官网给的log设置如下:
clipboard.png
http://www.mybatis.org/mybati...

默认不配置的话mybatis会自动查找具体的日志实现,因此我没有配置。

参考了以下文章:
http://www.cnblogs.com/mydotn...

logback中mybatis打印SQL

logback中mybatis打印SQL

1.在mybatis配置文件中

mybatis-config.xml配置文件中加入settings部分

<?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>
    <settings>
        <setting name="logPrefix" value="daoLog."/>
    </settings>

</configuration>

 

2.logback.xml加入

<logger name="daoLog" level="debug" additivity="false">
    <appender-ref ref="stdout"/>
</logger>

 

3.console输出如下

 

4.参考文章

http://www.cnblogs.com/beiyeren/p/4196134.html

mybatis+springboot中使用mysql的实例

mybatis+springboot中使用mysql的实例

在软件开发中,数据库的引入是必不可少的,这里来展现一下通过mybatis框架在springboot中使用MysqL,具有一定的参考价值,感兴趣的可以了解一下

目录

依赖引入

配置引入

案例实现

案例源码

在软件开发中,数据库的引入是必不可少的,其中又属MysqL使用最为广泛,而在springboot中,集成使用MysqL的方式有很多(例如jpa),这里来展现一下通过mybatis框架在springboot中使用MysqL。

依赖引入

首先在使用初始化工程的时候加入mybatis、MysqL相关的依赖,如下所示:org.springframework.bootspring-boot-starterorg.mybatis.spring.bootmybatis-spring-boot-starter2.0.1MysqLmysql-connector-javaruntimecom.alibabadruid1.1.10

配置引入

在配置方面,使用springboot的自动配置功能配置数据源,如下所示:

spring: datasource: type: com.alibaba.druid.pool.DruidDataSource url: jdbc:MysqL://127.0.0.1:3306/sbac_master?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true username: root password: 1234 driver-class-name: com.MysqL.cj.jdbc.Driver

配置了数据源,剩下的就是引入mybatis了。mybatis的引入同样可以使用自动配置(MybatisProperties)来实现,这里选择不全部使用自动配置属性,而是引入mybatis的配置文件方式注入属性。

mybatis: config-location: classpath:mybatis-config.xml mapper-locations: classpath:com/lazycece/sbac/MysqL/data/dao/*/mapper/*.xml

这里给出一个mybatis的简单配置,有关更多的配置属性,可以参考mybatis的XML配置。

案例实现

这里给出一个简单的案例(用户信息的插入和查询)来展现mapper层的实现,实体就不在这里展示了。mapper接口如下:

@Mapper public interface UserDao { void insert(User user); User findByUsername(@Param("username") String username); }

同时需要在主函数上加入注解@MapperScan来扫描我们mapper:

@SpringBootApplication @MapperScan(basePackages = {"com.lazycece.sbac.MysqL.data.dao"}) public class SpringbootAcMysqLSimpleApplication { public static void main(String[] args) { SpringApplication.run(SpringbootAcMysqLSimpleApplication.class, args); } }

mapper的sql实现,这里选择用xml的方式实现,当然也可以选择用注解方式(这里对应的@Select,@Insert):

id,create_time,update_time,username,password,telephone,status,editor INSERT INTO user (create_time,update_time,username,password,telephone,status,editor) VALUE (#{createTime},#{updateTime},#{username},#{password},#{telephone},#{status},#{editor}); SELECT FROM user WHERE username = #{username};

细心者可发现,前面配置引入中引入mapper是写的classpath:com/lazycece/sbac/MysqL/data/dao//mapper/.xml包名路径,使用这种方式默认情况下是不会成功的,因为包路径下文件默认只会编译java文件,所以需要在pom文件中加入配置使得在工程编译时将其包含进编译后的路径下。

src/main/javacom/lazycece/sbac/MysqL/data/dao/*/mapper/*.xml

案例源码

案例源码地址: https://github.com/lazycece/springboot-actual-combat/tree/master/springboot-ac-MysqL/springboot-ac-MysqL-simple

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

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

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

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

UTF-83.2.4.RELEASE1.7.61.1.2

org.lazylukelog4jdbc-remix0.2.7org.slf4jslf4j-api${version.slf4j}ch.qos.logbacklogback-classic${version.logback}ch.qos.logbacklogback-access${version.logback}org.logback-extensionslogback-ext-spring0.1.2

org.slf4jjul-to-slf4j${version.slf4j} /dependency> org.slf4jjcl-over-slf4j${version.slf4j}

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

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

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

${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,并显示参数的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小编。

今天关于SpringBoot配置使Mybatis打印SQL执行时的实际参数值操作的分享就到这里,希望大家有所收获,若想了解更多关于logback+mybatis打印sql、logback中mybatis打印SQL、mybatis+springboot中使用mysql的实例、mybatis打印SQL,并显示参数的实例等相关知识,可以在本站进行查询。

本文标签: