Mabatis(CRUD)

news2024/12/26 21:28:01

Mybatis

CRUD(数据和配置使用Mybatis快速入门)

select标签

选择,查询语句:

<select id="getUserById" resultType="com.louis.pojo.User" parameterType="int"></select>

id:就是对应namespace中的方法名(就相当于重写了原来的方法)
resultType:sql语句执行的返回值
parameterType:表示参数类型,和传入的参数有关
namesepace中的包名要和Dao/mapper接口的包名一致。

UserDao接口

//根据id查询用户
User getUserById(Integer id);

UserMapper.xml

<select id="getUserById" resultType="com.louis.pojo.User" parameterType="int">
    select * from mybatis.user where id = #{id};
</select>

测试类

@Test
public void testUserById(){
    SqlSession sqlSession = MybatisUtils.getsqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    System.out.println(mapper.getUserById(1));
    sqlSession.close();
}

insert标签

UserDao接口

//insert一个用户
int addUser(User user);

UserMapper.xml

<!--对象中的属性可以直接取到-->
<insert id="addUser" parameterType="com.louis.pojo.User" >
    insert into mybatis.user (id, name, pwd) values (#{id}, #{name}, #{pwd});
</insert>

测试类

@Test
public void addUser(){
    SqlSession sqlSession = MybatisUtils.getsqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    mapper.addUser(new User(4, "DC", "12wa"));
    sqlSession.close();
}

通过上述方法我们可以执行成功,但在数据库中并没有插入相关的数据,这是事务导致。

在这里插入图片描述

解决方法

@Test
public void addUser(){
    SqlSession sqlSession = MybatisUtils.getsqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    int dc = mapper.addUser(new User(4, "DC", "12wa"));
    //解决数据库中未插入的情况,增删改需要提交事务
    if(dc > 0){
        System.out.println("插入成功");
        //提交
        sqlSession.commit();
    }
    sqlSession.close();
}

在这里插入图片描述

update标签

UserDao接口

//修改用户
int updateUser(User user);

UserMapper.xml

<update id="updateUser" parameterType="com.louis.pojo.User">
    update mybatis.user set name = #{name}, pwd = #{pwd} where id = #{id};
</update>

测试类

@Test
public void updateUser(){
    SqlSession sqlSession = MybatisUtils.getsqlSession();
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    int i = userMapper.updateUser(new User(3, "微微", "Lzh"));
    if(i > 0){
        sqlSession.commit();
    }
    sqlSession.close();
}

在这里插入图片描述

delete标签

UserDao接口

//删除用户
int deleteUser(int id);

UserMapper.xml

<delete id="deleteUser" parameterType="int">
    delete from mybatis.user where id = #{id};
</delete>

测试

@Test
public void deleteUser(){
    SqlSession sqlSession = MybatisUtils.getsqlSession();
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    int result = userMapper.deleteUser(4);
    if(result > 0){
        sqlSession.commit();
    }
    sqlSession.close();
}

在这里插入图片描述

增删改在没有设置自动提交的时候需要手动提交事务。

Map

假设我们的实体类或者数据库中的表字段或者参数过多,我们应当考虑使用map。
Map传递参数:直接在sql中取出key即可(parameterType=“map”)
对象传递参数:直接在sql中取对象的属性即可(parameterType=“com.louis.pojo.User”)
只有一个基本类型参数的情况下,可以直接在sql中取到。多个参数用Map,或者注解。

Map示例

UserDao接口

//Map
int addUser2(Map<String, Object> map);

UserMapper.xml

<insert id="addUser2" parameterType="map">
    insert into mybatis.user (id, name, pwd) values (#{userId}, #{userName}, #{password});
</insert>

测试类

@Test
public void addUser2(){
    SqlSession sqlSession = MybatisUtils.getsqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    Map<String, Object> map = new HashMap<>();
    map.put("userId", 5);
    map.put("userName", "咕噜咕噜");
    map.put("password", "xzz");
    int result = mapper.addUser2(map);
    if(result > 0){
        sqlSession.commit();
    }
    sqlSession.close();
}

在这里插入图片描述

模糊查询

UserDao接口

//模糊查询
List<User> selectUserLike(String value);

UserMapper.xml

<select id="selectUserLike">
    select * from mybatis.user where name like #{value};
</select>

测试类

@Test
public void selectUserLike(){
    SqlSession sqlSession = MybatisUtils.getsqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    List<User> users = mapper.selectUserLike("%微%");
    for (User user : users) {
        System.out.println(user);
    }
    sqlSession.close();
}

在这里插入图片描述

在这里插入图片描述

上面使用的方法存在sql注入的情况,优化如下:

UserMapper.xml

<select id="selectUserLike">
    select * from mybatis.user where name like "%" #{value}"%";
</select>

测试类

@Test
public void selectUserLike(){
    SqlSession sqlSession = MybatisUtils.getsqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    List<User> users = mapper.selectUserLike("微");
    for (User user : users) {
        System.out.println(user);
    }
    sqlSession.close();
}

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

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

相关文章

记录::windows11安装子系统ubuntu18.04+cuda

https://learn.microsoft.com/zh-cn/windows/wsl/install-manual https://zhuanlan.zhihu.com/p/436441212 目录 1、开启开发者模式 2、开启子系统 3、下载ubuntu 4、安装ubuntu 5、安装cuda 6、安装cudnn 7、安装桌面 2、桌面 3、Xfces&#xff08;前面2和这个二选一…

不需要数据线传输如何共享笔记软件内容?

在生活和工作中&#xff0c;手机电脑共享数据的情况非常多&#xff0c;比如“共享笔记内容”。每当遇到这种情况&#xff0c;很多人都会使用数据线或借助第三方社交平台&#xff0c;把信息或文件传输过去。不过&#xff0c;这两种方法一个安全性不能保障&#xff0c;尤其是使用…

如何基于Nilearn绘制绘制脑网络图(一)?绘制功能连接、结构连接可视化

结果图 Nilearn Nilearn是一个Python库,用于神经影像分析。它提供了处理和分析功能性和结构性脑成像数据的工具。Nilearn提供了多种预处理函数、机器学习算法应用、统计分析和结果可视化的功能。在神经影像研究领域,Nilearn常用于分析功能性磁共振成像(fMRI)等技术的数据。…

Kubernetes1.21部署apisix网关

1、安装nfs-subdir-external-provisioner helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner -f values.yaml -n default docker pull k8s.gcr.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2 下载…

本地生活服务平台加盟

本地生活服务平台加盟是一种让创业者可以成为品牌合作伙伴&#xff0c;开展本地生活服务业务的方式。通常&#xff0c;加盟商需要缴纳一定的加盟费用&#xff0c;获得品牌授权和支持&#xff0c;并承担一定的经营风险。 加盟本地生活服务平台可以让创业者在品牌知名度和运营…

机器人开发--Cartographer详细介绍

机器人开发--Cartographer详细介绍 1 介绍1.1 概述1.2 评价1.3 特点 2 框架官方 3 代码结构heimazaifei 解读linyicheng 解读Xiaotu 解读cartographer_ros地图构建器map_builderLocal SLAMGlobal SLAM 赵锴 解读地图设计匹配方法一阶段解算二阶段解算后端如何检测回环检测回环后…

数学建模算法(基于matlab和python)之 Lagrange插值、Newton插值(1/10)

实验目的及要求&#xff1a; 1、了解多项式插值公式的存在唯一性条件及其余项表达式的推导。 2、了解拉格朗日插值多项式的构造、计算及其基函数的特点&#xff0c;牛顿插值多项式的构造与应用&#xff0c;差商、差分的计算及基本性质。 实验内容&#xff1a; 1、编写Lagrange插…

服务 第六章

目录 1.基于域名的跳转 2.基于客户端 IP 访问跳转 3. 基于旧域名跳转到新域名后面加目录 4.基于参数匹配的跳转 5.基于目录下所有 php 结尾的文件跳转 6.基于最普通一条 url 请求的跳转 7.总结 1.基于域名的跳转 2.基于客户端 IP 访问跳转 3. 基于旧域名跳转到新域名后面加目…

ESP32设备驱动-74HC595驱动7段数码管

74HC595驱动7段数码管 文章目录 74HC595驱动7段数码管1、74HC595介绍2、硬件准备3、软件准备4、驱动实现所有微控制器都有特定数量的 IO 引脚,但在某些应用中,例如在 7 段显示器中,我们需要的 GPIO 引脚数量超过我们的控制器所能提供的数量。 对于这种需要多个输出引脚但微控…

深入分析动态链接的延迟绑定

关于程序运行的系列文章 ELF文件结构和实战分析 深入分析动态链接的延迟绑定 文章目录 为什么使用动态链接库&#xff1f;静态链接的问题&#xff1a;动态链接库 动态共享库是怎样存在于内存中的&#xff1f;动态链接 原理简析代码示例dynsymGOT.rela.dyn 和 .rela.pltPLT使用…

【云原生】一文学会Dockerfile所有常用命令

Docker file的作用方便管理员来根据需求来进行构建镜像&#xff0c;前面学习过commit来将一个容器打包成镜像&#xff0c;但是Docker 并不建议用户通过commit方式构建镜像。 原因如下&#xff1a; 1. 这是一种手工创建镜像的方式&#xff0c;容易出错&#xff0c;效率低且可重…

三、角色管理前端

云尚办公系统&#xff1a;角色管理前端 B站直达【为尚硅谷点赞】: https://www.bilibili.com/video/BV1Ya411S7aT 本博文以课程相关为主发布&#xff0c;并且融入了自己的一些看法以及对学习过程中遇见的问题给出相关的解决方法。一起学习一起进步&#xff01;&#xff01;&am…

锁相环PLL原理及matlab代码

补偿相干系统中的激光器相位噪声。 根据Wiener process的性质&#xff0c;离得越近的符号相位噪声在概率统计上越相似&#xff0c;因此&#xff0c;可以用上一个符号估计得到的相位当做当前这个符号的初始相位&#xff0c;再通过判决来估计当前符号的准确相位&#xff0c;这就是…

OJ刷题 第十七篇

34005 - 汽水瓶 时间限制 : 1 秒 内存限制 : 128 MB 有这样一道智力题&#xff1a;“某商店规定&#xff1a;三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶&#xff0c;她最多可以换多少瓶汽水喝&#xff1f;”答案是5瓶&#xff0c;方法如下&#xff1a;先用9个空瓶…

寻找失落的数字:让有序数组完美覆盖的最小区间范围

本篇博客会讲解力扣“228. 汇总区间”的解题思路&#xff0c;这是题目链接。 解题思路&#xff1a;使用left和right来维护有序区间的左右端点。一开始&#xff0c;left和right都初始化为0。注意&#xff0c;不能把right初始化成1&#xff0c;因为当数组只有1个元素时&#xff0…

MySQL 高可用配置及故障切换

MySQL 高可用配置及故障切换 一、MHA1.1 什么是 MHA1.2 MHA 的组成1.3 MHA 的特点1.4 MHA工作原理 二、搭建 MySQL MHA2.1 实验思路2.2 部署过程2.3 环境准备2.4 搭建MHA 一、MHA 1.1 什么是 MHA 1、MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的MySQL高可…

Redis基础认识

日升时奋斗&#xff0c;日落时自省 目录 1、Redis安装及配置 2、缓存简介 2.1、缓存优点 2.2、缓存分类 2.3、常见缓存使用 2.3.1、Spring Cache 2.3.2、Redis 3、Redis数据类型和使用 3.1、字符串类型 3.2、哈希类型 3.3、列表类型 3.4、集合类型 3.5、有序集合类…

华为举办5G商业对话沙龙,携手运营商共促5G产业再升级

【中国&#xff0c;上海&#xff0c;2023年06月27日】在2023 MWC 上海期间&#xff0c;华为举办“5G商业对话沙龙”&#xff0c;旨在面向国内外运营商&#xff0c;搭建产业深度交流和求策问计的对话平台&#xff0c;共同促进5G产业再升级。会议期间&#xff0c;与会嘉宾达成一致…

回收站数据恢复方法 回收站清空如何恢复数据

在日常使用计算机时&#xff0c;我们经常会不小心删除文件或者清空回收站&#xff0c;导致重要的数据似乎丢失。然而&#xff0c;在某些情况下&#xff0c;我们仍然有可能通过一些回收站数据恢复方法来找回已经被清空的回收站中的数据。今天我们一起来了解一下回收站数据恢复方…

HadoopHA搭建

主机设置 三台主机关闭防火墙 三台主机关闭SeLinux安全机制 给每台主机修改主机名 配置三台主机地址映射 设置免密登录 安装JDK 解压安装 配置jdk的环境变量 测试安装成功 分发JDK 分发配置文件 ZooKeeper配置 解压安装 添加ZK环境变量 分发文件 启动 安…