iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MyBatis 单表的增删改查
  • 912
分享到

MyBatis 单表的增删改查

mybatisjavamysql 2023-08-17 10:08:22 912人浏览 泡泡鱼
摘要

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:

在这里插入图片描述

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:SSM 框架从入门到精通
✨特色专栏:国学周更-心性养成之路
🥭本文内容:mybatis 单表的增删改查

在这里插入图片描述

  通过上一篇文章的学习可了解到,MyBatis 可以方便的对数据库进行操作,而数据库表可能是一个相对独立的表(这里谓之单表),也可能两个或多个有密切联系的表(这里谓之多表),本文先来学习单表的增删改查操作,下一篇文章我们再来学习多表关联查询。

  先来认识一下 sqlSession 的若干方法,这些方法被用来执行定义在 mapper 映射文件中的 SELECTINSERTUPDATEDELETE 语句。以下是一些常用的方法。

  • T selectOne(String statement, Object parameter) 查询单条记录
  • List selectList(String statement, Object parameter) 查询记录集合
  • Map selectMap(String statement, Object parameter, String mapKey) 查询记录封装成 Map 集合
  • int insert(String statement, Object parameter) 插入一条记录
  • int update(String statement, Object parameter) 修改一条记录
  • int delete(String statement, Object parameter) 删除一条记录

  上述方法中的第一个参数 statement 通常使用 namespace + id字符串namespace 定位到唯一的 mapper 映射文件,id 定位到这个 mapper 映射文件指定的 SQL 语句。

  第二个参数可以是原生类型(自动装箱或包装类)、JavaBeanPOLOMap,用于限定查询条件等。

  其中 selectOneselectList 的不同之处是 selectOne 必须返回一个对象,如果有多个对象,或者没有返回(或返回了 null),那么就会抛出异常。如果不确定返回了多少对象,就使用 selectList

以上方法可以重载,第二个参数不是必要的,重载方法如下。

  • T selectOne(String statement)
  • List selectList(String statement)
  • Map selectMap(String statement, String mapKey)
  • int insert(String statement)
  • int update(String statement)
  • int delete(String statement)

结果映射 ResultMap

  所谓结果映射就是让数据表的字段名称(即列名)与 Java 实体类的属性名称一一进行关联匹配的一种机制,以便 MyBatis 查完数据库后能将关系型查询结果正确地封装为 Java 对象。如果数据库的字段名称跟相应的类的属性名称不一样,不作处理的话,mybatis 运行后相应的字段处的查询结果就为空。

  在映射文件 UserMapper.xml 中,如果 SQL 查询语句使用别名了,则 select * from user

  然后运行 UserMapperTest.java 测试类中的 testList 方法:

    @Test    public void testList() {        SqlSession sqlSession = factory.openSession(true);        UserMapper mapper = sqlSession.getMapper(UserMapper.class);        List list = mapper.list();        for (User user : list) {            System.out.println("user = " + user);        }    }

  运行结果如下:

在这里插入图片描述
  可以发现查出来的数据为 null,这是因为数据表 user 的字段与对象 User 的属性名称不一致造成的。数据库查出来的数据无法封装到对应的对象属性中去。

解决办法有两个:

  • 方法一:在 SQL 语句中使用别名,让查询结果字段与对象属性一致
  • 方法二:利用结果映射 ResultMap

  在 UserMapper.xml 中配置结果映射 ResultMap,代码如下:

                                                select * from user where u_id=#{id}    

  其中,parameterType=“int” 表示参数的类型为整型,也可省略不用,MyBatis 会自动识别传进来的参数类型。此外仍然使用结果映射 resultMap

   select * from user where u_name like '%' #{userName} '%'

  【3】在测试类 UserMapperTest.java 中添加 testFindUserByName 方法,代码如下:

    @Test    public void testFindUserByName(){        SqlSession sqlSession = factory.openSession(true);        List list = sqlSession.selectList("cn.kgc.mybatis.mapper.UserMapper.findUserByName", "张");        for (User user : list) {            System.out.println("user = " + user);        }    }

  运行效果如下:

在这里插入图片描述

