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

MyBatis 查询数据库之二(增、删、改、查操作)

目录

1. 配置打印 MyBatis 执行的SQL

2. 查询操作

2.1 通过用户 ID 查询用户信息、查询所有用户信息

(1) Mapper 接口

(2)UserMapper.xml 查询所有用户的具体实现 SQL

(3)进行单元测试

3. 增加操作

3.1 在 mapper(interface)里面添加增加方法的声明

3.2 在 XMl 中添加 标签和增加的 sql 代码

3.3 生成测试类

 4.修改操作

4.1 在 mapper(interface)里面添加修改方法的声明

4.2 在 XMl 中添加 标签和修改的 sql 代码

4.3 生成测试类

 5. 删除操作

5.1 在 mapper(interface)里面添加删除方法的声明

5.2 在 XMl 中添加 标签和删除的 sql 代码

5.3 生成测试类


1. 配置打印 MyBatis 执行的SQL

#mybatis 中 xml 保存路径
mybatis:mapper-locations:- classpath:mybatis/**Mapper.xmlconfiguration: # 配置打印 MyBatis 执行的 SQLlog-impl: org.apache.ibatis.logging.stdout.StdOutImpl# 配置打印 MyBatis 执行的 SQL
logging:level:com:example:demo: debug

可以看出MyBatis的底层就是JDBC,最终还是会生成JDBC的,只是MyBatis帮我们去执行了 

2. 查询操作

2.1 通过用户 ID 查询用户信息、查询所有用户信息

(1) Mapper 接口

@Mapper// 和五大类注解是一样的
public interface UserMapper {/*** 根据用户 id 查询用户信息* @param id* @return*/Userinfo getUserById(@Param("id") Integer id);/*** 查询全部* @return*/List<Userinfo> getAllUser();
}

(2)UserMapper.xml 查询所有用户的具体实现 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="com.example.ssmdemo1.mapper.UserMapper"><select id="getUserById" resultType="com.example.ssmdemo1.entity.Userinfo">select * from userinfo where id=#{id}</select><select id="getAll" resultType="com.example.ssmdemo1.entity.Userinfo">select * from userinfo</select>
</mapper>

(3)进行单元测试

 

单元测试知识点击此处

添加单元测试业务逻辑 

@SpringBootTest// 1.表明当前单元测试是运行在Spring Boot环境中的
@Transactional // 开启一个事务,执行完恢复数据
class UserMapperTest {@Autowired// 2.注入测试对象:属性注入private UserMapper userMapper;@Test
//    @Transactionalvoid getUserById() {// 3.添加单元测试的业务代码Userinfo userinfo = userMapper.getUserById(1);System.out.println(userinfo);Assertions.assertEquals("admin",userinfo.getUsername());}@Testvoid getAllUser() {List<Userinfo> list = userMapper.getAllUser();Assertions.assertEquals(1,list.size());}
}

3. 增加操作

3.1 在 mapper(interface)里面添加增加方法的声明

/*** 添加操作* @return*/int add(Userinfo userinfo);

3.2 在 XMl 中添加 标签和增加的 sql 代码

在这里我们传的是个对象,该怎么写呢?

是不是需要对象打点呢,不需要,直接去写对象的具体的属性就行了

<!--    只能得到受影响的行数--><insert id="add">insert into userinfo (username,password,createtime,updatetime)values(#{username},#{password},#{createtime},#{updatetime})</insert>

注意:insert 操作只能得到受影响的行数,所以不需要添加resultType

3.3 生成测试类

@SpringBootTest// 1.表明当前单元测试是运行在Spring Boot环境中的
@Transactional // 开启一个事务,执行完恢复数据
class UserMapperTest {@Autowired// 2.注入测试对象:属性注入private UserMapper userMapper;@Testvoid add() {// 伪代码,构建对象并设置相应的值Userinfo userinfo = new Userinfo();userinfo.setUsername("李四");userinfo.setPassword("123456");userinfo.setCreatetime(LocalDateTime.now());userinfo.setUpdatetime(LocalDateTime.now());// 调用MyBatis 添加方法执行添加操作int resule = userMapper.add(userinfo);int uid = userinfo.getId();System.out.println("user2的ID = " + uid);Assertions.assertEquals(1,resule);}

在这里我抱着试一试的想法去看能不能得到用户的id

可以看见用这个方法是拿不到的

 4.修改操作

4.1 在 mapper(interface)里面添加修改方法的声明

@Mapper
public interface UserMapper {/*** 修改用户*/int updateUserName(Userinfo userinfo);
}

4.2 在 XMl 中添加 标签和修改的 sql 代码

<!--    默认返回受影响的行数--><update id="updateUserName">update userinfo set username=#{username} where id=#{id}</update>

4.3 生成测试类

 @Testvoid updateUserName() {// 伪代码,构建测试数据Userinfo userinfo = new Userinfo();userinfo.setId(5);// 修改id为5的用户userinfo.setUsername("老五");int result = userMapper.updateUserName(userinfo);System.out.println("修改:" + result);Assertions.assertEquals(1,result);}

 5. 删除操作

5.1 在 mapper(interface)里面添加删除方法的声明

@Mapper// 和五大类注解是一样的
public interface UserMapper {/*** 删除对象*/int delByName(@Param("id") Integer id);
}

5.2 在 XMl 中添加 标签和删除的 sql 代码

<!--    默认返回受影响的行数--><delete id="delByName">delete from userinfo where id = ${id}</delete>

5.3 生成测试类

 @Testvoid delByName() {Integer id = 5;int resule = userMapper.delByName(id);System.out.println("删除:" + resule);Assertions.assertEquals(1,resule);}

http://www.lryc.cn/news/111081.html

相关文章:

  • unraid docker桥接模式打不开页面,主机模式正常
  • 第七章:进程间通信(IPC)——构成进程间通信的信道方案
  • 部分常用CSS样式
  • 思科单臂路由、lacp链路聚合、NAT实验
  • 【力扣每日一题】2023.8.5 合并两个有序链表
  • QT 驱动条码打印机(没有验证过)
  • Kafka介绍
  • Django使用uwsgi+nginx部署,admin没有样式解决办法
  • 穷举深搜暴搜回溯剪枝(3)
  • Bash 脚本的参数等
  • 从哪些方面学HTML技术? - 易智编译EaseEditing
  • 非阻塞IO
  • Debian如何让multilib和交叉编译工具链共存
  • Flink之JDBC Sink
  • lifecycleScope Unresolved reference
  • P5960 【模板】差分约束算法
  • VSCode---通过ctrl+鼠标滚动改变字体大小
  • 视频监控汇聚平台EasyCVR视频分享页面WebRTC流地址播放不了是什么原因?
  • Libevent开源库的介绍与应用
  • 【LNMP】LNMP
  • uniapp自定义头部导航栏
  • Django实现音乐网站 ⑹
  • dubbo-helloworld示例
  • 电脑ADB连接手机的方式通过网络无法adb连接手机的问题(已解决)
  • 79 | Python数据分析篇 —— Pandas中groupby聚合操作和透视表基础
  • iOS 搭建组件化私有库
  • 迅为全国产龙芯3A5000电脑运行统信UOS、银河麒麟、loongnix系统
  • 枫叶时代:打造中国特色的传统文化IP
  • 一条sql语句在mysql中如何执行(查询+更新)
  • 漫画 | TCP/IP之大明邮差