当前位置: 首页 > news >正文

JavaEE——MyBatis将查询结果集封装进POJO实体类

简单介绍

在之前的我们比较详细的介绍过MyBatis的配置信息的时候,在SQL映射文件中说过我们可以直接将结果集映射到我们的POJO实体类中,省去了我们自己处理查询结果集的时间和代码,接下来我们就来演示将单条数据和多条数据映射到我们POJO实体类的情况

前期准备:

MyBatis核心配置文件:、

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--    第一个修改,在这里添加自己刚才写的数据库连接配置文件的文件名--><properties resource="DatabaseConnectionProfile.properties"/><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><!--                第二个修改,将下面这些花括号里面的内容全都都加上一个mysql.的前缀--><property name="driver" value="${mysql.driver}"/><property name="url" value="${mysql.url}"/><property name="username" value="${mysql.username}"/><property name="password" value="${mysql.password}"/></dataSource></environment></environments><mappers><mapper resource="mappers/selectOne.xml"/></mappers>
</configuration>

数据表信息:

create database mybatis;
use mybatis;
create table user(id int,name varchar(20),age int,gender varchar(3)
);
insert into user values (1,'张三',12,'男'),(2,'李四',12,'女'),(3,'王五',18,'男');

 

POJO实体类:注意这个实体类是放在一个包下面的

package com.mybites.mappers;public class user {private int id;private String name;private int age;private String gender;@Overridepublic String toString() {return "course{" +"id=" + id +", name='" + name + '\'' +", age=" + age +", gender='" + gender + '\'' +'}';}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 int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public user(int id, String name, int age, String gender) {this.id = id;this.name = name;this.age = age;this.gender = gender;}public user() {}
}

SQL语句映射文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="Mappers">
<!--    根据id查询单条数据--><select id="selectOne" resultType="user" parameterType="int">select * from user where id = #{id};</select>
</mapper> 

将单条数据映射到POJO实体类:

将前期准备工作完成之后,我们就可以开始编写Java代码了,我们可以现在test下面测试我们的代码:

import com.mybatis.POJO.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;import java.io.InputStream;public class doSomething {
//    使用单元测试@Testpublic void selectOne() throws Exception{
//        以流的形式封装MyBatis核心配置文件InputStream stream = Resources.getResourceAsStream("mybatis.xml");
//        解析核心配置文件并生成SqlSessionFactory对象SqlSessionFactory build = new SqlSessionFactoryBuilder().build(stream);
//        生成持久化连接对象并操作数据库SqlSession sqlSession = build.openSession();
//        使用方法操作数据库映射文件中的SQL语句,第一个参数是SQL映射文件的唯一标识,第二个参数是拼接在SQL语句中占位符的查询参数
//        这个过程会自动将查询结果集映射到POJO实体类,所以这里的返回结果就是我们的实体类对象User u = sqlSession.selectOne("Mappers.selectOne", 2);
//        输出查询结果System.out.println(u.toString());}
}

可以看到在输出结果的阶段省去了我们自己编写查询结果集映射代码

将多条数据映射到POJO实体类:

