【Spring】初识MyBatis (二)

news2024/12/29 7:47:33

(接上一篇【Spring】[初识MyBatis(一)])

目录

      • 1.2 根据用户名模糊查询用户信息
      • 2 添加客户
      • 3 更新用户
      • 4 删除用户

1.2 根据用户名模糊查询用户信息

【示例6-2】模糊查询的实现只需要在映射文件中通过元素编写相应的SQL语句,并通过SqlSession的查询方法执行该SQL语句即可。其具体实现步骤如下。

步骤01 在映射文件UserMapper.xml中添加根据用户名模糊查询用户信息列表的SQL语句,具体实现代码如下。

根据用户名模糊查询用户信息列表

<!--  根据用户名模糊查询用户信息  -->
    <select id="findUserByName" parameterType="String" resultType="com.ssm.po.User">
        select * from t_user where username like '%${value}%'
    </select>

与根据用户编号查询相比,上述配置代码中的属性id、parameterType和SQL语句都发生了相应变化。其中,SQL语句中的“${}”用来表示拼接SQL的字符串,即不加解释地原样输出。“${value}”表示要拼接的是简单类型参数。

注意 在使用“${}”进行SOL字符串拼接时,无法防止SQL注入问题。想要既能实现模糊查询,又能防止SOL注入,可以对上述映射文件UserMapper.xml中模糊查询的select语句进行修改,使用MySQL中的concat函数进行字符串拼接。具体修改示例如下所示。

在这里插入图片描述
步骤02 在测试类MybatisTest中添加一个测试方法findUserByNameTest(),其代码如下所示。

@Test
    public void findUserByNameTest() throws Exception {
        String resourse = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resourse);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        List<User> users = sqlSession.selectList("com.ssm.mapper.UserMapper.findUserByName","g");
        //循环输出结果集
        for (User user : users) {
            System.out.println(user.toString());
        }
        sqlSession.close();
    }

在上述代码中,由于可能查询出多条数据,因此调用SqlSession的selectList()方法来查询返回结果的集合对象,并使用for循环输出结果集对象。执行findUserByNameTest ()方法后,控制台的输出结果如图所示。

请添加图片描述

使用MyBatis框架已成功查询出了用户表中用户名带有“g”的两条客户信息。至此,MyBatis入门程序的查询功能就已经讲解完了。从上面两个查询方法中可以发现,MyBatis的操作大致可分为以下几个步骤。

  • 步骤01 读取配置文件。
  • 步骤02 根据配置文件构建 SqlSessionFactory。
  • 步骤03 通过SqlSessionFactory创建SqlSession。
  • 步骤04 使用SqlSession对象操作数据库(包括查询、添加、修改、删除以及提交事务等)。
  • 步骤05 关闭SqlSession。

2 添加客户

在MyBatis的映射文件中,添加操作是通过元素来实现的。例如,向数据库中的t_user表中插入一条数据可以通过如下配置来实现。

<!-- 添加用户信息 -->
    <insert id="addUser" parameterType="com.ssm.po.User">
        insert into t_user(username, jobs, phone)values (#{username}, #{jobs},#{phone})
    </insert>

在上述配置代码中,传入的参数是一个User类型,该类型的参数对象被传递到语句中时,#{username}会查找参数对象User的username属性,#{jobs}和#{phone}也是一样的,并将其属性值传入SQL语句中。

【示例6-3】为了验证上述配置是否正确,下面编写一个测试方法来执行添加操作。

在测试类MybatisTest中添加测试方法addUserTest(),其代码如下所示。

 @Test
    public void addUserTest() throws Exception {
        String resourse = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resourse);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //创建User对象,并向对象中添加数据
        User user = new User();
        user.setUsername("tom");
        user.setJobs("worker");
        user.setPhone("17339880001");
        //执行sqlSession的插入方法,返回SQL影响的行数
        int rows = sqlSession.insert("com.ssm.mapper.UserMapper.addUser", user);
        //通过返回结果判断插入是否执行成功
        if (rows > 0) {
            System.out.println("成功添加" + rows + "条数据!");
        } else {
            System.out.println("添加数据失败!");
        }
        //提交事务
        sqlSession.commit();
        //关闭sqlSession
        sqlSession.commit();
    }

