技术标签: MyBatis
在进行数据库操作的时候,出错是不可避免的。我们曾经习惯使用的sout,debug都是很好的排错工具,但是它们的使用具有一定的局限性,久而久之人们推出日志这种工具;而作为一个优秀的持久层框架,Mybats自然也支持日志操作
[1] 日志的类型述说 https://mybatis.org/mybatis-3/zh/logging.html
[2] 如何进行日志配置 https://mybatis.org/mybatis-3/zh/configuration.html#settings
[3] 可以看到官方支持的日志的类型十分多,但我们只需掌握两个主流的日志即可,一个是默认的STDOUT_LOGGING ,另外一个是LOG4J 。
[1] 使用默认的日志输出
在mybatis的核心配置文件 mybatis-config.xml中配置我们的日志
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
测试后控制台的日志输出形式
[2] 使用Log4j的日志工厂
简介:
<!--导入log4j-->
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<2> 编写配置文件 log4j.properties,主要是定义日志输出的格式,输出位置等 (这段可进行百度,网上解释的很清楚)
### set log levels ###
log4j.rootLogger = debug,stdout,D,E
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = F://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =F://logs/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
<3> 在mybatis-config.xml中配置log4j为日志输出
<settings>
<!--标准的日志工厂实现-->
<!--<setting name="logImpl" value="STDOUT_LOGGING"/>-->
<setting name="logImpl" value="LOG4J"/>
</settings>
<4> 测试输出的日志格式
<5> 小扩展
log4j说白了和我们使用的syso十分类似,所以使用上也比较简单,如果我们实体类要使用可以通过如下方式
1> 导包 import org.apache.log4j.Logger;
2> 新建日志对象
static Logger logger = Logger.getLogger(类名.class);
3> 进行简单测试 (这和我们使用syso的作用是一致的)
@Test
public void testLog4j(){
logger.info("info:进入了testLog4j");
logger.debug("debug:进入了testLog4j");
logger.error("error:进入了testLog4j");
}
文章浏览阅读5.5k次。在导入cv2的时候报错,(paddle) C:\Windows\system32>pythonPython 3.8.12 (default, Oct 12 2021, 03:01:40) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32Type "help", "copyright", "credits" or "license" for more information.>>> import cv2Impor_importerror: numpy.core.multiarray failed to import traceback (most recent c
文章浏览阅读848次。上一篇文章讲到用selenium模拟登陆界面,然后人工输入验证码,这样增加了人的工作量,增加了处理时间,并且可能验证码输入错误,下面我通过截取验证码部分,然后通过图片识别方式获取验证码信息。首先是截取当前的登陆界面,然后定位到验证码的位置截取验证码图片。我遇到的问题是相同的位置,有时候会遇到截取的图片没有验证码、者验证码模糊不清楚、验证码很小等问题。查找之后发现是截屏时,页面没有显示完全导致的..._(2)使用selenium模拟用户登录拉钩网,输入手机号、点击验证码;(代码复制+截图、结
文章浏览阅读1.6w次,点赞22次,收藏192次。概要:win10家庭版或win10家庭中文版(建议前者,全球都使用的,后者只是微软中国):第一种直接在本机更新(有前提),第二种使用U盘重装系统,这两种方法都能在https://www.microsoft.com/zh-cn/software-download/windows10/上找到文字操作步骤;win10专业版,根据 系统之家提供的教程操作的(笔者查询安装激活时间到2038年到期,还有17年可用哈!!!)---https://www.xitongtiandi.net/windows10/win_我们找到了此设备运行windows10专业版所需的家庭版
文章浏览阅读1k次。转载: http://www.codingsoho.com/zh/course/5/article/194版权声明: 转载请注明出处 http://www.codingsoho.com/做外贸的朋友有个需求,打算去亚马逊网站上爬取一点信息用于商业,利用学到的爬虫技术,小帮忙一下需求:按指定链接(品种)爬虫相应的图片和介绍,避免一个个点进去看耗费时间定义类和初始化在这一节我们将爬虫功能进行..._os.system('cp %s %s'%(img,save_train_path_img))
文章浏览阅读5.2k次。https://i.cccccc.com/web/index.php?i=201&c=site&a=entry&live_id=5688239&do=live&wdo=kefulogin&m=wxz_superstore我要在不登入情况一下直接打开这个页面看路径可知:找到方法,第36行下面:把不需要登入的wdo页面过滤掉就行了...
文章浏览阅读8.1k次。PhoneGap/Cordova是一个专业的移动应用开发框架,是一个全面的WEB APP开发的框架,提供了以WEB形式来访问终端设备的API的功能。这对于采用WEB APP进行开发者来说是个福音,这可以避免了原生开发的某些功能。Cordova 只是个原生外壳,app的内核是一个完整的webapp,需要调用的原生功能将以原生插件的形式实现,以暴露js接口的方式调用。 Cordova Android项目是Cordova Android原生部分的Java代码实现,提供了Android原生代码和上层W_cordovaactivity api
文章浏览阅读2.1k次,点赞2次,收藏3次。openmessaging-benchmark使用笔记一,介绍二,安装三,使用不带kerberos的Kafka带kerberos 的kafka一,介绍openmessaging-benchmark可以方便的对kafka等分布式消息系统进行测试。参考官网:http://openmessaging.cloud/docs/benchmarks二,安装 git clone https://git..._openmessaging-benchmark
文章浏览阅读3.6k次,点赞3次,收藏2次。mybatis中设置自动提交正常情况,获取sqlSession对象,更新,删除,插入的操作需要手动commit提交事务例如: //增删改需要提交事务,否则数据库不会插入 @Test public void addUser(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class_sqlsession 什么时候提交数据
文章浏览阅读1k次。0.前言目前主要用java 工作用到go和gocv 遇到些坑 记录一下比较合理的解决方法找了好几个链接 似乎不能很好的解决安装和编译的问题 总结出自己的解决方法有不正确或者有疑问的地方可以下方评论留言 建议花几分钟从头看到尾 最后有个总结 可以看看1.先看结果编译成功看结果我用的是goland ,如果编译成功可以看看结果,找到依赖(可以在资源管理器打开也行) 后右键控制台打开 , 然后执行 ,可能第一次需要等一会 比较慢编译的文件2.操作过程安装和配置环境变量安装min_gocv 使用教程
文章浏览阅读398次。参考:https://www.php.cn/cms/wordpress/437173.html_电脑ip链接特定的后缀怎么去除
文章浏览阅读216次。输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。要求用3个函数实现,分别为输入10个数、进行处理、输出10个数。要求使用指针的方法进行处理。#include <iostream>#include <algorithm>using namespace std;int a[10];void input(){ for(int i=0;i<10;i++){ scanf("%d",a+i); } return;}void aswap(._用指针方法处理:输入10个整数,将其中最小的数与第一个数对换,把最大的数与最一个
文章浏览阅读2.9w次。List list=new List();list.add(new Form("小明",15));list.add(new Form("小小明",1));list.add(new Form("大明",25));list.sort((left,right)=>left.age.compare(right.age));//说明:age为年龄,按age排完序,为小小明,小明,大..._dart list排序