ResultMap和分页相关

当属性名和字段名不一致的时候

解决方法
1、数据库中创建user表
字段 id、name、pwd
2、Java中的实体类

@Data
public class User { private int id; //id
private String name; //姓名
private String password; //密码和数据库不一样!
}

3、接口以及方法

User selectUserById(int id);

4、在Mapper.xml中编写sql

<select id="selectUserById" resultType="user">
select * from user where id = #{id}
</select>

5、测试

@Test
public void testSelectUserById() {
SqlSession session = MybatisUtils.getSession(); //获取SqlSession连接
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.selectUserById(1);
System.out.println(user);
session.close();
}

测试结果:

  • User{id=1, name=‘盼盼’, password=‘null’}
  • 我们通过查询发现password字段反馈结果为空,这就说明我们的代码是有错误的

分析:

  • select * from user where id = #{id}可以看成
    select id,name,pwd from user where id = #{id}
  • 这儿我们了解到,在Mybatis中有自动映射机制,即根据查询的列名去对应的实体类中查找相应列名的set方法设值,由于找不到setPwd(),所以password返回NULL

解决方案

1、为列名起别名(用as),这里的别名和Java实体类中的属性名一致

<select id="selectUserById" resultType="User">
select id,name,pwd as password from user where id =#{id}
</select>

2、使用结果集映射>>>>ResultMap
强烈推荐

<resultMap id="UserMap" type="User">
<!-- id为主键-->
<id column = "id" property = "id"/>
<!--cloumn是数据库的列名,property是实体类的属性名-->
<result column = "name" property = "name"/>
<result column = "pwd" property = password/>
</resultMap> <select id = "selectUserById" resultMap = "UserMap">
select id,name,pwd from user where id = #{id}
</select>

ResultMap

自动映射

  • resultMap元素是MyBatis中最重要最强大的元素。他可以让你从90%的JDBC(ResultSets)数据提取代码中解放出来。
  • 实际上,在为一些比如链接的复杂语句编写映射代码的时候,一份resultMap能够代替实现同等功能的代码。
  • ResultMap的设计思想是,对于简单的语句根本不需要配置显式的结果映射,而对于复杂一点的语句只需要描述他们的关系就行了。

日志工厂

日志实现工具:

  • SLF4J
  • Apache Commons Logging
  • Log4j 2
  • Log4j
  • JDK logging

标准日志实现

通过在setting中设置,指定应该使用那个日志记录实现。

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

Log4j

使用步骤

1、导入log4j相关jar包

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

2、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/kuang.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、settin指定日志实现

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

分页实现

limit实现分页

# 语法
select * from table LIMIT stratIndex , pageSize
SELECT * FROM table LIMIT 5,10;//检索记录行6-15
# 为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为-1
SELECT * FROM table LIMIT 95,-1;//检索记录行96-last
# 如果只给定一个参数,它表示返回最大的记录行数目:
SELECT * FROM table LIMIT 5;//检索前5个记录行
# LIMIT n等价于 LIMIT 0,n;

起始位置 = (当前页面 - 1)* 页面大小
植入mapper

步骤

1、 修改Mapper

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

2、Mapper接口,参数为map

List<User> selectUser(Map<String,Integer> map);

3、测试

//分页查询 , 两个参数startIndex , pageSize
@Test
public void testSelectUser() {
SqlSession session = MybatisUtils.getSession();
UserMapper mapper = session.getMapper(UserMapper.class); int currentPage = 1; //第几页
int pageSize = 2; //每页显示几个
Map<String,Integer> map = new HashMap<String,Integer>();
map.put("startIndex",(currentPage-1)*pageSize);
map.put("pageSize",pageSize); List<User> users = mapper.selectUser(map); for (User user: users){
System.out.println(user);
}
}