上述代码中,创建了User对象,并向User对象中添加了属性值;然后通过SqlSession对象的insert()方法执行插入操作,并通过该操作返回的数据来判断插入操作是否执行成功;最后通过SqlSession的commit()方法提交事务,并通过SqlSession.close()方法关闭了SqlSession。

运行之后结果:

请添加图片描述
查看数据库数据:

请添加图片描述

3 更新用户

MyBatis的更新操作在映射文件中是通过配置元素来实现的。如果需要更新用户数据,可以通过如下代码配置来实现。

<!-- 更新用户信息 -->
    <update id="updateUser" parameterType="com.ssm.po.User">
       update t_user set username=#{username}, jobs=#{jobs}, phone=#{phone} where id=#{id}
    </update>

与插入数据的配置相比,更新操作配置中的元素与SQL语句都发生了相应变化,但其属性名却没有变。

【示例6-4】为了验证配置是否正确,下面以6.2.2小节中新插入的数据为例进行更新用户测试。

在测试类MybatisTest中添加测试方法updateUserTest(),将id为4的用户的jobs属性值修改为“teacher”,其代码如下所示。

	@Test
    public void updateUserTest() throws Exception {
        String resourse = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resourse);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //创建User对象,并对对象中的数据进行模拟更新
        User user = new User();
        user.setId(4);
        user.setUsername("tom");
        user.setJobs("teacher");
        user.setPhone("17339880001");
        //执行sqlSession的插入方法,返回SQL影响的行数
        int rows = sqlSession.insert("com.ssm.mapper.UserMapper.updateUser", user);
        //通过返回结果判断插入是否执行成功
        if (rows > 0) {
            System.out.println("成功添加" + rows + "条数据!");
        } else {
            System.out.println("添加数据失败!");
        }
        //提交事务
        sqlSession.commit();
        //关闭sqlSession
        sqlSession.commit();
    }

与添加用户的方法相比,更新操作的代码增加了id属性值的设置,并调用SqlSession的update()方法对id为4的用户的jobs属性值进行修改。

运行之后查看数据库数据:

在这里插入图片描述

4 删除用户

删除用户之前我们多建几条用户数据,如图所示:

在这里插入图片描述
MyBatis的删除操作在映射文件中是通过配置元素来实现的。在映射文件UserMapper.xml中添加删除客户信息的SQL语句。

 <!-- 删除用户信息 -->
    <delete id="deleteUser" parameterType="Integer">
       delete from t_user where id=#{id}
    </delete>

从上述配置的SQL语句中可以看出,我们只需要传递一个id值就可以将数据表中相应的数据删除。要测试删除操作的配置十分简单,只需使用SqlSession对象的delete()方法传入需要删除数据的id值即可。

【示例6-5】在测试类MybatisTest中添加测试方法deleteUserTest(),该方法用于将id为4的用户信息删除,其代码如下所示。

   @Test
    public void deleteUserTest() throws Exception {
        String resourse = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resourse);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //执行sqlSession的删除方法,返回SQL影响的行数
        int rows = sqlSession.delete("com.ssm.mapper.UserMapper.deleteUser", 7);
        //通过返回结果判断插入是否执行成功
        if (rows > 0) {
            System.out.println("成功删除了" + rows + "条数据!");
        } else {
            System.out.println("删除数据失败!");
        }
        //提交事务
        sqlSession.commit();
        //关闭sqlSession
        sqlSession.commit();
    }

运行之后结果:

在这里插入图片描述
查看数据库数据:

在这里插入图片描述
至此,MyBatis入门程序的增、删、改、查操作学习结束。

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

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

相关文章

华为手机如何进入开发者模式?连接studio真机调试