将多条语句映射到POJO时,通过改变查询的方法和SQL映射文件即可:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="Mappers">
<!--    根据id查询单条数据--><select id="selectOne" resultType="user" parameterType="int">select * from user where id = #{id};</select>
<!--    查询所有的数据--><select id="selectAll" resultType="user">select * from user;</select>
</mapper>
@Testpublic void selectAll() throws Exception {//        以流的形式封装MyBatis核心配置文件InputStream stream = Resources.getResourceAsStream("mybatis.xml");
//        解析核心配置文件并生成SqlSessionFactory对象SqlSessionFactory build = new SqlSessionFactoryBuilder().build(stream);
//        生成持久化连接对象并操作数据库SqlSession sqlSession = build.openSession();
//        查询多条语句就是将多条结果封装金实体类之后,再将多个实体类组合成一个数组的形式
//        在查询的时候,需要遍历数组然后再得到里面的每一个元素List<User> users = sqlSession.selectList("Mappers.selectAll");for (User u : users){System.out.println(u.toString());}}

最终的目录结构和代码:

目录结构:

代码: 

import com.mybatis.POJO.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;import java.io.IOException;
import java.io.InputStream;
import java.util.List;public class doSomething {
//    使用单元测试@Testpublic void selectOne() throws Exception{
//        以流的形式封装MyBatis核心配置文件InputStream stream = Resources.getResourceAsStream("mybatis.xml");
//        解析核心配置文件并生成SqlSessionFactory对象SqlSessionFactory build = new SqlSessionFactoryBuilder().build(stream);
//        生成持久化连接对象并操作数据库SqlSession sqlSession = build.openSession();
//        使用方法操作数据库映射文件中的SQL语句,第一个参数是SQL映射文件的唯一标识,第二个参数是拼接在SQL语句中占位符的查询参数
//        这个过程会自动将查询结果集映射到POJO实体类,所以这里的返回结果就是我们的实体类对象User u = sqlSession.selectOne("Mappers.selectOne", 2);
//        输出查询结果System.out.println(u.toString());}@Testpublic void selectAll() throws Exception {//        以流的形式封装MyBatis核心配置文件InputStream stream = Resources.getResourceAsStream("mybatis.xml");
//        解析核心配置文件并生成SqlSessionFactory对象SqlSessionFactory build = new SqlSessionFactoryBuilder().build(stream);
//        生成持久化连接对象并操作数据库SqlSession sqlSession = build.openSession();
//        查询多条语句就是将多条结果封装金实体类之后,再将多个实体类组合成一个数组的形式
//        在查询的时候,需要遍历数组然后再得到里面的每一个元素List<User> users = sqlSession.selectList("Mappers.selectAll");for (User u : users){System.out.println(u.toString());}}
}

相关文章:

JavaEE——MyBatis将查询结果集封装进POJO实体类

简单介绍 在之前的我们比较详细的介绍过MyBatis的配置信息的时候&#xff0c;在SQL映射文件中说过我们可以直接将结果集映射到我们的POJO实体类中&#xff0c;省去了我们自己处理查询结果集的时间和代码&#xff0c;接下来我们就来演示将单条数据和多条数据映射到我们POJO实体…...

C++11 包装器function

文章首发公众号&#xff1a;iDoitnow C提供了多个包装器&#xff0c;它们主要是为了给其他编程接口提供更一致或更合适的接口。C11提供了多个包装器&#xff0c;这里我们重点了解一下包装器function。 对于function, C 参考手册给出的定义为&#xff1a; 类模板 std::function…...

XCP实战系列介绍14-基于Vector_Davinci工具的XCP配置介绍(三)

本文框架 1.概述2. 其他模块配置2.1 XCP初始化3. 手工代码部分3.1 周期函数添加3.2 DAQ Event调用3.3 XCP模块本身代码3.4 标定量的添加1.概述 在对XCP的配置部分介绍中我们计划分别对通讯部分配置、XCP模块本身配置及其他相关模块配置三篇进行介绍,在前两篇我们介绍了XCP配置…...

计算机图形学:中点BH算法对任意斜率的直线扫描转换方法

作者&#xff1a;非妃是公主 专栏&#xff1a;《计算机图形学》 博客地址&#xff1a;https://blog.csdn.net/myf_666 个性签&#xff1a;顺境不惰&#xff0c;逆境不馁&#xff0c;以心制境&#xff0c;万事可成。——曾国藩 文章目录专栏推荐专栏系列文章序一、问题提出二、…...

(十一)、用户中心页面【uniapp+uinicloud多用户社区博客实战项目(完整开发文档-从零到完整项目)】

1,个人中心页面 1.1 新建个人中心页面 1.2 纯净版个人中心页面代码&#xff1a; <template><view class"user"><view class"top"><view class"group"><view class"userinfo"><!-- 顶部 左侧 头像 …...

LA@复数和复矩阵@实对称阵相关定理

文章目录复数&#x1f388;复矩阵和复向量共轭矩阵性质定理实对称阵的相关定理复数&#x1f388; 复数 (数学) (wikipedia.org) 加法&#xff1a;(abi)(cdi)(ac)(bd)i)减法&#xff1a;(abi)−(cdi)(a−c)(b−d)i)乘法&#xff1a;(abi)(cdi)acbciadibdi2(ac−bd)(bcad)i除法&…...

cmd set命令笔记

使用 set是cmd最基础的命令&#xff0c;每个人都会用&#xff0c;但其实它还是有些知识的。 set 用来接收入参 set /p var请选择&#xff08;1或2或3&#xff09;: echo %var%可以接收输入的参数。 set /p var请选择&#xff08;1或2或3&#xff09;: echo %var% 语法 he…...

IB学校获得IBO授权究竟有多难?

IB 学校认证之路&#xff0c;道阻且长 The road to IB school accreditation is long and difficult一所学校能获得IB授权必须经过IBO非常严格的审核&#xff0c;在办学使命&教育理念、组织架构、师资力量&授课技能、学校硬件设施和课程体系上完全符合标准才可获得授权…...

火山引擎 DataTester:A/B 测试,让企业摆脱广告投放“乱烧钱”

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 在广告投放的场景下&#xff0c;一线广告优化师通常会创建多个计划&#xff0c;去测试不同的广告素材效果。这套方法看似科学&#xff0c;实际上却存在诸多问题&…...

黑马redis学习记录:缓存

一、介绍 什么是缓存&#xff1f; 缓存(Cache)&#xff0c;就是数据交换的缓冲区&#xff0c;俗称的缓存就是缓冲区内的数据&#xff0c;一般从数据库中获取&#xff0c;存储于本地代码 缓存无处不在 为什么要使用缓存&#xff1f; 因为速度快,好用缓存数据存储于代码中,而…...

CD20靶向药物|适应症|市场销售-上市药品前景分析

CD20是靶向治疗的第一个靶点&#xff0c;是B细胞淋巴瘤的现代治疗药物。CD20作为治疗剂的使用被认为是方便的&#xff0c;原因有二。首先&#xff0c;在 CD20 阳性肿瘤的情况下&#xff0c;这种受体大量存在于 B 淋巴细胞表面——每个细胞大约有十万个分子。其次&#xff0c;干…...

多源 复制

使复制从属服务器能够同时从多个主服务器接收事务至少需要两个主服务器和一个从属服务器设备从属服务器为每个主服务器创建一个 复制通道从属服务器必须使用基于表的资料档案库多源复制与基于文件的资料档案库不兼容不尝试检测或解决冲突如果需要此功能&#xff0c;则由应用程序…...

微服务项目【消息推送(RabbitMQ)】

创建消费者 第1步&#xff1a;基于Spring Initialzr方式创建zmall-rabbitmq消费者模块 第2步&#xff1a;在公共模块中添加rabbitmq相关依赖 <!--rabbitmq--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-bo…...

vr电力刀闸事故应急演练实训系统开发

电力事故是在电力生产和输电过程中可能发生的意外事件&#xff0c;它们可能会对人们的生命财产安全造成严重的威胁。因此&#xff0c;电力事故应急演练显得尤为重要。而VR技术则可以为电力事故应急演练提供一种全新的解决方案。 在虚拟环境中&#xff0c;元宇宙VR会模拟各种触电…...

C++类和对象补充

目录 前言&#xff1a; 1. 构造函数->初始化列表 1.1 初始化列表出现原因 1.2 初始化列表写法 2. explicit关键字 2.1 explict的出现 2.2 explict的写法 3. static成员 4. 友元 4.1 友元函数 4.2 友元类 5. 内部类和匿名对象 5.1 内部类 5.2 匿名对象 前言&a…...

08 SpringCloud 微服务网关Gateway组件

网关简介 大家都都知道在微服务架构中&#xff0c;一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢&#xff1f; 如果没有网关的存在&#xff0c;我们只能在客户端记录每个微服务的地址&#xff0c;然后分别去用。 这样的架构&#xff0c;会存…...

极验3代 加密分析

目标链接 aHR0cHM6Ly93d3cuZ2VldGVzdC5jb20vZGVtby9zbGlkZS1mbG9hdC5odG1s接口分析 极验参数重要信息 gt和challenge&#xff1b;gt是固定的&#xff0c;但是challenge每次请求会产生不同的&#xff0c;这里的请求的并没有什么加密参数。 下一个请求 gettype.php&#xff0c…...

python 数据分析可视化实战 超全 附完整代码数据

代码数据&#xff1a;https://download.csdn.net/download/qq_38735017/873799141.1 数据预处理1.1.1 异常值检测①将支付时间转为标准时间的过程中发生错误&#xff0c;经排查错误数据为‘2017/2/29’,后将其修改为‘2017/2/27’。②经检测发现部分订单应付金额与实付金额都为…...

有趣的HTML实例(十三) 咖啡选择(css+js)

一个人追求目标的路途是孤单的&#xff0c;一个人独品辛酸的时候是寂寥的&#xff0c;一个人马不停蹄的追赶着&#xff0c;狂奔着&#xff0c;相信前方是一片光明&#xff0c;我从不放弃希望&#xff0c;就像我对生活的信念&#xff0c;没有人可以动摇。 ——《北京青年》 目录…...

【力扣-LeetCode】1139. 最大的以 1 为边界的正方形 C++题解

1139. 最大的以 1 为边界的正方形难度中等137收藏分享切换为英文接收动态反馈给你一个由若干 0 和 1 组成的二维网格 grid&#xff0c;请你找出边界全部由 1 组成的最大 正方形 子网格&#xff0c;并返回该子网格中的元素数量。如果不存在&#xff0c;则返回 0。示例 1&#xf…...

ChatGPT API调用实战:从基础接入到生产环境优化指南

ChatGPT API调用实战&#xff1a;从基础接入到生产环境优化指南 作为一名开发者&#xff0c;在将ChatGPT这类强大的AI能力集成到自己应用中的过程中&#xff0c;我踩过不少坑。从最初的简单请求&#xff0c;到后来面对高并发、长对话、成本控制等生产级挑战&#xff0c;整个过…...

前端开发必备:fnm取代nvm,Node版本管理又快又稳

几乎前端都用过node版本管理工具nvm&#xff0c;但可能你没听说过fnm&#xff0c; fnm全称是 Fast Node Manager&#xff0c;就是一款用来管理电脑上 Node.js 版本的工具&#xff0c;简单说就是帮你在不同 Node 版本之间快速切换&#xff0c;解决项目依赖版本冲突的问题&#x…...

5分钟搞定多聚焦图像融合:从数据集到评价指标全流程指南

5分钟搞定多聚焦图像融合&#xff1a;从数据集到评价指标全流程指南 多聚焦图像融合技术正逐渐成为计算机视觉领域的热门研究方向。这项技术通过将多张聚焦区域不同的图像合成为一张全清晰的图像&#xff0c;解决了单次拍摄无法同时捕捉场景中所有物体清晰细节的难题。对于刚接…...

快速部署:在星图AI平台训练PETRV2-BEV模型,支持NuScenes数据集

快速部署&#xff1a;在星图AI平台训练PETRV2-BEV模型&#xff0c;支持NuScenes数据集 1. 环境准备与快速部署 1.1 激活Paddle3D环境 首先需要确保已经创建并激活了Paddle3D的conda环境&#xff1a; conda activate paddle3d_env如果尚未创建该环境&#xff0c;建议先安装M…...

JavaScript代码保护实战:用javascript-obfuscator给你的前端穿上防弹衣

JavaScript代码保护实战&#xff1a;用javascript-obfuscator打造坚不可摧的前端防线 1. 为什么前端代码需要保护&#xff1f; 记得去年参与一个电商项目时&#xff0c;团队花三个月开发的核心促销算法&#xff0c;上线一周就被竞争对手完整"借鉴"。检查发现对方直…...

ChatTTS离线部署实战:从模型优化到生产环境效率提升

最近在做一个需要离线语音合成的项目&#xff0c;用到了ChatTTS这个效果不错的模型。但直接部署原版模型时&#xff0c;遇到了不少头疼的问题&#xff1a;推理速度慢、内存占用高&#xff0c;在资源受限的生产环境里简直是“吞金兽”。经过一番折腾&#xff0c;总算摸索出一套从…...

深入解析UniApp中的package.json:从基础配置到高级技巧

1. 初识UniApp中的package.json 第一次接触UniApp项目时&#xff0c;我盯着package.json文件看了半天&#xff0c;心想这不就是个管理npm包依赖的配置文件吗&#xff1f;直到踩了几个坑才发现&#xff0c;UniApp对这个文件做了特殊扩展&#xff0c;让它成为了项目配置的中枢神经…...

GME多模态向量模型助力AI编程:代码与注释的跨模态理解工具

GME多模态向量模型助力AI编程&#xff1a;代码与注释的跨模态理解工具 1. 引言&#xff1a;当代码能听懂人话 你有没有过这样的经历&#xff1f;面对一个庞大的代码库&#xff0c;想找一个实现特定功能的函数&#xff0c;却记不清它的名字&#xff0c;只能靠模糊的记忆在文件…...

OpenClaw插件开发入门:为Qwen3-32B镜像编写天气查询技能

OpenClaw插件开发入门&#xff1a;为Qwen3-32B镜像编写天气查询技能 1. 为什么需要自定义技能&#xff1f; 去年冬天&#xff0c;我经常需要同时查看多个城市的天气来规划差旅行程。每次手动打开天气网站、输入城市名、对比数据的过程让我不胜其烦。直到我发现OpenClaw可以通…...

基于CosyVoice与Docker的语音处理系统实战:从部署到性能优化

最近在做一个语音处理相关的项目&#xff0c;遇到了一个挺典型的问题&#xff1a;模型推理服务部署起来总是很“重”&#xff0c;资源占用高&#xff0c;启动慢&#xff0c;扩展也不灵活。经过一番折腾&#xff0c;最终用 CosyVoice 和 Docker 这套组合拳解决了问题&#xff0c…...