ResultMap结果集映射和日志

本文介绍了Mybatis中ResultMap用于解决字段名与属性名不一致的问题,详细讲解了如何使用ResultMap进行结果集映射,并展示了日志工厂和LOG4J的配置与应用,强调了日志在异常处理中的重要性。
摘要由CSDN通过智能技术生成

ResultMap结果集映射

声明:本文章属于学习笔记,根据狂神说的Mybatis编写

Mybatis在线文档:https://mybatis.org/mybatis-3/zh/index.html

一丶结果集映射

首先我们看这样的一个问题:假如我们的字段名和属性名不一致,该怎么办。
我们可以看这样一段代码:
User实体类:

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 + '\'' +
                '}';
    }
}

数据库中mybatis表:
在这里插入图片描述
我们可以注意到虽然我们的id和name相同,但是pwd和password不相同!

UserMapper.XML:
在这里插入图片描述测试类测试:

public class UserDaoTest {
    @Test
    public void tset1(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User userById = mapper.getUserById(1);
        System.out.println(userById);
        sqlSession.close();
    }

}

所以我们在这时运行程序看我们的输出结果:

在这里插入图片描述

我们可以看到这个时候,pwd是输出为null的。 只是因为我们的实体类中的pwd和数据库中的password不相同!

但是我们可以有很多种解决的方法,

1丶给字段起别名:
在这里插入图片描述运行结果:

在这里插入图片描述

2丶ResultMap映射:
这个结果集映射的解决办法无意识重中之重!

<mapper namespace="com.kdy.dao.UserMapper">
    //User为实体类
    <resultMap id="UserMap" type="User">
    <!--    column 数据库的字段  property 实体类的字段  -->
        <result column="id" property="id"/>
        <result column="nanme" property="name"/>
        <result column="password" property="pwd"/>
    </resultMap>
    <select id="getUserById"  resultMap="UserMap">
         /*可以用起别名的方法进行sql的查询*/
        select* from mybatis.user  where  id=#{id};
    </select>
</mapper>

运行结果:
在这里插入图片描述
其实这只是一个简单的举例,因为代码太少,ResultMap 的设计思想是,对简单的语句做到零配置,对于复杂一点的语句,只需要描述语句之间的关系就行了。

我们看下官方文档上的例子:
在这里插入图片描述
在这里插入图片描述

我们可以看到真的是方便了很多。

ResultMap 的优秀之处——你完全可以不用显式地配置它们,所以我们在上面的例子上完全可以将,id和name注释掉,只去显示pwd和password:
在这里插入图片描述

二丶日志工厂

如果一个数据库操作,出现了异常那么,日志工厂就是最好的助手,因为他们清楚地显示出来程序的运行过程!

官方文档的日志标准:
在这里插入图片描述

一个配置完整的 settings 元素的示例如下:
<settings>
  <setting name="cacheEnabled" value="true"/>
  <setting name="lazyLoadingEnabled" value="true"/>
  <setting name="multipleResultSetsEnabled" value="true"/>
  <setting name="useColumnLabel" value="true"/>
  <setting name="useGeneratedKeys" value="false"/>
  <setting name="autoMappingBehavior" value="PARTIAL"/>
  <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
  <setting name="defaultExecutorType" value="SIMPLE"/>
  <setting name="defaultStatementTimeout" value="25"/>
  <setting name="defaultFetchSize" value="100"/>
  <setting name="safeRowBoundsEnabled" value="false"/>
  <setting name="mapUnderscoreToCamelCase" value="false"/>
  <setting name="localCacheScope" value="SESSION"/>
  <setting name="jdbcTypeForNull" value="OTHER"/>
  <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>

我们可以拿自己的mybatis-config.xml配置文件举例:
在这里插入图片描述
运行结果级补充:
在这里插入图片描述

我们可以很清楚地看到,有了日志之后,执行流程的清晰和顺畅。

三丶LOG4J

LOG4J 其实也是一个日志,只不过我们需要进行配置:
在这里插入图片描述
log4j.properties:

#\u5C06\u7B49\u7EA7\u4E3ADEBUG\u7684\u65E5\u5FD7\u4FE1\u606F\u8F93\u51FA\u5230console\u548Cfile\u8FD9\u4E24\u4E2A\u76EE\u7684\u5730\uFF0Cconsole\u548Cfile\u7684\u5B9A\u4E49\u5728\u4E0B\u9762\u7684\u4EE3\u7801
log4j.rootLogger=DEBUG,console,file

#\u63A7\u5236\u53F0\u8F93\u51FA\u7684\u76F8\u5173\u8BBE\u7F6E
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

#\u6587\u4EF6\u8F93\u51FA\u7684\u76F8\u5173\u8BBE\u7F6E
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File=./log/kdy.log
log4j.appender.file.MaxFileSize=10mb
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p][qinjiang%d{yy-MM-dd}][%c]%m%n

#\u65E5\u5FD7\u8F93\u51FA\u7EA7\u522B
log4j.logger.org.mybatis=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

我们想要使用还需要在pom.xml文件中导入Maven依赖:

  <!--log4j依赖-->
        <!-- https://mvnrepository.com/artifact/log4j/log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

测试类测试:

public class UserDaoTest {
    static  Logger logger = Logger.getLogger(UserDaoTest.class);
    @Test
    public void tset1(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        logger.info("打入地方内部");
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User userById = mapper.getUserById(1);
        System.out.println(userById);
        sqlSession.close();

    }

}

运行结果:
在这里插入图片描述
我们可以同时看到:
在这里插入图片描述

有log文件的生成,这是因为我们的配置文件中的在这里插入图片描述
表明了在哪里将日志生成。

kdy.log文件:
在这里插入图片描述

日志文件能够清楚地看到程序运行的过程,方便与我们改错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值