对于安卓开发者来说&#xff0c;真机调试是非常好的选择&#xff0c;对电脑配置也没有过分的要求。如果采用Android Studio自带安卓虚拟机调试&#xff0c;真的很慢&#xff0c;一点都不友好。 真机调试的步骤&#xff1a;打开设置->关于手机->版本号&#xff0c;然后连…

并发编程12:AQS

文章目录 12.1 前置知识12.2 AQS入门级别理论知识12.2.1 是什么&#xff1f;12.2.2 AQS为什么是JUC内容中最重要的基石12.2.3 能干嘛&#xff1f;12.2.4 小总结 12.3 AQS源码分析前置知识储备12.3.1 AQS内部体系架构图12.3.2 AQS内部体系架构----AQS自身12.3.1 AQS内部体系架构…

一、H3C-NE实验-抓包实验

实验一&#xff1a;抓包实验&#xff08;PING包&#xff09; 实验拓扑结构图 1. 修改设备名称 步骤1&#xff1a;启动设备 步骤2&#xff1a;在路由器1&#xff0c;进入系统视图&#xff0c;并修改设备名称为R1 步骤3&#xff1a;在路由器2&#xff0c;进入系统视图&#xf…

【Java|基础篇】类和对象

文章目录 1. 前言2. 什么是面向对象3. 类的定义4. 类的实例化5. 对象的构造及初始化6. this引用7. 总结 1. 前言 本篇文章主要讲解了下面三个问题 类的定义和实例化构造方法this关键字 2. 什么是面向对象 众所周知面向过程和面向对象是两种重要的编程思想,而Java是属于面向…

C语言函数大全-- v 开头的函数

C语言函数大全 本篇介绍C语言函数大全-- v 开头的函数 1. va_start 1.1 函数说明 函数声明函数功能void va_start(va_list ap, last_arg);用于初始化一个 va_list 类型的变量&#xff0c;使其指向可变参数列表中的第一个参数 参数&#xff1a; ap&#xff1a; 一个指向 va_…

我的创作纪念日(个人感悟)

昨天2023年5月10日是我成为创作者的第128天纪念日&#xff0c;感谢CSDN官方的纪念信让我铭记这特殊的一天。 机缘 要说与CSDN的初次相遇&#xff0c;还是2022年的高考结束完的暑假&#xff0c;当时对于大学的学习没有什么概念&#xff0c;当初的高考志愿报的有计算机相关的专…

spring集成mybatis的原理

spring是怎样和mybatis继承的&#xff1f; 在idea里点mapper.queryOne()直接跳到了接口或xml&#xff0c;它究竟是怎样利用jdbc执行的&#xff1f; 我直接调用mapper.queryOne是怎么使用的sqlsession&#xff1f;怎么去connect的&#xff1f; mybatis是怎样根据mapper找到对应的…

【Java面试】Java并发基础(1)

文章目录 1. 可见性&#xff0c;有序性&#xff0c;原子性2. java中并发和并行3. 通常线程有哪几种使用方式? 1. 可见性&#xff0c;有序性&#xff0c;原子性 可见性&#xff08;Visibility&#xff09;&#xff1a; 指一个线程修改了共享变量的值之后&#xff0c;其他线程能…

学习网络通信必备的DNS解析和Socket通信知识

OkHttp是一个开源的网络请求框架&#xff0c;由Square公司开发。它通过封装Java底层的HttpURLConnection和Okio等库&#xff0c;提供一个简单易用的API&#xff0c;让开发人员能够方便地向服务器发送HTTP/HTTPS请求&#xff0c;支持异步请求和响应回调&#xff0c;并提供丰富的…

未来已来, 新能源与IT的技术碰撞;学习Android车载开发的必然趋势

Android工程师前景 Android车载工程师扮演着关键的角色&#xff0c;他们致力于将最新的Android技术和汽车技术相结合&#xff0c;为汽车行业提供优质的产品。随着越来越多的汽车制造商投资于智能汽车技术和车联网技术&#xff0c;Android车载工程师成为了一个越来越重要的职业…

MATLAB实现二维稳态导热

