qq_24210923 2021-09-22 11:38 采纳率: 100%
浏览 715
已结题

mysql8.0 with as在navicat中可以使用,但是在mybatis却报错

navicat 运行sql:
WITH a AS ( SELECT * FROM s_sn ) SELECT

  • FROM
    a

结果:

OK
时间: 0.001s

img

mybatis里写的sql:

img

结果执行查询时报异常:

The error occurred while executing a query

SQL: WITH a AS ( SELECT * FROM s_sn ) SELECT * FROM a

Cause: java.sql.SQLException: sql injection violation, syntax error: syntax error, error in :'WITH a AS ( SELECT * FROM s_sn',expect WITH, actual WITH WITH : WITH a AS ( SELECT * FROM s_sn ) SELECT * FROM a

数据库连接配置
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true
jdbc.username=root
jdbc.password=1234

mybatis-config.xml

<?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="cacheEnabled" value="true" />

        <!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。 -->
        <setting name="lazyLoadingEnabled" value="true" />

        <!-- 当启用时,有延迟加载属性的对象在被调用时将会完全加载任意属性。否则,每种属性将会按需要加载。 -->
        <setting name="aggressiveLazyLoading" value="true" />

        <!-- 是否允许单条sql 返回多个数据集 (取决于驱动的兼容性) default:true -->
        <setting name="multipleResultSetsEnabled" value="true" />

        <!-- 是否可以使用列的别名 (取决于驱动的兼容性) default:true -->
        <setting name="useColumnLabel" value="true" />

        <!-- 允许JDBC 生成主键。需要驱动器支持。如果设为了true,这个设置将强制使用被生成的主键,有一些驱动器不兼容不过仍然可以执行。 default:false -->
        <setting name="useGeneratedKeys" value="false" />

        <!-- 指定 MyBatis 如何自动映射 数据基表的列 NONE:不隐射 PARTIAL:部分 FULL:全部 -->
        <setting name="autoMappingBehavior" value="PARTIAL" />

        <!-- 这是默认的执行类型 (SIMPLE: 简单; REUSE: 执行器可能重复使用prepared statements语句;BATCH: 
            执行器可以重复执行语句和批量更新) -->
        <setting name="defaultExecutorType" value="SIMPLE" />

        <!-- 使用驼峰命名法转换字段。 -->
        <setting name="mapUnderscoreToCamelCase" value="true" />

        <!-- 设置本地缓存范围 session:就会有数据的共享 statement:语句范围 (这样就不会有数据的共享 ) defalut:session -->
        <setting name="localCacheScope" value="SESSION" />

        <!-- 设置但JDBC类型为空时,某些驱动程序 要指定值,default:OTHER,插入空值时不需要指定类型 -->
        <setting name="jdbcTypeForNull" value="NULL" />

    </settings>

    <!-- 类型别名 -->
    <typeAliases>


    </typeAliases>

</configuration>


