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

news2024/11/18 23:27:50

简单介绍

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

前期准备:

MyBatis核心配置文件:、

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//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;

    @Override
    public 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 mapper
        PUBLIC "-//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 {
//    使用单元测试
    @Test
    public 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 mapper
        PUBLIC "-//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>
@Test
    public 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 {
//    使用单元测试
    @Test
    public 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());
    }
    @Test
    public 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());
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/352994.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java面试题-阿里真题详解

前言 大家好&#xff0c;我是局外人一枚&#xff0c;最近有不少粉丝去阿里巴巴面试了&#xff0c;回来之后总结不少难题给我&#xff0c;以下是面试的真题&#xff0c;跟大家一起来讨论怎么回答。 阿里一面 1、说⼀下ArrayList和LinkedList区别 ⾸先&#xff0c;他们的底层数…

CSA《企业架构参考指南》实现安全、效率和运营,最佳实践指南!

企业数字化安全转型面临着信息系统架构的选择、判断和组合的困扰。对组织、技术、人才、管理和业务模型等多方面的有机融合和运转构成了架构&#xff0c;而安全是架构高效发挥的基础&#xff0c;二者都是竞争力。 国际云安全联盟CSA发布报告《企业架构参考指南》是国外大型企业…

【Windows】使用Fiddler 工具对手机进行接口监听

目录 工具下载 配置Fidder 手机端获取证书 过滤指定接口 工具下载 CSDN下载地址 其他下载地址 配置Fidder 安装后&#xff0c;打开进入如下界面 在fiddler菜单项选择Tools -> Options -> HTTPS 勾选【Decrypt HTTPS traffic 】 下拉框默认&#xff1a;【from al…

C++复习笔记11

1. vector是表示可变大小数组的序列容器。 2. 就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问&#xff0c;和数组一样高效。但是又不像数组&#xff0c;它的大小是可以动态改变的&#xff0c;而且它的大小会被…

时隔多年再学习Vuex,什么?原来如此简单!

时隔多年再学习Vuex&#xff0c;什么&#xff1f;原来如此简单! start 写 Vue 写了好多年了&#xff0c;少不了和 Vuex 打交道。虽然使用它的次数非常频繁&#xff0c;但是潜意识里总觉得这东西很难&#xff0c;导致遇到与之相关的问题就容易慌张。时至今日&#xff0c;升级版…

CDH 6.3.2 升级Hive 2.3.9

升级背景 DolphinScheduler 3.1.1安装好后&#xff0c;其源码中集成的是Hive 2.1.1&#xff0c;版本太低&#xff0c;当在数据中心连接Hive数据源时报错&#xff0c;所以升级CDH自带的Hive为2.3.9版本。 一、准备工作 1、下载hive2.3.9并解压 下载地址&#xff1a;http://a…

世界前沿3D开发工具HOOPS 2023震撼发布,核心功能再升级

HOOPS SDK简介 HOOPS SDK是全球领先开发商TechSoft 3D旗下的原生产品&#xff0c;专注于Web端、桌面端、移动端3D工程应用程序的开发。长期以来&#xff0c;HOOPS通过卓越的3D技术&#xff0c;帮助全球600多家知名客户推动3D软件创新&#xff0c;这些客户包括SolidWorks、SIEM…

springboot+vue学生考勤请假管理系统

管理员&#xff1a; 系统用户管理&#xff1a;针对系统的管理员用户&#xff0c; 系统用户的基本信息情况&#xff0c;进行管理。 教师管理&#xff1a;可以对教师权限的用户信息进行管理。并且能过实现教师信息的查看&#xff0c;密码修改等。 学生管理&#xff1a;对学生用户…

Unreal Engine06:Actor的实现

写在前面 Actor是可以放进地图的最基本类&#xff0c;这里主要是介绍一下Actor的使用。 一、空间坐标系 1. Actor的变换操作 Actor的变换变换操作主要包括四个部分&#xff1a; 位置&#xff1b;旋转&#xff1b;缩放&#xff1b; 上面三者都是对应三个轴进行变换&#xff1…

IP SAN组网配置

