【Mybatis二】Mybatis-ResultMap-日志(STDOUT_LOGGING,log4j)-分页

5.ResultMap, 解决属性名和字段名不一致的问题

5.1.出现的情况

实体类的字段跟数据库字段不一致

image-20220323225122483

查询结果–获取不到pwd

image-20220323225632290

分析原因

原来使用的SQL是

select * from mybatis.user where id = #{id}

改为全称

select id,name,pwd from mybatis.user where id = #{id}

发现我们获取的是password, 这里查看的是pwd

解决方案一:SQL起一个别名

select id,name,pwd as password from mybatis.user where id = #{id}

就可以查询到了User{id=1, name='张三', password='123'}

解决方案二: resultMap

结果集映射

<select id="getUserByID" resultType="user" parameterType="int">
    select * from mybatis.user where id = #{id}
</select>
  • resultType改为resultMap(结果集映射)
  • 添加resultMap标签
<resultMap id="map" type="User">
    <!--column 数据库字段, property实体类的属性-->
    <result column="pwd" property="password"/>
</resultMap>
<select id="getUserByID" resultMap="map" >
    select * from mybatis.user where id = #{id}
</select>

可以查出:User{id=1, name='张三', password='123'}

5.2, resultMap

  • **resultMap 元素是 MyBatis 中最重要最强大的元素。**它可以让你从 90% 的 JDBC ResultSets 数据提取代码中解放出来,并在一些情形下允许你进行一些 JDBC 不支持的操作。

  • ResultMap 的设计思想是,对简单的语句做到零配置,对于复杂一点的语句,只需要描述语句之间的关系就行了。

  • 在学习了上面的知识后,你会发现上面的例子没有一个需要显式配置 ResultMap,这就是 ResultMap 的优秀之处——你完全可以不用显式地配置它们。只需要配置实体类中属性与数据库字段不一致的列

  • 如果这个世界总是这么简单就好了。

  • 高级结果映射

6.日志

6.1.日志工厂

如果数据库操作异常, 拍错需要使用到日志

mybatis设置

logImpl指定 MyBatis 所用日志的具体实现,未指定时将自动查找。SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING
设置名描述有效值
  • SLF4J
  • LOG4J 掌握
  • LOG4J2
  • JDK_LOGGING
  • COMMONS_LOGGING
  • STDOUT_LOGGING 掌握
  • NO_LOGGING

STDOUT_LOGGING日志

<settings>
    <setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>

配置好之后打印日志

image-20220323232143031

6.2.使用Log4J

log4j简介:

  • Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程
  • 我们也可以控制每一条日志的输出格式;
  • 通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。
  • 这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

1, pom中导入依赖

<!--log4j-->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

2,resources下添加log4j.properties

#将等级为DEBUG的日志信息输出到console和file这两个目的地,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/log4j.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}{%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.ResultSet=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

3.mybatis-config.xml里配置setting

    <settings>
        <!--标准的日志工厂实现-->
<!--        <setting name="logImpl" value="STDOUT_LOGGING"/>-->
        <setting name="logImpl" value="LOG4J"/>
    </settings>

4.打印日志

{org.apache.ibatis.transaction.jdbc.JdbcTransaction}-Opening JDBC Connection
{org.apache.ibatis.datasource.pooled.PooledDataSource}-Created connection 599491651.
{org.apache.ibatis.transaction.jdbc.JdbcTransaction}-Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@23bb8443]
{com.ccc.dao.UserMapper.getUserByID}-==>  Preparing: select * from mybatis.user where id = ? 
{com.ccc.dao.UserMapper.getUserByID}-==> Parameters: 1(Integer)
{com.ccc.dao.UserMapper.getUserByID}-<==      Total: 1
User{id=1, name='张三', password='123'}
{org.apache.ibatis.transaction.jdbc.JdbcTransaction}-Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@23bb8443]
{org.apache.ibatis.transaction.jdbc.JdbcTransaction}-Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@23bb8443]
{org.apache.ibatis.datasource.pooled.PooledDataSource}-Returned connection 599491651 to pool.

Process finished with exit code 0

5.log4j简单使用

1, 在当前类加载logger对象
static Logger logger = Logger.getLogger(UserDaoTest.class);
2.日志级别
logger.info("log4j----info");
logger.debug("log4j----debug");
logger.error("log4j----error");

7.分页

**为什么要分页? **

  • 减少数据量

使用limit分页

select * from user limit 0,1

7.1.使用mybatis实现分页

1,接口

public interface UserMapper {
    User getUserByID(int id);
    //分页
    List<User> getUserLimit(Map<String,Object> map);
}

2,mapper

<select id="getUserLimit" resultType="user" parameterType="map">
    select * from user limit #{startIndex},#{pageSize}
</select>

3,测试

@Test
public void getUserLimit(){
    SqlSession sqlSession = MybatisUtil.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    HashMap<String, Object> map = new HashMap<>();
    map.put("startIndex",0);
    map.put("pageSize",2);
    List<User> userList = mapper.getUserLimit(map);
    for (User user : userList) {
        System.out.println(user);
    }
    sqlSession.close();

image-20220324130832101

7.2.分页插件

image-20220324131156335

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值