动态查询

  在大家熟悉的网购中,筛选商品是一个非常重要的功能。筛选条件有很多,每个人选的条件都不一样,这里就用到了动态查询。前台页面把某个用户的筛选条件传到后台服务器,后台服务器根据筛选条件动态生成 SQL 语句,再从数据库中查找到合适商品。

  动态 SQL 多用于解决查询条件不确定的情况,在程序运行期间,根据运行期间,根据用户提交的多种可能的查询条件进行查询,提交的查询条件不同,动态生成和执行的 SQL 语句也不同。动态 SQL 通过 MyBatis 提供的各种标签对条件做出判断以实现动态拼接 SQL 语句。

  常用的动态 SQL 标签有 等。

  映射文件 UserMapper.xml 中定义映射规则,代码如下:

                                            

 if 标签

  对于该标签的执行,当 test 的值为 true 时,会将其包含的 SQL 片段拼接到其所在的 SQL 语句中。

实现步骤:

  【1】在接口 UserMapper.java 中 添加方法 selectUserIf 如下:

List selectUserIf(@Param("userName") String userName, @Param("state") int state);

  【2】在映射文件 UserMapper.xml 中添加一条 select 语句,代码如下:

            select * from user                                    and u_name like '%' #{userName} '%'                                        and u_state=#{state}                        

  【3】在测试类 UserMapperTest.java 中添加 testSelectUserIf 方法,代码如下:

    @Test    public void testSelectUserWhere() {        SqlSession sqlSession = factory.openSession(true);        UserMapper mapper = sqlSession.getMapper(UserMapper.class);        List users = mapper.selectUserIf("张", 1);        for (User user : users) {            System.out.println("user = " + user);        }    }

  查询姓名中含有“张”字,并且 state 状态为1的记录,结果如下:

在这里插入图片描述

 set 标签

  标签用于更新操作的 update 语句中

实现步骤:

  【1】在接口 UserMapper.java 中 添加方法 updateUserSet 如下:

Integer updateUserSet(User user);

  【2】在映射文件 UserMapper.xml 中添加一条 **update ** 语句,代码如下:

            update user                                    u_name = #{userName}                                        ,u_password=#{password}                                        ,u_state = #{state}                            where u_id = #{id}    

  【3】在测试类 UserMapperTest.java 中添加 testUpdateUserSet 方法,代码如下:

    @Test    public void testUpdateUserSet() {        SqlSession sqlSession = factory.openSession(true);        UserMapper mapper = sqlSession.getMapper(UserMapper.class);        User user = new User();        user.setPassword("888888");        user.setState(1);        user.setUserName("李清照");        user.setId(2);        Integer integer = mapper.updateUserSet(user);        System.out.println("line = " + integer);    }

  运行效果:

在这里插入图片描述
在这里插入图片描述

 trim 标签

  trim标记是一个格式化的标记,可以完成set或者是where标记的功能

  用 trim 改写上面的 if+where 语句

            select * from user                                    and u_name like '%' #{userName} '%'                                        and u_state=#{state}                        

  【3】在测试类 UserMapperTest.java 中添加 testUpdateUserSet 方法,代码如下:

    @Test    public void testSearchUsersMap() {        SqlSession sqlSession = factory.openSession(true);        UserMapper mapper = sqlSession.getMapper(UserMapper.class);        HashMap map = new HashMap<>();        map.put("userName", "张");        map.put("state", 1);        List users = mapper.searchUsersMap(map);        for (User user : users) {            System.out.println("user = " + user);        }    }

  运行效果:

在这里插入图片描述

 choose 标签

  该标签里面包含 <when/> <otherwise/> 两个子标签,可以包含多个 <when/> 与一个 <otherwise/>。它们联合使用,完成类似 Java 中的开关语句 switch…case 功能。

实现步骤:

  【1】在接口 UserMapper.java 中 添加方法 searchUsersMap 如下:

List searchUsersChoose(User user);

  【2】在映射文件 UserMapper.xml 中添加一条 select 语句,代码如下:

        select * from user                                

  注意:

  • ①、最好基于 单表来定义 sql 片段,提高片段的可重用性
  • ②、在 sql 片段中最好不要包括 where

