这篇写的草率了,是好几天前学到,以后用来自己复习

UserInfo
- import lombok.Data;
-
- @Data
- public class UserInfo {
- private int id;
- private String name;
- private int age;
- private String email;
- //LocalDateTime可用于接收 时间
-
- }
Mapper
UserMapper
- package com.example.demo1014.mapper;
-
- import com.example.demo1014.entity.UserInfo;
- import lombok.Data;
- import org.apache.ibatis.annotations.Mapper;
- import org.apache.ibatis.annotations.Param;
-
- import java.util.*;
-
- @Mapper
- public interface UserMapper {
- // UserInfo getUserById(Integer id);
- UserInfo getUserById(@Param("user_id") Integer id);
- //这里的参数“user_id”与resources.mybatis.UserMapper.xml里面的id的值相对应
-
- //查所有用户信息
- List
getAll(); -
- //插入信息
- int add(UserInfo userinfo);
-
- //添加并返回用户的自增ID:
- int addGetId(UserInfo userinfo);
-
-
- //修改操作:
- int upUserName(UserInfo userinfo);
-
- //删除操作:
- int delById(@Param("id") Integer id);
-
- List
getListByOrder(@Param("order") String order); -
- //类似登录逻辑的实现————根据name和id一起查询信息,只有一个就不行;
- UserInfo login(@Param("name") String name,@Param("email") String email);
-
- //进行模糊查询
- List
getListByName(@Param("name") String name); -
- int add2(UserInfo userinfo);
- int add3(UserInfo userinfo);
-
- List
getListByParam(String name,Integer id); -
- int update2(UserInfo userinfo);
-
- int dels(List
ids) ; -
- }
- /**mapper里面有接口有xml文件;
- * */
- /**接口:
- * 接口中的方法都没有方法体都是抽象方法
- * **/
-
- /**单元测试:
- * 1.在需要进行单元测试的类中选择generate
- * */
-
UserMapper.xml
- "1.0" encoding="UTF-8"?>
- "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
"com.example.demo1014.mapper.UserMapper"> -
-
-
- SELECT * FROM UserInfo WHERE id = #{user_id}
-
-
-
-
- select * from userinfo
-
-
"add"> - insert into userinfo(id,name,age,email) values(#{id},#{name},#{age},#{email})
-
-
-
-
"addGetId" useGeneratedKeys="true" keyProperty="id"> - insert into userinfo(id,name,age,email) values(#{id},#{name},#{age},#{email})
-
-
-
"upUserName"> - update userinfo set name= #{name} where id=#{id}
-
-
-
"delById"> - delete from userinfo where id = #{id}
-
-
-
- select* from userinfo order by id ${order}
-
-
-
- select* from userinfo where name='${name}' and email =#{email}
-
-
-
- select* from userinfo where name like CONCAT('%', #{name}, '%')
-
-
-
"add2"> - insert into userinfo(id,
- <if test="name!=null">
- name,
- if>
- age) values(#{id},
- <if test="name!=null">
- #{name},
- if>
- #{age})
-
-
-
"add3"> - insert into userinfo
-
"(" suffix=")" suffixOverrides=","> - <if test="id!=null">
- id,
- if>
- <if test="name!=null">
- name,
- if>
-
- <if test="age!=null">
- age,
- if>
- <if test="email!=null">
- email,
- if>
-
- values
-
"(" suffix=")" suffixOverrides=","> - <if test="id!=null">
- #{id},
- if>
- <if test="name!=null">
- #{name},
- if>
-
- <if test="age!=null">
- #{age},
- if>
- <if test="email!=null">
- #{email},
- if>
-
-
-
-
-
- select* from userinfo
-
-
"where" prefixOverrides="and"> - <if test="name!=null">
- and name=#{name}
- if>
- <if test="id!=null">
- and id=#{id}
-
- if>
-
-
-
-
-
"update2"> - update userinfo
-
- <if test="id!=null">
- id=#{id},
- if>
- <if test="name!=null">
- name=#{name},
- if>
-
- where id=#{id}
-
-
-
"dels"> - delete from userinfo where id in
-
"ids" open="(" close=")" item="id" separator=","> - #{id}
-
-
-
service
- package com.example.demo1014.service;
-
- import com.example.demo1014.entity.UserInfo;
- import com.example.demo1014.mapper.UserMapper;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
-
- @Service
- public class UserService {
- @Autowired//依赖注入
- private UserMapper userMapper;
- public UserInfo getUserById(Integer id){
- return userMapper.getUserById(id);
- }
- }
controller
- package com.example.demo1014.controller;
-
- import com.example.demo1014.entity.UserInfo;
- import com.example.demo1014.service.UserService;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
-
- @RestController//=@ResponseBody+@Controller
- @RequestMapping("/user")
-
- public class UserController {
- @Autowired
- private UserService userservice;
-
- @RequestMapping("/getuserbyid")
- public UserInfo getUserById(Integer id ){
- if(id==null) return null;
- return userservice.getUserById(id);
-
- }
-
- }
-
//此时就可以用postman查询了使用http://127.0.0.1:8080/user/getuserbyid?id=1
//查询到{
"id": 1,
"name": "John",
"age": 25,
"email": "john@example.com"
}
如何进行单元测试?
在UserMApper类里面,右键->generate ->Test->勾选你想要的方法
进入Test
需要注意@Transaction可开启事务,不污染数据库。
package com.example.demo1014.mapper; /**单元测试: * 1.在需要进行单元测试的类中选择generate * */ import com.example.demo1014.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 org.springframework.transaction.annotation.Transactional; import java.util.List; import static org.junit.jupiter.api.Assertions.*; @SpringBootTest//1. 表明当前单元测试是运行在SpringBoot中 //@Transactional //Spring 将会在方法执行前开启一个事务,在方法执行结束后根据方法的执行结果进行事务的提交或回滚 class UserMapperTest { @Autowired//2. 注入测试对象 private UserMapper userMapper; @Test void getUserById() { //3. 添加单元测试的业务代码 UserInfo userinfo=userMapper.getUserById(1); System.out.println(userinfo); /**使用断言->判断最终结果是否符合预期!? * * */ Assertions.assertEquals("John",userinfo.getName()); } @Test void getAll() { Listlist=userMapper.getAll(); Assertions.assertEquals(8,list.size()); } @Test void add() { UserInfo userinfo = new UserInfo(); userinfo.setId(11); userinfo.setName("小龙女"); userinfo.setAge(18); userinfo.setEmail("xxx@example.com"); int result = userMapper.add(userinfo); assertEquals(1, result); // 验证插入是否成功 // sqlSession.commit(); // 提交事务 } @Test void addGetId() {// UserInfo userinfo=new UserInfo(); userinfo.setId(9); userinfo.setAge(30); userinfo.setName("小龙女"); userinfo.setEmail("33780908@qq.com"); //调用mybatis添加方法执行添加操作 int result=userMapper.addGetId(userinfo); System.out.println("添加:"+result); int uid=userinfo.getId(); System.out.println("用户id:"+uid); Assertions.assertEquals(1,result); //2023-10-15 16:50:24.135 INFO 23020 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... //2023-10-15 16:50:24.327 INFO 23020 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. //添加:1 //用户id:5 } @Test void upUserName() { //构建测试数据 UserInfo userinfo=new UserInfo(); userinfo.setId(6); userinfo.setName("孙悟空"); //受影响的行数: int result=userMapper.upUserName(userinfo); System.out.println("修改:"+result); Assertions.assertEquals(1,result); } @Test // @Transactional//加上后就不会污染我们的数据库信息; void delById() { Integer id=6; int result= userMapper.delById(id); System.out.println("删除:"+result); Assertions.assertEquals(1,result); } @Test void getListByOrder() { Listlist=userMapper.getListByOrder("asc"); System.out.println(list); } @Test void login() { String email="1111@qq.com"; // String name="mike"; String name="' or 1='1"; UserInfo userinfo=userMapper.login(name,email); System.out.println("用户登陆状态:"+(userinfo==null?"失败":"成功")); } @Test void add2() { UserInfo userinfo=new UserInfo(); userinfo.setId(11); userinfo.setName(null); userinfo.setAge(111111); // userinfo.setEmail("222"); int result=userMapper.add2(userinfo); System.out.println("result:"+result); } @Test void add3() { UserInfo userinfo=new UserInfo(); userinfo.setId(13); userinfo.setName("sss"); userinfo.setEmail("12432`"); int result=userMapper.add3(userinfo); Assertions.assertEquals(1,result); } @Test void getListByParam() { Listlist=userMapper.getListByParam("John",1);//select* from userinfo WHERE name=? and id=? Listlist1=userMapper.getListByParam("John",null);// select* from userinfo WHERE name=? Listlist2=userMapper.getListByParam(null,1);//select* from userinfo WHERE id=? Listlist3=userMapper.getListByParam(null,null);//select* from userinfo } @Test void update2() { UserInfo userinfo=new UserInfo(); userinfo.setId(2); userinfo.setName("小李子zi"); userMapper.update2(userinfo); } /**在pom.xml中添加配置 * # 开启mybatis sql 日志打印; * configuration: * log-impl: org.apache.ibatis.logging.stdout.StdOutImpl * * # 配置打印MyBatis执行的sql; * logging: * level: * com: * example: * demo1014: debug * 后,可进行打印日志 * ==> Preparing: update userinfo set name= ? where id=? * ==> Parameters: 孙悟空(String), 4(Integer) * <== Updates: 1 * **/ } /** 参数占位符 #{} 和 ${} : * #{}:预编译处理; * ${}: 字符直接替换; * * Mybatis在处理#{}时,会把SQL中的#{}替换成?,使用PaeparedStatement的set方法来复制,直接替换:Mybatis在处理${},是把${}替换成变量的值; * $的应用场景:使用Java中的关键字的时候! * ${sort}可以实现排序查询,而是用#{sort}就不能实现排序查询了,因为当使用#{sort}查询的时候,如果查询的值是String,则会加单引号,就会导致sql错误; * * **/
这个插件好用,推荐MyBatisx,
