1、结果集映射
结果集映射是为了解决实体类的属性名与数据库字段名不一致的问题,为了便于测试和对比,也是采用新建模块,并把第2节的项目完全复制过来002Mybatis进阶
项目结构如下
测试也成功,准备工作完毕!
接下来,我们将实体类的属性password改成pwd,与数据库字段不同
package com.francis.pojo;
/**
* @author ZQ
* @create 2021-04-29-15:32
*/
public class User {
private int id;
private String name;
private String pwd;
public User() {
}
public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", pwd='" + pwd + '\'' +
'}';
}
}
测试查询结果如图
其对应的查询sql为:
select *
from user
where id = #{id}
该语句等价语句为:
from user
where id = #{id}
这不难理解,是因为数据库里去查询pwd这个字段的时候没有值,就返回了null,
我们可以通过在xml文件中定义结果集来解决这个问题
这里爆红的原因应该是我安装了一个检查插件,不影响。
2、日志
使用JDBC的时候,我们可以通过sout打印sql,获取错误原因并排除错误,mybatis为了达到同样的效果,使用日志来实现。日志在主配置文件的settings标签中配置。
1、使用mybatis自带的标准日志工厂,只需要在主配置文件中配置就可以了。
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
2、使用log4j作为日志工厂
(1)首先要导入依赖
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
(2)编写log4j.properties文件
#将等级设置为DEBUG的日志信息输出到console和file两个目的地
log4j.rootLogger=DEBUG,console,file
#控制台输出的相关配置
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%c]-%m%n
#文件输出的相关配置
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.file=./log/francis.log
log4j.appender.file.MaxFileSize=1MB
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
org.apache.log4j.PatternLayout.layout.ConversionPattern=[%p][%d{yy-MM-dd}[%c]%m%n
#日志输出级别
log4j.logger.org.mybatis=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.Result=DEBUG
log4j.logger.java.sql.PrepareStatement=DEBUG
(3)在主配置文件中将日志实现设置为LOG4J
<setting name="logImpl" value="LOG4J"/>
结果,证明log4j配置成功
目前整个模块的结构如下:
那如何在java代码中使用log4j呢?
(1)在当前类中实例化一个Logger对象
private static Logger logger= Logger.getLogger(UserMapperTest.class);
(2)直接用实例化的对象调用方法