MyBatis03——ResultMap和分页相关的更多相关文章

  1. mybatis_pagehelper_selectOne的SQL语句被莫名的增加分页相关设置,暂定解决办法

    在使用mybatis.以及其分页插件pagehelper时,原本的一个selectOne的sql语句被莫名(原因未知)的加上了分页相关,引起如下异常: exception is org.apache. ...

  2. MyBaits学习03(ResultMap和分页)

    5.ResultMap 5.1 查询为null问题 要解决的问题:属性名和字段名不一致 环境:新建一个项目,将之前的项目拷贝过来 1.数据库里的属性 2.Java中的实体类设计 public clas ...

  3. 羽夏看Linux内核——中断与分页相关入门知识

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.如有好的建议,欢迎反馈.码字不易,如果本篇文章有帮助你的,如有闲钱,可以打赏支持我的创作.如想转载,请把我的转载信息附在文章后面,并 ...

  4. Java基础——Servlet(六)分页相关

    前面写了Servlet(一)到(五),主要是在网上搜罗的视频.对分页这块还是不太清楚.于是有找到一些视频,重新学习了一下.主要是对分页的认识和设计思路.也是为了方便我以后回忆一下.. 一.分页常识 p ...

  5. cmf5分页相关

    //分页配置在app/config.php 'paginate' => [ 'type' => '\cmf\paginator\Bootstrap', 'var_page' => ' ...

  6. MySQL全面瓦解9:查询的排序、分页相关

    概述 数据库中的数据直接呈现出来一般不是我们想要的,所以我们上两节演示了如何对数据进行过滤的方法.除了对数据进行过滤, 我们可能还需要对数据进行排序,比如想从列表中了解消费最高的项,就可能需要对金额字 ...

  7. Mybatis的ResultMap与limit分页查询

    ResultMap主要解决的是:属性名和字段不一致 如果在pojo中设置的是一个名字,在数据库上又是另一个名字,那么查询出来的结果或者其他操作的结果就为null. //在pojo中 private S ...

  8. JAVA入门[10]-mybatis分页查询

    1.添加分页插件 在mybatis-generator-config.xml添加plugin节点: <plugin type="org.mybatis.generator.plugin ...

  9. JavaWeb实现分页的四种方法

    一.借助数组进行分页 原理:进行数据库查询操作时,获取到数据库中所有满足条件的记录,保存在应用的临时数组中,再通过List的subList方法,获取到满足条件的所有记录. 实现: 首先在dao层,创建 ...

  10. spring boot集成mybatis(2) - 使用pagehelper实现分页

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

随机推荐

  1. pytest框架学习-pytest_addoption钩子函数

    适用场景:一套自动化代码,多套环境. pytest_addoption 允许用户自定义注册一个命令行参数,方便用户通过命令行参数的形式给 pytest 传递不同的参数进行不同测试场景的切换. pyte ...

  2. 2023年最后一个工作日,当 hr总监找上我协商赔偿

    今天是2023年最后一个工作日,hr 总监找上我协商赔偿一事,忆往昔三年前,公司刚融资1个亿,意气风发,博主入职即为公司巅峰,高级开发岗,14薪,各种福利,加班另算加班费,业务主要服务于众多500强集 ...

  3. springboot整合mybatis步骤思路

    /** * springboot整合mybatis步骤思路 * 依赖导入 * 建表 * 实体类 * mapper配置文件 * mapper接口 * yaml配置 * properties配置数据库连接 ...

  4. 一些JavaSE学习过程中的思路整理(二)(主观性强,持续更新中...)

    目录 一些JavaSE学习过程中的思路整理(二)(主观性强,持续更新中...) 将一个子类的引用对象赋值给超类的对象(多态) 抽象方法和抽象类 简单概括以下包装器类的作用 面向接口编程时的一些细节 f ...

  5. 震惊,PostGIS还可以这样用!!!

    摘要:PostGIS为PostgreSQL提供了空间数据库分析能力,是目前业界主流的地理数据库之一,提供如下空间信息服务功能:空间对象.空间索引.空间操作函数和空间操作符等.在GaussDB 中,目前 ...

  6. React Native 打包 App 发布 iOS 及加固混淆过程

    React Native 打包 App 发布 iOS 及加固混淆过程 摘要 本文将介绍如何使用 React Native 打包并发布 iOS 应用到 App Store,并介绍了如何进行应用的加固和混 ...

  7. 如何用Xcode安装ipa

    Xcode安装ipa iOS APP上架App Store其中一个步骤就是要把ipa文件上传到App Store!​ 下面进行步骤介绍!​ 利用Appuploader这个软件,可以在Windows.L ...

  8. Spring Boot CMD 运行日志输出中文乱码

    Spring Boot 在Windows CMD 中运行,日志输出中文乱码name="CONSOLE" 设置成 charset utf-8 ,在windows cmd 中运行时,l ...

  9. Mac下Homebrew替换镜像

    替换git和homebrew镜像源 一.git加速 查找域名对应的地址 nslookup github.com nslookup github.global.ssl.fastly.Net 修改host ...

  10. 使用 Diffusers 通过 DreamBooth 来训练 Stable Diffusion.md

    邀请参与我们的 DreamBooth 微调编程马拉松活动! DreamBooth 是一种使用专门的微调形式来训练 Stable Diffusion 的新概念技术.一些人用他仅仅使用很少的他们的照片训练 ...