快速提高网站流量,dnf怎么做钓鱼网站,wordpress实现阅读全文,建一个网站多少钱目录
前言#x1f36d;
一、增删查改操作
1、查
Ⅰ、mapper接口#xff1a;
Ⅱ、UserMapper.xml 查询所有用户的具体实现 SQL#xff1a;
Ⅲ、进行单元测试
2、增、删、改操作
Ⅰ、增
添加用户
添加用户并且返回自增 id
Ⅱ、改
根据id修改用户名
开启 MyBatis …目录
前言
一、增删查改操作
1、查
Ⅰ、mapper接口
Ⅱ、UserMapper.xml 查询所有用户的具体实现 SQL
Ⅲ、进行单元测试
2、增、删、改操作
Ⅰ、增
添加用户
添加用户并且返回自增 id
Ⅱ、改
根据id修改用户名
开启 MyBatis sql 日志打印
Ⅲ、删
二、在单元测试时不污染数据库 前言 ❤️❤️❤️SSM专栏更新中各位大佬觉得写得不错支持一下感谢了❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 上篇我们写了一个简单的根据id进行查询知道了如何去进行查询下面来仔细讲讲增删改查操作。
一、增删查改操作
下面操作会使用到Spring Boot单元测试可以先看
Spring Boot单元测试_spring boot 单元测试_冷兮雪的博客-CSDN博客
1、查
查询所有的用户
Ⅰ、mapper接口
package com.example.ssmdemo1.mapper;import com.example.ssmdemo1.entity.Userinfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;import java.util.List;Mapper//需要添加 Mapper 注解
public interface UserMapper {/*** 根据用户id查询用户信息* param id* return*/Userinfo getUserById(Param(id) Integer id);//查询所有的用户ListUserinfo getAll();
} Ⅱ、UserMapper.xml 查询所有用户的具体实现 SQL 使用$进行传递参数可能会SQL注入所以大部分情况下是使用#的 ?xml version1.0 encodingUTF-8?
!DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.example.ssmdemo1.mapper.UserMapperselect idgetUserById resultTypecom.example.ssmdemo1.entity.Userinfoselect * from userinfo where id${id}/selectselect idgetAll resultTypecom.example.ssmdemo1.entity.Userinfoselect * from userinfo/select
/mapperⅢ、进行单元测试 在UserMapperTest中就有了getAll的测试代码 添加单元测试业务逻辑
package com.example.ssmdemo1.mapper;import com.example.ssmdemo1.entity.Userinfo;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.List;import static org.junit.jupiter.api.Assertions.*;SpringBootTest//1、表明当前单元测试是运行在Spring Boot环境中的
class UserMapperTest {//2、注入测试对象Autowiredprivate UserMapper userMapper;Testvoid getUserById() {//3、添加单元测试的业务代码Userinfo userinfouserMapper.getUserById(1);System.out.println(userinfo);//判断1是否等于2 简单断言Assertions.assertEquals(admin,userinfo.getUsername());}Testvoid getAll() {ListUserinfo listuserMapper.getAll();Assertions.assertEquals(1,list.size());//断言判断list集合里面是否只有一条数据即查询数据库中只有一个用户}
} 测试正确 如果我们没有设置resultType则 MyBatis无法自动将查询结果映射到Java对象这就会导致单元测试失败并报错。 2、增、删、改操作
与查询操作都是一样的只是使用的标签不一样
insert标签插入语句 update标签修改语句delete标签删除语句
Ⅰ、增
添加用户
①、在接口UserMapper中声明方法 Integer add(Userinfo user);
②、UserService
public Integer getAdd(Userinfo user) {return userMapper.add(user);}
③、在xml中提供实现
insert idaddinsert into userinfo(username,password) values(#{username},#{password})
/insert #{} 进行赋值使用的是对象中的属性。 注意对应的不是数据库的字段而是程序类中的属性。 ④、controller 实现代码
RequestMapping(value /add,method RequestMethod.POST)public Integer add(RequestBody Userinfo user){return userService.getAdd(user);}
⑤、单元测试
Testvoid add() {//伪代码构建对象并设置对应的值//本来是前端传值过来Userinfo userinfonew Userinfo();userinfo.setUsername(张三);userinfo.setPassword(123456);//调用mybatis 添加方法执行添加操作int resultuserMapper.add(userinfo);Assertions.assertEquals(1,result);} 单元测试成功可以去看数据库也添加了一条数据 但是如果我们去获取这个用户的id就会报空指针异常 添加用户并且返回自增 id 如果我们想在添加用户的时候同时去获取他的id具体实现如下
①、在接口UserMapper中声明方法
Integer addGetid(Userinfo user);
②、UserService
public Integer addGetid(Userinfo user) {return userMapper.addGetid(user);}
③、在xml中提供实现 insert idaddGetid useGeneratedKeystrue keyPropertyidinsert into userinfo(username,password) values(#{username},#{password})
/insert useGeneratedKeys这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键比如像 MySQL 和 SQL Server 这样的关系型数据库管理系统的自动递增字段默认值false。keyColumn设置生成键值在表中的列名在某些数据库像 PostgreSQL中当主键列 不是表中的第⼀列的时候是必须设置的。如果⽣成列不止⼀个可以用逗号分隔多个属性 名称。 keyProperty指定能够唯⼀识别对象的属性MyBatis会使用 getGeneratedKeys 的返回值或 insert 语句的 selectKey 子元素设置它的值默认值未设置unset。如果生成列不止⼀个可以⽤逗号分隔多个属性名称。 ④、controller 实现代码 RequestMapping(value /add2, method RequestMethod.POST)public Integer add2(RequestBody Userinfo user) {userService.addGetid(user);return user.getId();} ⑤、单元测试 Testvoid addGetid() {//伪代码构建对象并设置对应的值//本来是前端传值过来Userinfo userinfonew Userinfo();userinfo.setUsername(张三);userinfo.setPassword(123456);//调用MyBatis 添加方法执行添加操作 返回受影响的行数int resultuserMapper.addGetid(userinfo);int iduserinfo.getId();//得到自增idMyBatis自动赋值System.out.println(id:id);Assertions.assertEquals(1,result);} 一样的代码就一行代码不同 Ⅱ、改
根据id修改用户名
①、在接口UserMapper中声明方法
/*** 修改用户* param userinfo* return*/Integer upUserName(Userinfo userinfo);
②、在xml中提供实现
update idupUserNameupdate userinfo set username#{username} where id#{id}
/update
③、单元测试
将之前添加的张三修改成为李四
Testvoid upUserName() {// 构建测试数据Userinfo userinfo new Userinfo();userinfo.setId(9);userinfo.setUsername(李四);int result userMapper.upUserName(userinfo);System.out.println(修改 result);Assertions.assertEquals(1, result);} 修改成功 如果我们需要在控制台看到SQL语句需要去配置文件进行配置因为这默认是隐藏MyBatic生成SQL语句的细节 开启 MyBatis sql 日志打印
①、添加配置文件
# 开启 mybatis sql 日志打印
mybatis.configuration.log-implorg.apache.ibatis.logging.stdout.StdOutImpl
logging.level.com.example.demodebug②、重新运行单元测试
Testvoid upUserName() {// 构建测试数据Userinfo userinfo new Userinfo();userinfo.setId(9);userinfo.setUsername(张三);int result userMapper.upUserName(userinfo);System.out.println(修改 result);Assertions.assertEquals(1, result);} 执行成功 结论 可以看到这个就是jdbc链接这个SQL写法也是jdbc的写法也就是说mybatis是基于jdbc的MyBatis使用了JDBC来与数据库进行交互它也简化了JDBC的使用提供了更方便的数据库访问方式。。 建议大家在开发阶段是开启SQL的打印可以更好的帮助你找到错误。 Ⅲ、删
①、在接口UserMapper中声明方法
int delById(Param(id) Integer id);
②、在xml中提供实现
delete iddelByIddelete from userinfo where id#{id}
/delete ③、单元测试
将id为9的用户删除
Testvoid delById() {int id9;int resultuserMapper.delById(id);System.out.println(删除result);Assertions.assertEquals(1,result);}
删除成功 二、在单元测试时不污染数据库
在需要的地方添加注解Transactional就可以修饰方法也可以修饰类