一、通用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并不是自增,修改pojo
中User
对象。
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
本测试项目的文件结构:
(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请求进行测试:
点击controller
中Mapping
的下面图标,
测试结果: