MybatisPlus学习笔记(2)

一、通用CRUD
1.@TableFIELD注解

在MP中通过@TableField注解可以指定字段的一些属性,常常解决的问题有2个:

(1)对象中的属性名和字段名不一致的问题(非驼峰)

@TableField(value="coluumnName")
private String name;

​ 通过该注解给对象的变量创建表字段的映射。

(2)对象中的属性字段在表中不存在的问题

@TableField(exist=false)
private String name;

​ name变量在表中不存在对应的字符。

(3)查询时不返回该变量

@TabelField(select=false)
private String password;

​ 查询结果返回的password为null。

2.插入操作

​ (1)基础语句

int result = mapper.insert(item);

​ (2)新增测试方法

@Test
public void testInsert(){
    User newUser = new User();
    newUser.setAge(20);
    newUser.setUserName("Jason");
    newUser.setEmail("test@mybatis.com");
    newUser.setName("Jason");
    newUser.setPassword("123");
    int result = this.userMapper.insert(newUser);
    System.out.println("result = " + result);
}

​ (3)结果

reuslt = 1

​ 数据表结果

mysql> select *from tb_user;
+---------------------+-----------+----------+--------+------+------------------+
| id                  | user_name | password | name   | age  | email            |
+---------------------+-----------+----------+--------+------+------------------+
|                   1 | zhangsan  | 123456   | 张三   |   18 | test1@itcast.cn  |
|                   2 | lisi      | 123456   | 李四   |   20 | test2@itcast.cn  |
|                   3 | wangwu    | 123456   | 王五   |   28 | test3@itcast.cn  |
|                   4 | zhaoliu   | 123456   | 赵六   |   21 | test4@itcast.cn  |
|                   5 | sunqi     | 123456   | 孙七   |   24 | test5@itcast.cn  |
| 1447068479692804097 | Jason     | 123      | Jason  |   20 | test@mybatis.com |
+---------------------+-----------+----------+--------+------+------------------+
6 rows in set (0.00 sec)

​ 可见id并不是自增,修改pojoUser对象。

package com.example.mybatistest.pojo;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("tb_user")
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String userName;
    private String password;
    private String name;
    private Integer age;
    private String email;
}

2.1更新操作-根据id更新

(1)基础语法

int updateById(@Param(Constants.ENTITY) T entity);

(2)测试方法

@Test
public void testUpdateById() {
    User user = new User();
    user.setId(6L); //主键
    user.setAge(21); //更新的字段
    //根据id更新,更新不为null的字段
    this.userMapper.updateById(user);
}
2.2更新操作-根据条件更新

(1)通过QueryWrapper更新

 @Test
    public void testUpdateByCondi(){
        User user = new User();
        user.setAge(21);
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.eq("name", "孙七");
        int result = this.userMapper.update(user, wrapper);
        System.out.println("reuslt = " + result);
    }

(2)通过UpdateWrapper更新

@Test
public void testUpdate() {
    //更新的条件以及字段
    UpdateWrapper<User> wrapper = new UpdateWrapper<>();
    wrapper.eq("id", 6).set("age", 23);
    //执行更新操作
    int result = this.userMapper.update(null, wrapper);
    System.out.println("result = " + result);
}
3.删除操作

(1)deleteById

@Test
public void testDeleteById() {
    //执行删除操作
    int result = this.userMapper.deleteById(6L);
    System.out.println("result = " + result);
}

(2)deleteByMap

/**
* 根据 columnMap 条件,删除记录
*
* @param columnMap 表字段 map 对象
*/
int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
@Test
public void testDeleteByMap() {
    Map<String, Object> columnMap = new HashMap<>();
    columnMap.put("age",20);
    columnMap.put("name","张三");
    //将columnMap中的元素设置为删除的条件,多个之间为and关系
    int result = this.userMapper.deleteByMap(columnMap);
    System.out.println("result = " + result);
}
4.查询操作

(1)selectById

