MyBatis03——ResultMap和分页相关
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和分页相关的更多相关文章
- mybatis_pagehelper_selectOne的SQL语句被莫名的增加分页相关设置,暂定解决办法
在使用mybatis.以及其分页插件pagehelper时,原本的一个selectOne的sql语句被莫名(原因未知)的加上了分页相关,引起如下异常: exception is org.apache. ...
- MyBaits学习03(ResultMap和分页)
5.ResultMap 5.1 查询为null问题 要解决的问题:属性名和字段名不一致 环境:新建一个项目,将之前的项目拷贝过来 1.数据库里的属性 2.Java中的实体类设计 public clas ...
- 羽夏看Linux内核——中断与分页相关入门知识
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.如有好的建议,欢迎反馈.码字不易,如果本篇文章有帮助你的,如有闲钱,可以打赏支持我的创作.如想转载,请把我的转载信息附在文章后面,并 ...
- Java基础——Servlet(六)分页相关
前面写了Servlet(一)到(五),主要是在网上搜罗的视频.对分页这块还是不太清楚.于是有找到一些视频,重新学习了一下.主要是对分页的认识和设计思路.也是为了方便我以后回忆一下.. 一.分页常识 p ...
- cmf5分页相关
//分页配置在app/config.php 'paginate' => [ 'type' => '\cmf\paginator\Bootstrap', 'var_page' => ' ...
- MySQL全面瓦解9:查询的排序、分页相关
概述 数据库中的数据直接呈现出来一般不是我们想要的,所以我们上两节演示了如何对数据进行过滤的方法.除了对数据进行过滤, 我们可能还需要对数据进行排序,比如想从列表中了解消费最高的项,就可能需要对金额字 ...
- Mybatis的ResultMap与limit分页查询
ResultMap主要解决的是:属性名和字段不一致 如果在pojo中设置的是一个名字,在数据库上又是另一个名字,那么查询出来的结果或者其他操作的结果就为null. //在pojo中 private S ...
- JAVA入门[10]-mybatis分页查询
1.添加分页插件 在mybatis-generator-config.xml添加plugin节点: <plugin type="org.mybatis.generator.plugin ...
- JavaWeb实现分页的四种方法
一.借助数组进行分页 原理:进行数据库查询操作时,获取到数据库中所有满足条件的记录,保存在应用的临时数组中,再通过List的subList方法,获取到满足条件的所有记录. 实现: 首先在dao层,创建 ...
- spring boot集成mybatis(2) - 使用pagehelper实现分页
Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...
随机推荐
- 用CloudDrive将阿里云、天翼云、115挂载为电脑本地硬盘
用CloudDrive将阿里云.天翼云.115挂载为电脑本地硬盘 写在前面 它可以把各大在线网盘,直接变成电脑本地硬盘,俗称"网盘挂载".这在一定程度上,确实能缓解存储紧张问题,瞬 ...
- CENTOS docker拉取私服镜像
概述 docker的应用越来越多,安装部署越来越方便,批量自动化的镜像生成和发布都需要docker镜像的拉取. centos6版本太老,docker的使用过程中问题较多,centos7相对简单容易. ...
- 1.elasticsearch运行
在docker中运行elasticsearch.kibana 一.MacOs 首先需要安装doceker,提供两种方式,选一种方便的就好 1.命令行安装方式 安装命令行 xcode-select -- ...
- 文心一言 VS 讯飞星火 VS chatgpt (174)-- 算法导论13.3 3题
三.用go语言,假设图13-5 和图13-6 中子α.β.γ.δ和ε的黑高都是k.给每张图中的每个结点标上黑高,以验证图中所示的转换能保持性质 5. 文心一言: 在Go语言中,你可以通过以下步骤来为图 ...
- 升级高版本springboot2.6.x:org/springframework/boot/context/properties/ConfigurationBeanFactoryMetadata
升级springboot高版本2.6.x 项目使用到了springcloud的oauth2依赖,直接升级springboot项目版本为最新 2.6.8(2022年6月16日)将会报以下错误: org/ ...
- Spring 多线程的事务处理
问题起因 Spring 的 JDBC 相关的依赖库已经提供了对 JDBC 类事务处理的统一解决方案,在正常情况下,我们只需要在需要添加事务的业务处理方法上加上 @Transactional 注解即可开 ...
- nacos系列:spring cloud使用nacos实现配置管理和服务发现
目录 版本说明 创建项目 版本说明 IDEA:2021.3 Maven:3.6.3 Jdk:17 Spring-Boot:2.6.13 Spring-Cloud:2021.0.5 Spring-Clo ...
- Git使用经验总结2-配置用户名邮箱
可以使用git config指令来配置一些设置,比如配置用户名邮箱.在开发团队要求成员配置用户名和邮箱是很有用的,可以配合工具区分成员的代码,以及将代码中的问题发送给成员的邮箱中. 查看当前Git的用 ...
- 【技术控请进】华为云DevCloud深色模式开发解读
引言 近期,华为云DevCloud推出了开发者友好的深色模式,深受开发者们的喜爱和关注.大家都知道,深色模式(Dark Mode)在iOS13 引入该特性后各大应用和网站都开始支持了深色模式.在这之前 ...
- 盘点华为云GaussDB(for Redis)六大秒级能力
摘要:盘点高斯Redis的秒级能力,包括扩容.备份.删除.启动等. 本文分享自华为云社区<华为云GaussDB(for Redis)揭秘第20期:六大秒级能力盘点>,作者: 高斯Redis ...