mybatis分页插件

    com.GitHub.pagehelper    pagehelper    5.2.1

实例

 // 测试分页插件的使用    @Test    public void  test06(){        SqlSession session = factory.openSession(true);        StudentDao mapper = session.getMapper(StudentDao.class);        PageHelper.startPage(5, 3);        List all = mapper.findAll();        PageInfo pageInfo = new PageInfo<>(all);        //获取分页的相关数据        System.out.println(pageInfo);        //获取总条数        long total = pageInfo.getTotal();        System.out.println(total);        //获取当前页的显示数据        List list = pageInfo.getList();        list.forEach(student-> System.out.println(student));    }

getMapper 面向接口编程

  之前我们自定义 Dao 层接口实现类时发现一个问题:Dao 层的实现类其实并没有干什么实质性的工作,它仅仅就是通过 SqlSession 的相关 API 定位到映射文件 mapper 中相应 idSQL 语句,真正对数据进行操作的工作其实是由框架通过映射文件 mapper 中的 SQL 完成的。

  那么,MyBatis 框架可以抛开 Dao 的实现类,直接定位到映射文件 mapper 中的相应 SQL 语句,对数据库进行操作吗?答案是肯定的。可以通过Mapper的动态代理方式实现

实现步骤如下图目录结构所示:

在这里插入图片描述

  • 注意:
    • 确保映射文件 UserMapper.xmlnamespace 与接口类的全路径名称一致;
    • resources 中创建目录时,注意目录间用 / 分割,如创建 cn.kgc.mybatis04.mapper ,创建 Directory 时,写法为:cn/kgc/mybatis04/mapper,这样就可以准确创建目录结构。

多参数查询

  上面的案例中要传多个参数,把这些参数都巧妙的封装成一个对象或一个 Map,表面上还是一个参数。有时想直接传递多个参数,而不想封装,如何实现?

实现步骤:

  【1】在接口 UserMapper.java 中 添加方法 selectUserWhere 如下:

List selectUserWhere(@Param("userName") String userName, @Param("state") int state);

  这里用到了 @Param 注解。映射文件的 SQL 语句中的输入参数应与注解里面的参数一致。

  【2】在映射文件 UserMapper.xml 中添加一条 select 语句,代码如下:

    

  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

在这里插入图片描述

来源地址:https://blog.csdn.net/hh867308122/article/details/128942275

您可能感兴趣的文档:

--结束END--

本文标题: MyBatis 单表的增删改查