spring-jdbc.xml 数据库连接池配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    xmlns:jee="http://www.springframework.org/schema/jee"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:util="http://www.springframework.org/schema/util"
    xmlns:task="http://www.springframework.org/schema/task"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.0.xsd
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd
        http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">

    <!-- 自动扫描 -->
    <!-- <context:component-scan base-package="com.ws.**.modules" /> -->
    <!-- <bean class="com.common.utils.SpringContextHolder" lazy-init="false" 
        /> -->
    <!-- 引入配置文件 -->
    <!-- <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
        <property name="location" value="classpath:conf/global.properties" /> </bean> -->

    <!-- 数据源配置, 使用 阿里的durid 数据库连接池,支持web界面监控,显示慢sql等特点 -->
    <bean id="dataSource"
        class="com.alibaba.druid.pool.DruidDataSource" init-method="init"
        destroy-method="close">
        <!-- 数据源驱动类可不写,Druid默认会自动根据URL识别DriverClass -->
        <property name="driverClassName" value="${jdbc.driver}" />

        <!-- 基本属性 url、user、password -->
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />

        <!-- 配置初始化大小、最小、最大 -->
        <property name="initialSize" value="${jdbc.pool.init}" />
        <property name="minIdle" value="${jdbc.pool.minIdle}" />
        <property name="maxActive" value="${jdbc.pool.maxActive}" />

        <!-- 配置获取连接等待超时的时间 -->
        <property name="maxWait" value="60000" />

        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="60000" />

        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="300000" />

        <property name="validationQuery" value="${jdbc.testSql}" />
        <property name="testWhileIdle" value="true" />
        <property name="testOnBorrow" value="false" />
        <property name="testOnReturn" value="false" />

        <!-- 打开PSCache,并且指定每个连接上PSCache的大小(Oracle使用) <property name="poolPreparedStatements" 
            value="true" /> <property name="maxPoolPreparedStatementPerConnectionSize" 
            value="20" /> -->

        <!-- 配置监控统计拦截的filters ,proxyFilters基于组合,两种都写是组合 -->
        <!-- <property name="filters" value="stat,wall" /> -->
        <property name="proxyFilters">
            <list>
                <ref bean="stat-filter" />
                <ref bean="wall-filter" />
                <ref bean="log-filter" />
            </list>
        </property>
    </bean>
    <!-- druid防火墙过滤器 -->
    <bean id="wall-filter" class="com.alibaba.druid.wall.WallFilter">
        <property name="config" ref="wall-config" />
    </bean>
    <!--配置druid允许批量执行配置,默认为false禁止 -->
    <bean id="wall-config" class="com.alibaba.druid.wall.WallConfig">
        <property name="multiStatementAllow" value="true" />
    </bean>
    <!-- sql监控 -->
    <bean id="stat-filter"
        class="com.alibaba.druid.filter.stat.StatFilter">
        <!-- SQL合并配置 -->
        <property name="mergeSql" value="true" />
        <!-- 慢SQL执行时间 设定 -->
        <property name="slowSqlMillis" value="2000" />
        <!-- 慢SQL记录输出 -->
        <property name="logSlowSql" value="true" />
    </bean>
    <!-- 配置输出日志 -->
    <bean id="log-filter"
        class="com.alibaba.druid.filter.logging.Log4jFilter">
        <!-- 是否显示结果集 -->
        <property name="resultSetLogEnabled" value="false" />
        <!--输出可执行的SQL -->
        <property name="statementExecutableSqlLogEnable" value="true" />
    </bean>
    <!-- 配置druid对spring监控 -->
    <bean id="druid-stat-interceptor"
        class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor" />
    <bean id="druid-stat-pointcut"
        class="org.springframework.aop.support.JdkRegexpMethodPointcut"
        scope="prototype">
        <property name="patterns">
            <list>
                <value>org.db.impl.*</value>
                <value>org.db.dao.*</value>
            </list>
        </property>
    </bean>
    <aop:config>
        <aop:advisor advice-ref="druid-stat-interceptor"
            pointcut-ref="druid-stat-pointcut" order="4" />
    </aop:config>


    <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
    <bean id="sqlSessionFactory"
        class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="typeAliasesPackage"
            value="org.service.model" />
        <property name="mapperLocations"
            value="classpath*:mybatis/mysql/my/*.xml"></property>
        <property name="configLocation"
            value="classpath:mybatis-config.xml"></property>
    </bean>



    <!-- DAO接口所在包名,Spring会自动查找其下的类 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="org.db.dao" />
        <property name="sqlSessionFactoryBeanName"
            value="sqlSessionFactory"></property>
    </bean>

    <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
    <!-- 开启事务控制的注解支持 -->
    <!-- 有特定地方使用 注解,两种注解是有序的,可以按照写的顺序和order两种方式来指定 -->
    <tx:annotation-driven
        transaction-manager="transactionManager" order="2" />
    <!-- 配置事务传播特性 事物的隔离级别:mysql:默认repeatable-read,sqlserver默认read_commit,oracle只有两种,默认为read_commit -->
    <tx:advice id="txAdvice"
        transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="upd*" propagation="REQUIRED"
                isolation="READ_COMMITTED" rollback-for="Exception" />
            <tx:method name="add*" propagation="REQUIRED"
                isolation="READ_COMMITTED" rollback-for="Exception" />
            <tx:method name="del*" propagation="REQUIRED"
                isolation="READ_COMMITTED" rollback-for="Exception" />
            <tx:method name="edit*" propagation="REQUIRED"
                isolation="READ_COMMITTED" rollback-for="Exception" />
            <!-- <tx:method name="get*" propagation="SUPPORTS" isolation="READ_COMMITTED" 
                read-only="true"/> -->
            <tx:method name="*" propagation="SUPPORTS" read-only="true"
                rollback-for="Exception" />
        </tx:attributes>
    </tx:advice>

    <!-- 配置参与事务的类 -->
    <aop:config>
        <aop:advisor
            pointcut="execution(* org.db.impl.*.*(..))" advice-ref="txAdvice"
            order="1" />
    </aop:config>

    <!-- 指定自动搜索Bean组件、自动搜索切面类 -->
    <context:component-scan base-package="org.aspect">
        <context:include-filter type="annotation"
                                expression="org.aspectj.lang.annotation.Aspect"/>
    </context:component-scan>
    <!-- 启动@AspectJ支持 -->
    <aop:aspectj-autoproxy/>
    <!-- 操作日志切面类 -->
    <bean id="logAspect" class="org.aspect.LogAspect">
    </bean>

    <!-- add by yezk 操作日志AOP配置 -->
    <aop:config>
    <!--ref 指向 操作日志切面类 -->
        <aop:aspect id="log" ref="logAspect">
            <!--过滤的业务方法 upd/del/add/modify/remove/issue/edit/upload/import/reset-->
            <aop:pointcut id="logPointcut" expression="execution(* org.db.impl.*.upd*(..))||execution(* org.db.impl.*.del*(..))||execution(* org.db.impl.*.add*(..))||execution(* org.db.impl.*.modify*(..))||execution(* org.db.impl.*.remove*(..))||execution(* org.db.impl.*.issue*(..))||execution(* org.db.impl.*.edit*(..))||execution(* org.db.impl.*.upload*(..))||execution(* org.db.impl.*.import*(..))||execution(* org.db.impl.*.reset*(..))"/>
            <!--执行业务方法前需要执行的方法before() -->
            <aop:before method="before" pointcut-ref="logPointcut"/>
            <!--执行业务方法后需要执行的方法after() -->
            <aop:after method="after" pointcut-ref="logPointcut"/>
            <!--执行业务方法最后成功需要执行的方法afterReturning() -->
            <aop:after-returning method="afterReturning" pointcut-ref="logPointcut" returning="returnValue"/>
            <!--执行业务方法抛出异常需要执行的方法afterThrowing() -->
            <aop:after-throwing method="afterThrowing" pointcut-ref="logPointcut" throwing="ex"/>
        </aop:aspect>
    </aop:config>

    <!-- <aop:config proxy-target-class="true"> <aop:pointcut expression="execution(* 
        org.bom.db.impl.*.*(..))" id="transcationPointcut" /> <aop:advisor advice-ref="txAdvice" 
        pointcut-ref="transcationPointcut" order="1"/> </aop:config> -->

    <!-- 监控接口调用是否出错,错误信息落地 。 切面类,实现代理的功能,如果不配置则不会代理 -->
    <!-- <bean id="systemLogAop" class="com.ws.web.system.SystemLogAop"></bean> -->
    <!-- 配置aop代理 -->
    <!-- <aop:config> 切面,引入切面类对象 myAspectHelp <aop:aspect id="systemLog" ref="systemLogAop" 
        order="3"> 配置切入点 <aop:pointcut id="logAopPointCut" expression="execution(* 
        com.ws.web.impl..*(..))" /> 配置通知 <aop:after-throwing method="exceptionAdvice" 
        pointcut-ref="logAopPointCut" throwing="ex"/> </aop:aspect> </aop:config> -->

</beans>



现在我自己还没找到解决方法,如果这个问题解决了,以后复杂sql就好写了。
请知道怎么解决的大~佬帮忙看看怎么解决,先谢谢了

  • 写回答

2条回答 默认 最新

  • CSDN专家-微编程 2021-09-22 11:46
    关注

    看看你的数据库连接池配置文件有没有问题

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月30日
  • 已采纳回答 9月22日
  • 修改了问题 9月22日
  • 创建了问题 9月22日

悬赏问题

  • ¥15 用三极管设计—个共射极放大电路
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示