目录一、确认网络连接畅通二、服务器端ISCSI启动器配置1.以root身份登录2.验证是否已安装iSCSI启动器3.安装iSCSI启动器4.启动iSCSI服务5.给iSCSI启动器命名6.扫描目标器7.登录目标器8.将登录目标器行为设置为自启动三、主机多路径配置四、存储配置五、主机挂载背景&#xff1a…

ubuntu20.04配置UR机械臂的仿真环境

ubuntu20.04配置UR机械臂的仿真环境 参考链接 1. 首先安装好ROS ubuntu20.04安装Noetic版本的ros&#xff0c;具体安装可见之前写的博客 2. 配置UR机械臂仿真工具包 找一个你喜欢的地方创建ros工作空间&#xff08;也就是找个文件夹放ros的包&#xff0c;然后编译运行&…

03 路由匹配

封装了框架的 Context&#xff0c; 将请求结构 request 和返回结构 responseWriter 都封装在 Context 中。利用这个 Context&#xff0c; 我们将控制器简化为带有一个参数的函数 FooControllerHandler&#xff0c;这个控制器函数的输入和输出都是固定的。在框架层面&#xff0c…

MySQL(二)表的操作

一、创建表 CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎; 说明&#xff1a; field 表示列名 datatype 表示列的类型 character set 字符集&#xff0c;如…

如何创建你的公司的FAQ页面?

很多企业考虑为公司搭建一个“常见问题”页面&#xff0c;作为帮助客户回答关于产品和服务的常见问题的一种方式。 FAQ页面和登录/销售页面不同&#xff0c;没有展现出直接的投资回报&#xff0c;但是为团队节省了其他成本&#xff0c;据了解&#xff0c;高达67%的客户相比于跟…

STM32 - 看门狗

独立看门狗 IWDG专业时钟LSI 低功耗仍可以运行对定时的控制比较松喂狗这些时间是按照40kHz时钟给出。实际上&#xff0c;MCU内部的RC频率会在30kHz到60kHz之间变化。此外&#xff0c;即使RC振荡器的频率是精确的&#xff0c;确切的时序仍然依赖于APB接口时钟与RC振荡器时钟之间…

浅谈IDE 和代码编辑器之间有什么区别?

您希望如何完成日常编码&#xff1f;快速地&#xff1f;明显地。以既不重复也不单调的方式&#xff1f;自然。拥有您可能随时需要的所有工具。 是否会得到这一切取决于选择在哪里编写代码。您在这里的两个主要选择是代码编辑器或 IDE。两者都旨在使您的编码更容易 - 但是&…

使用 PyNeuraLogic 超越 Transformers

展示神经符号编程的力量neuro-symbolic1. 简介 在过去的几年里&#xff0c;我们看到了基于 Transformer 的模型的兴起&#xff0c;并在自然语言处理或计算机视觉等许多领域取得了成功的应用。在本文[1]中&#xff0c;我们将探索一种简洁、可解释和可扩展的方式来表达深度学习模…

捕获最小化窗口的缩略图画面

关键字&#xff1a; capture minimized window window thumbnail IsIconic 问题背景 最小化的窗口&#xff0c;API GetClientRect 返回的窗口尺寸是0x0&#xff0c;故无法通过GetDCBitBlt捕获到窗口画面。 但是 Agora/zoom/tencentMeeting 都可以拿到最小化窗口的缩略图…

Python自动化必不可少的测试框架 — pytest

Python在测试圈的应用非常广泛&#xff0c;特别是在自动化测试以及测试开发的领域&#xff0c;其中在自动化测试中我们常用的测试框架是uniitest和pytest&#xff0c;本文将带领大家搭建以及熟悉pytest的使用。 既然有unittest那么为什么还要用pytest呢&#xff1f; 这是因为…

会议论文分享-Security22-状态感知符号执行

Ferry: State-Aware Symbolic Execution for Exploring State-Dependent Program Paths1.引言2.问题陈述与分析2.1.实现状态感知符号执行的挑战2.2.真实程序的特征2.3.Ferry的模型2.3.1.程序状态的定义2.3.2.状态描述变量的特征3.Design3.1.Overview of Ferry3.2.状态描述变量识…