本文链接: https://www.lsjlt.com/news/372636.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MyBatis 单表的增删改查
    ✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:...
    99+
    2023-08-17
    mybatis java mysql
  • mybatis之增删改查
    目录jar包需要三个 连接数据库的以及mybatis的jar包下面创建数据库 复制到一個文档里面导入数据库即可mybatisUtils文件mybatis.xml配置文件Parking...
    99+
    2024-04-02
  • Mybatis基于xml配置实现单表的增删改查功能
    Mybatis入门-基于配置实现单表的增删改查 Mybatis简介 官网链接:https://mybatis.org/mybatis-3/zh/index.html。更加详细的信息可...
    99+
    2024-04-02
  • Mybatis实现增删改查
    目录一.mybatis的配置1.1 添加相应的jar包1.2 配置mybatis.xml文件1.3 创建数据库1.4 创建实体类1.5 创建接口实现的方法1.6 配置UserMapp...
    99+
    2024-04-02
  • MyBatis增、删、改、查(多表查询)操作详解
    MyBatis增、删、改、查操作 1. 增加用户操作(insert标签),返回受影响的行数.1.1 返回自增id 2. 修改用户操作(update)3. 删除用户操作(delete)4. ...
    99+
    2023-09-24
    mybatis mysql spring 数据库 spring boot
  • SpringBoot整合Mybatis简单实现增删改查
    目录前言第一:创建MySQL数据库第二:创建SpringBoot项目,引入需要的依赖包第三:创建程序目录和配置核心application.xml文件第四:依次编写Entity、Dao...
    99+
    2024-04-02
  • MySQL 表的增删改查
    MySQL 表的 CURD 什么是 CURD一、增加数据1. insert into 语句2. insert 语句注意事项 二、查询数据1. 全列查找2. 指定列查找3. 指定列查询为表达...
    99+
    2023-10-18
    数据库 mysql
  • 【数据结构】—— 单链表的增删改查
    ❤️一名热爱Java的大一学生,希望与各位大佬共同学习进步❤️ 🧑个人主页:@周小末天天开心 各位大佬的点赞👍 收藏⭐ 关注✅,是本人学习的最大动力 感谢! 📕该篇文章收录专栏—...
    99+
    2023-09-04
    java 开发语言 数据结构
  • Mybatis(二):实现“增删改查”
    Mybatis(二):实现“增删改查” 前言一、MyBatis的增删改查1、添加2、修改3、删除4、查询4.1 查询一个实体4.1 查询集合 二、MyBatis获取参数值的两种方式(...
    99+
    2023-10-08
    mybatis java 数据库
  • pyhon 列表的增删改查
      li = ['alex', 'wusir', 'egon', '女神', 'taibai'] l1 = li[2] print(l1) #增加 append() 增加到最后 insert(index, name)插入到哪里...
    99+
    2023-01-31
    列表 pyhon
  • MySQL表的增删查改(CRUD)
    文章目录 前言一、新增数据二、查询数据全列查询指定列查询表达式查询指定别名查询去重查询排序查询条件查询分页查询 三、修改数据四、删除数据 前言 CRUD代表: 增加(create) ,查询(retrieve) ,更新(up...
    99+
    2023-08-22
    mysql 数据库 sql
  • MySQL表的增删改查(CRUD)
    目录一. CRUD二. 新增(Create)如何修改mysql配置:三. 查询(Retrieve)1. 全列查询2. 指定列查询3. 查询带有表达式 4. 起别名查询5. 去重查询6. 排序查询 7....
    99+
    2023-03-22
    数据库对表的增删改查语句 sql语句的增删改查
  • list 列表的增删改查
     基本数据类型有数字、字符,布尔。然后数据类型还有其他的,比如集合类型中的list类型,集合,集合顾名思义,不是放一个东东,里面能放很多个东东,所以叫集合嘛。比如:n = [1,2,3,4,5,6]  变量n就是一个list类型,这个类型...
    99+
    2023-01-30
    列表 list
  • python3 列表的增删改查
    list 增、删、改、查回顾  索引、切片、步长li = ['alex', 123, True, (1, 2, 3, 'wusir'), [1, 2, 3, '小明',], {'name':'alex'}] #li中元素索引号为li = [...
    99+
    2023-01-31
    列表
  • [MySQL] 表的增删查改(CURD)
      专栏简介 :MySql数据库从入门到进阶. 题目来源:leetcode,牛客,剑指offer. 创作目标:记录学习MySql学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表...
    99+
    2023-09-20
    mysql 数据库
  • MySQl表的增删查改(CRUD)
    新增 1.单行插入        insert into 表名 values (值,值...);                            指定列插入    insert into 表名 (列名,列名...) value...
    99+
    2023-09-04
    mysql 数据库
  • Mybatis如何实现增删改查
    这篇文章主要介绍了Mybatis如何实现增删改查,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Mybatis实现增删改查一.mybatis的配置1.1 添加相应的jar包在l...
    99+
    2023-06-26
  • Java如何实现单链表的增删改查
    一、新建学生节点类 Stu_Node节点包含: 学号:int num; 姓名:String name; 性别:String gender; 下一个节点:Stu_Node next;...
    99+
    2024-04-02
  • SpringBoot整合MyBatis实现增删改查(简单,详细)
    新建springboot工程 若选择https://start.spring.io下一步失败 则选择Custom,输入:https://start.aliyun.com后下一步 添加需要的依赖 添加其他依赖,全部依赖如下: ...
    99+
    2023-08-19
    mybatis spring boot 数据库 mysql
  • python 列表(增删改查)
            列表 :(列表可以嵌套,列表的中的元素可以为任意) 列表的创建:1.   a = [1, 2, 3]        2.   a = list([1, 2, 3]) 1.查: 索引(下标),都是从0开始 切片 .coun...
    99+
    2023-01-30
    列表 python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作