MyBatis知多少(26)调试
这是很容易,同时与iBATIS的工作程序进行调试。 iBATIS有内置的日志支持,并适用于下列日志库,并在这个顺序搜索他们。
Jakarta Commons日志记录(JCL)。
Log4J
JDK 日志
可以使用任何上面列出的库在iBATIS。
调试和Log4J:
假设你要使用Log4J,这是最好用的日志记录。继续操作之前,需要交叉检查以下几点:
Log4J JAR 文件 (log4j-{version}.jar) 应在CLASSPATH中。
必须在CLASSPATH中提供log4j.properties。
下面是一个log4j.properties文件。请注意,某些行被注释掉了。你可以取消他们,如果你需要额外的调试信息。
# Global logging configuration
log4j.rootLogger=ERROR, stdout log4j.logger.com.ibatis=DEBUG # shows SQL of prepared statements
#log4j.logger.java.sql.Connection=DEBUG # shows parameters inserted into prepared statements
#log4j.logger.java.sql.PreparedStatement=DEBUG # shows query results
#log4j.logger.java.sql.ResultSet=DEBUG #log4j.logger.java.sql.Statement=DEBUG # Console output
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
可以找到完整的Log4J文档,从Apaches 网站: Log4J 文档.
iBATIS 调试例子:
下面的Java类是一个非常简单的例子,初始化,然后使用Java应用程序Log4J的日志库。它位于CLASSPATH中上面提到的属性文件。
import org.apache.log4j.Logger; import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import java.io.*;
import java.sql.SQLException;
import java.util.*; public class IbatisUpdate{
static Logger log = Logger.getLogger(
IbatisUpdate.class.getName()); public static void main(String[] args)
throws IOException,SQLException{
Reader rd = Resources.getResourceAsReader("SqlMapConfig.xml");
SqlMapClient smc = SqlMapClientBuilder.buildSqlMapClient(rd); /* This would insert one record in Employee table. */
log.info("Going to update record.....");
Employee rec = new Employee();
rec.setId(1);
rec.setFirstName( "Roma");
smc.update("Employee.update", rec );
log.info("Record updated Successfully "); log.debug("Going to read records.....");
List <Employee> ems = (List<Employee>)
smc.queryForList("Employee.getAll", null);
Employee em = null;
for (Employee e : ems) {
System.out.print(" " + e.getId());
System.out.print(" " + e.getFirstName());
System.out.print(" " + e.getLastName());
System.out.print(" " + e.getSalary());
em = e;
System.out.println("");
} log.debug("Records Read Successfully "); }
}
编译和运行:
下面是步骤来编译并运行上述软件。请确保您已在进行的编译和执行之前,适当地设置PATH和CLASSPATH。
创建Employee.xml如上所示。
创建Employee.java如上图所示,并编译它。
创建IbatisUpdate.java如上图所示,并编译它。
创建log4j.properties文件,如上图所示。
执行IbatisUpdate二进制文件来运行程序。
会得到下面的结果,并记录在EMPLOYEE表进行更新, 然后相同的记录将被从EMPLOYEE表中读出。
DEBUG [main] - Created connection 28405330.
DEBUG [main] - Returned connection 28405330 to pool.
DEBUG [main] - Checked out connection 28405330 from pool.
DEBUG [main] - Returned connection 28405330 to pool.
1 Roma Ali 5000
2 Zara Ali 5000
3 Zara Ali 5000
调试方法:
在上面的例子中,我们只使用info()方法,但可以使用以下任何一种方法按你的需要:
public void trace(Object message);
public void debug(Object message);
public void info(Object message);
public void warn(Object message);
public void error(Object message);
public void fatal(Object message);
系列文章:
MyBatis知多少(13)MyBatis如何解决数据库的常见问题
MyBatis知多少(26)调试的更多相关文章
- MyBatis知多少(26)MyBatis和Hibernate区别
iBatis和Hibernate之间有着较大的差异,但两者解决方案很好,因为他们有特定的领域.我个人建议使用MyBatis的,如果: 你想创建自己的SQL,并愿意维持他们. 你的环境是由关系数据模型驱 ...
- MyBatis知多少(25)动态SQL
使用动态查询是MyBatis一个非常强大的功能.有时你已经改变WHERE子句条件的基础上你的参数对象的状态.在这种情况下的MyBatis提供了一组可以映射语句中使用,以提高SQL语句的重用性和灵活性的 ...
- MyBatis知多少(24)存储过程
使用MyBatis配置来调用存储过程.为了理解这一章,首先需要了解我们是如何在MySQL中创建一个存储过程. 在继续对本节学习之前,可以自行学习MySQL存储过程. 我们已经在MySQL下有EMPLO ...
- MyBatis知多少(23)MyBatis结果映射
resultMap的元素是在MyBatis的最重要和最强大的元素.您可以通过使用MyBatis的结果映射减少高达90%的JDBC编码,在某些情况下,可以让你做JDBC不支持的事情. ResultMap ...
- MyBatis知多少(22)MyBatis删除操作
本节从表中使用MyBatis删除记录. 我们已经在MySQL下有EMPLOYEE表: CREATE TABLE EMPLOYEE ( id INT NOT NULL auto_increment, f ...
- MyBatis知多少(21)更新操作
上一章展示了如何使用MyBatis对表进行读取操作.本章将告诉你如何在一个表中使用MyBatis更新记录. 我们已经在MySQL下有EMPLOYEE表: CREATE TABLE EMPLOYEE ( ...
- MyBatis知多少(20)MyBatis读取操作
上篇展示了如何使用MyBatis执行创建操作表.本章将告诉你如何使用MyBatis来读取表. 我们已经在MySQL下有EMPLOYEE表: CREATE TABLE EMPLOYEE ( id INT ...
- MyBatis知多少(19)MyBatis操作
若要使用iBATIS执行的任何CRUD(创建,写入,更新和删除)操作,需要创建一个的POJO(普通Java对象)类对应的表.本课程介绍的对象,将“模式”的数据库表中的行. POJO类必须实现所有执行所 ...
- MyBatis知多少(18)MyBatis系统
小型.简单系统 小型应用程序通常只涉及单个数据库,只有一些相当简单的用户界面和领域模型.它的业务逻辑非常简单,甚至对一些简单的CRUD (Create, Read, Update, Delete:增删 ...
随机推荐
- hive函数 -- split 字符串分割函数
hive字符串分割函数 split(str, regex) - Splits str around occurances that match regexTime taken: 0.769 secon ...
- 巧用在线html编辑器,保存文章到数据库(带html标签)
1.对于读取数据库的文章字段刷新到web页面,如何使文章格式很好的显示出来,那么数据库应存text格式,并记录文章的个数(转换为html): 2.如何转换html格式,可以使文章从word直接粘贴到在 ...
- Linux Buffers和Cached的区别(转)
在linux下使用free命令查看内存使用情况,有buffers和cached两项,以下是它们的区别: buffers是为块设备设计的缓冲.比如磁盘读写,把分散的写操作集中进行,减少磁盘I/O,从而提 ...
- Android 使用Fragment界面向下跳转并一级级返回
http://www.cnblogs.com/_ymw/p/4227862.html 1.首先贴上项目结构图: 2.先添加一个接口文件BackHandledInterface.java,定义一个set ...
- 忘记hmailiserver邮件服务器后台登陆密码解决
进入后台进行hmailiserver的相关设置,发现登陆密码忘记了,如下图:
- 关于 MySQL 的 boolean 和 tinyint(1)
boolean类型MYSQL保存BOOLEAN值时用1代表TRUE,0代表FALSE,boolean在MySQL里的类型为tinyint(1),MySQL里有四个常量:true,false,TRUE, ...
- 解决方案: scp/ssh 的登陆提示很慢 (Linux)
看着用 windows 的 scp 命令很快很是羡慕. 这个问题让我实实郁闷了好几天. 在 Linux 下不管是用 ssh 还是用 scp, 连接速度都很慢 (登陆提示框的弹出时间). 确切地讲, 每 ...
- 【Android开发坑系列】之Fragment
这个东西有顾名思义是碎片,和之前的Activity对应. 坑1:一般情况都会想当然的以为进程被杀掉之后,Fragment也会被回收 其实,Fragment有自己的生命周期,有自己的管理器(Fragme ...
- [leetcode] Min Stack @ Python
原题地址:https://oj.leetcode.com/problems/min-stack/ 解题思路:开辟两个栈,一个栈是普通的栈,一个栈用来维护最小值的队列. 代码: class MinSta ...
- Requirements of an SAP system administrator
Requirements of an SAP system administrator Have a "proper" attitude Protect and safeguard ...