/**
* 根据 ID 查询
*
* @param id 主键ID
*/
T selectById(Serializable id);

​ 测试用例:

@Test
public void testSelectById() {
    //根据id查询数据
    User user = this.userMapper.selectById(2L);
    System.out.println("result = " + user);
}	

(2)selectBatchIds

/**
* 查询(根据ID 批量查询)
*
* @param idList 主键ID列表(不能为 null 以及 empty)
*/
List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable>
idList);

​ 测试用例

@Test
public void testSelectBatchIds() {
    //根据id集合批量查询
    List<User> users = this.userMapper.selectBatchIds(Arrays.asList(2L, 3L, 10L));
    for (User user : users) {
    System.out.println(user);
    }
}

(3)selectOne

/**
* 根据 entity 条件,查询一条记录
*
* @param queryWrapper 实体对象封装操作类(可以为 null)
*/
T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

​ 测试用例

@Test
public void testSelectOne() {
    QueryWrapper<User> wrapper = new QueryWrapper<User>();
    wrapper.eq("name", "李四");
    //根据条件查询一条数据,如果结果超过一条会报错
    User user = this.userMapper.selectOne(wrapper);
    System.out.println(user);
}

(4)selectList

/**
* 根据 entity 条件,查询全部记录
*
* @param queryWrapper 实体对象封装操作类(可以为 null)
*/
List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

​ 测试用例

@Test
public void testSelectList() {
    QueryWrapper<User> wrapper = new QueryWrapper<User>();
    wrapper.gt("age", 23); //年龄大于23岁
    //根据条件查询数据
    List<User> users = this.userMapper.selectList(wrapper);
    for (User user : users) {
    System.out.println("user = " + user);
	}
}

(5)selectPage

/**
* 根据 entity 条件,查询全部记录(并翻页)
*
* @param page 分页查询条件(可以为 RowBounds.DEFAULT)
* @param queryWrapper 实体对象封装操作类(可以为 null)
*/
IPage<T> selectPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

​ 分页插件

package cn.itcast.mp;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@MapperScan("cn.itcast.mp.mapper") //设置mapper接口的扫描包
public class MybatisPlusConfig {
/**
* 分页插件
*/
@Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
	}
}

​ 测试方法

@Test
public void testSelectPage() {
    QueryWrapper<User> wrapper = new QueryWrapper<User>();
    wrapper.gt("age", 20); //年龄大于20岁
    Page<User> page = new Page<>(1,1);
    //根据条件查询数据
    IPage<User> iPage = this.userMapper.selectPage(page, wrapper);
    System.out.println("数据总条数:" + iPage.getTotal());
    System.out.println("总页数:" + iPage.getPages());
    List<User> users = iPage.getRecords();
    for (User user : users) {
    	System.out.println("user = " + user);
	}
}
二、基于MybatisPlus设计controller

​ 本测试项目的文件结构:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GOnhyWPN-1634366998974)(D:\大学\学习日志\SpringBoot\数据库\Mybatis\img\文件结构)]

(1)在service文件夹下创建UserService接口

package com.example.mybatistest.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.example.mybatistest.pojo.User;

public interface UserService extends IService<User> {
}

IService定义的部分方法:
请添加图片描述

(2)在impl文件夹下创建UserServiceImpl

package com.example.mybatistest.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.mybatistest.service.UserService;
import com.example.mybatistest.mapper.UserMapper;
import com.example.mybatistest.pojo.User;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}

(3)在controller文件夹下创建UserController

​ 本例实现获取全部用户信息:

    @GetMapping("alluser")
    public List<User> getAllUser(){
        List<User> userList = userService.list(null);  // 核心代码
        for (User user : userList) {
            System.out.println(user);
        }
        return userList;
    }

(4)测试

​ 运行@SpringBootApplication类,用IDEA自带的HTTP请求进行测试:

​ 点击controllerMapping的下面图标,

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

​ 测试结果:

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值