一、 mybatis批量更新操作报错
错误代码:
<update id="updateBillId" parameterType="java.util.List">
<foreach collection="list" item="item" index="index" separator=";" open="" close="">
update tran_jnl
<set>bill_Id=#{item.billId}
</set>
where name=#{item.tranNo}
</foreach>
</update>
错误原因:xml中不能有;号
修改该后的代码:
<update id="updateBillId" parameterType="java.util.List">
update tran_jnl set
bill_id =
<foreach collection="list" item="item" index="index" separator="" open="case tran_no" close="end">
when #{item.tranNo} then #{item.billId}
</foreach>
where tran_no in
<foreach collection="list" item="item" index="index" separator="," open="(" close=")">
#{item.tranNo}
</foreach>
</update>
二、在springboot项目中实现控制台,文件日志的打印输出:
在pom文件里面添加:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
其次再需要输入的类中添加@Slf4j该注解
logback.xml:
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 注意:这要填好自己的项目名 -->
<property name="projectName" value="agentpay_batchs"/>
<!-- 注意:日志路径规范统一为 /home/jenkins/logs -->
<property name="logDir" value="${user.home}/logs"/>
<!-- 控制保留的归档文件的最大数量,超出数量就删除旧文件。假设设置每天滚动,且 <maxHistory>是10,则只保存最近10天的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除。-->
<property name="maxHistory" value="15"/>
<!-- 控制保留的归档文件的最大数量,超出数量就删除旧文件(针对error日志)。 -->
<property name="errorMaxHistory" value="30"/>
<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" />
<!-- 控制台日志:输出全部日志到控制台 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level [%logger{36}:%L] - %msg%n</pattern>
</encoder>
</appender>
<!-- 文件日志:输出全部日志到文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<file>${logDir}/${projectName}/${projectName}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${logDir}/${projectName}/${projectName}-%d{yyyy-MM-dd}.zip</fileNamePattern>
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level [%logger{36}:%L] - %msg%n</pattern>
</encoder>
</appender>
<!-- 错误日志:用于将错误日志输出到独立文件 -->
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<file>${logDir}/${projectName}/${projectName}-error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${logDir}/${projectName}/${projectName}-error-%d{yyyy-MM-dd}.zip</fileNamePattern>
<maxHistory>${errorMaxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level [%logger{36}:%L] - %msg%n</pattern>
</encoder>
</appender>
<!-- 追踪日志:用于将追踪日志输出到独立文件 -->
<appender name="TRACE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logDir}/${projectName}/${projectName}-trace.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${logDir}/${projectName}/${projectName}-trace-%d{yyyy-MM-dd}.zip</fileNamePattern>
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level [%logger{36}:%L] - %msg%n</pattern>
</encoder>
</appender>
<logger name="org.apache.zookeeper" level="WARN"/>
<logger name="org.springframework.data.redis" level="WARN"/>
<logger name="o.a.kafka.common.network.Selector" level="ERROR"/>
<!--<logger name="com.dianping.cat.log4j.CatAppender"/>-->
<logger name="WebRequestTraceFilter" level="DEBUG" additivity="false">
<appender-ref ref="TRACE"/>
</logger>
<!-- 日志输出级别 -->
<root>
<level value="INFO"/>
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE"/>
<appender-ref ref="ERROR"/>
</root>
</configuration>
最后测试就是把项目跑起来看有没有文件输出就行了。
(补充):添加sql语句打印:只需在配置文件中添加 具体的dao层级的包:配置文件中yml
logging:
level:
root: info
dao层的包路径: debug
若是properties文件
logging.level.root=info
logging.level.dao层包名路径=debug
三、springboot中配置文件份多种环境如何配置
一个主application文件,在添加application-dec ,application-pro,application-test三种环境的配置文件。主文件中内容:
spring.application.name=模块名
spring.profile.active=dec/pro/test(三选一)
切记用横杠-不要用下划线_
四、 org.apache.ibatis.session.Configuration.setVfsImpl(Ljava/lang/Class;)V 无此方法。
主要报错是因为pom文件中的依赖
<dependency>
<groupId>org.apache.ibatis</groupId>
<artifactId>ibatis-core</artifactId>
<version>3.0</version>
</dependency>
删除即可,我起初加入这个依赖主要是因为 sql中我需要使用到if标签来判断是否为空 。在dao层参数中加入@Param注解 识别参数。
把依赖换成
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
或者不添加依赖的话,字节修改传参的方法 不再单个单个传值,而是放入map中一起传过去。问题解决。
五、No ‘Access-Control-Allow-Origin’ header is present跨域问题。
跨域的问题可以自己去了解一下 什么是同源策略。
问题描述:我前端用ajax发送请求到后台,后台可以接收到前台的值,但是方法执行完后返回知道前端就出现了跨域问题。
解决方法,在response中设置header response.setHeader(“Access-Control-Allow-Origin”,"*").