MATLAB实现二维稳态导热 一、理论基础二、代码实现 一、理论基础 步骤&#xff1a; Step.1 二维模型传热控制微分方程的确定&#xff0c;具体推导可以在任何一本传热学的书中找到。 d 2 T d x 2 d 2 T d y 2 0 \frac{d^{2}T}{dx^{2}}\frac{d^{2}T}{dy^{2}}0 dx2d2T​dy2d2T…

Ansible 自动化运维工具(一)——部署以及命令行模块

文章目录 一、 ansible 的概述1、ansible简介2.、官方网站3、ansible 的特点4、ansible的工作机制5、ansible的组成模块 二、ansible部署1、Asible的安装 三、ansible 命令行模块1、command 模块2、shell 模块3、cron 模块4、user 模块5、group 模块6、copy 模块7、file 模块8、…

【ros/ros2】ros1和ros2的区别-要点记录

dds data distribution service&#xff0c;数据分发服务 rcl ros client libraries&#xff0c;ros客户端库文件 rmw ros middle ware interface&#xff0c;ros中间件接口 lcn life cycle node&#xff0c;生命周期节点&#xff0c;受控节点 lmn lifecycle manageme…

C++二叉树递归方法存入和三种递归方法读出(前序,中序,后序)

#include <stdio.h> #include <malloc.h> typedef struct op //定义子树结构 { int data; struct op *lchild; struct op *rchild; }treestruct; treestruct *createtree() //这里这种表达形式意思是bittree类型的函数 最终要返回bitt…

【Linux】版本管理器Git

&#x1f3d6;️作者&#xff1a;malloc不出对象 ⛺专栏&#xff1a;Linux的学习之路 &#x1f466;个人简介&#xff1a;一名双非本科院校大二在读的科班编程菜鸟&#xff0c;努力编程只为赶上各位大佬的步伐&#x1f648;&#x1f648; 目录 前言一、Git是什么二、Git有什么…

开源C#代码生成器,专注.NET,Sqlserver,最简单,最干净,支持自编码的开源工具,SmartSoftHelp 开发辅助优化工具

开源C#代码生成器&#xff0c;专注.NET&#xff0c;Sqlserver&#xff0c;最简单&#xff0c;最干净&#xff0c;支持自编码的开源工具&#xff0c;SmartSoftHelp 开发辅助优化工具&#xff01; 下载地址&#xff1a;https://pan.baidu.com/s/1XLL_fLxVTw4erYZLj8-MzA?pwd888…

搭建python运行环境

安装Miniconda3 清华镜像 https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/ 下载 安装 next————agree————这俩选哪个都行&#xff0c;他选的第二个————安装路径———— 配置系统环境变量 Path miniconda3所在的路径 D:\Autils\miniconda3 Scri…

ChatGPT 最有可能取代哪些职业?

ChatGPT 的应用场景ChatGPT 最可能取代哪些职业&#xff1f;写在最后 ChatGPT 的应用场景 ChatGPT 的应用场景大体上可以归类为三大模块。 第一类是 代码相关 的任务场景。包含程序语言之间的相互转换&#xff08;如 python 转 java&#xff09;、程序命令的生成、代码 bug 的…

Gateway新一代网关

Gateway功能&#xff1a;路由 过滤 一、概述 官网地址 不使用网关存在的问题&#xff1a; 1、客户端需要记录不同微服务地址&#xff0c;增加客户端的复杂性 2、每个后台微服务都需要认证 3、http 发请求&#xff0c;涉及到跨域 4、后台新增微服务&#xff0c;不能动态知道地…

【持久层框架】mybatis-plus超详细讲解

文章目录 一、简介二、愿景三、特性四、支持数据库五、快速指南步骤1、创建数据库 mybatis_plus2、导入相应的依赖3、连接数据库4、编写代码5、小结 六、配置日志七、常用注解八、CRUD扩展Insert 插入参数说明主键生成策略分布式系统唯一id生成雪花算法主键自增 更新操作参数说…