Mybatis对数据库进行增删查改以及单元测试

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

Mybatis对数据库进行增删查改以及单元测试_第1张图片

Mybatis对数据库进行增删查改以及单元测试_第2张图片

 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






    

    
    
        insert into userinfo(id,name,age,email) values(#{id},#{name},#{age},#{email})
    
    
    
    
        insert into userinfo(id,name,age,email) values(#{id},#{name},#{age},#{email})
    

    
        update userinfo set name= #{name} where id=#{id}
    

    
        delete from userinfo where id = #{id}
    

    

    

    


    
        insert into userinfo(id,
                            
                                name,
                            
                             age) values(#{id},
                                          
                                              #{name},
                                          
                                          #{age})
    

    
        insert into userinfo
        
            
                id,
            
            
                name,
            

            
                age,
            
            
                email,
            

         values
    
        
            #{id},
        
        
            #{name},
        

        
            #{age},
        
        
            #{email},
        

    

    
    

    
        update userinfo
        
            
                id=#{id},
            
            
                name=#{name},
            
        
        where id=#{id}
    

         
        delete from userinfo where id in
        
            #{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": "[email protected]"
}
 

 如何进行单元测试?

在UserMApper类里面,右键->generate ->Test->勾选你想要的方法Mybatis对数据库进行增删查改以及单元测试_第3张图片

进入Test

Mybatis对数据库进行增删查改以及单元测试_第4张图片需要注意@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() {
        List list=userMapper.getAll();
        Assertions.assertEquals(8,list.size());
    }

    @Test
    void add() {
        UserInfo userinfo = new UserInfo();
        userinfo.setId(11);
        userinfo.setName("小龙女");
        userinfo.setAge(18);
        userinfo.setEmail("[email protected]");

        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("[email protected]");
        //调用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() {
        List list=userMapper.getListByOrder("asc");
        System.out.println(list);
    }

    @Test
    void login() {
      String email="[email protected]";
       // 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() {
        List list=userMapper.getListByParam("John",1);//select* from userinfo WHERE name=? and id=?
        List list1=userMapper.getListByParam("John",null);// select* from userinfo WHERE name=?
        List list2=userMapper.getListByParam(null,1);//select* from userinfo WHERE id=?
        List list3=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, 

Mybatis对数据库进行增删查改以及单元测试_第5张图片

你可能感兴趣的:(mybatis,数据库,java)