❤️❤️❤️Spring专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring + Spring MVC + MyBatis专栏
MyBatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。它提供了一些常用的 CRUD 操作,以及分页、动态 SQL 等常用功能,同时也支持自定义 SQL 语句和存储过程。
MyBatis-Plus官网有两个,第一个域名是热心网友捐赠的(之前已经被申请过了),第二个是正牌官网(国人开发的,为中文)。
MyBatis-Plus MyBatis-Plus (baomidou.com)
我们可以跟着官网学,这个<快速开始>十分照顾新手。
详情可见官网:
总结:使用MybatisPlus几乎可以让你什么都不写,代码简化到极致。
MyBatis-Plus是一个基于MyBatis的增强工具库,旨在简化和增强MyBatis的开发。下面是MyBatis-Plus的历史发展的总结:
截至目前,MyBatis-Plus已经成为了一个功能强大、稳定可靠的开发工具库,广泛应用于Java项目中,极大地简化了MyBatis的开发工作。它的持续发展得益于社区的贡献和活跃的维护。
更具体的可以看MyBatis-Plus官网更新日志:mybatis-plus/CHANGELOG.md at 3.0 · baomidou/mybatis-plus · GitHub
只选择MySQL Driver(暂时不使用SpringWeb),MyBatis-Plus配置文件需要自己手动添加。
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
并且不再需要导入 mybatis和mybatis整合spring的jar包:
还有一个druid jar包:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
# 配置数据库的连接字符串
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/ku2022?characterEncoding=utf8
username: root
password: "123456"
driver-class-name: com.mysql.cj.jdbc.Driver
所使用的库中需要有与user实体类名字相同的表:
之前的Mapper需要写方法:
package com.example.ssmdemo1.mapper;
import com.example.ssmdemo1.entity.Userinfo;
import org.apache.ibatis.annotations.Mapper;
@Mapper//需要添加 @Mapper 注解
public interface UserMapper {
Userinfo getUserById(Integer id);
}
MyBatis-Plus之后:
package com.example.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.domain.User;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserDao extends BaseMapper<User> {
}
点进BaseMapper中去,可以看到它自带了非常多的方法:
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package com.baomidou.mybatisplus.core.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Param;
public interface BaseMapper<T> extends Mapper<T> {
int insert(T entity);
int deleteById(Serializable id);
int deleteByMap(@Param("cm") Map<String, Object> columnMap);
int delete(@Param("ew") Wrapper<T> queryWrapper);
int deleteBatchIds(@Param("coll") Collection<? extends Serializable> idList);
int updateById(@Param("et") T entity);
int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);
T selectById(Serializable id);
List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList);
List<T> selectByMap(@Param("cm") Map<String, Object> columnMap);
T selectOne(@Param("ew") Wrapper<T> queryWrapper);
Integer selectCount(@Param("ew") Wrapper<T> queryWrapper);
List<T> selectList(@Param("ew") Wrapper<T> queryWrapper);
List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> queryWrapper);
List<Object> selectObjs(@Param("ew") Wrapper<T> queryWrapper);
<E extends IPage<T>> E selectPage(E page, @Param("ew") Wrapper<T> queryWrapper);
<E extends IPage<Map<String, Object>>> E selectMapsPage(E page, @Param("ew") Wrapper<T> queryWrapper);
}
就是这么简单,可以看到我什么都没写却仍然有很多方法可以使用:
package com.example.mybatisplus;
import com.example.dao.UserDao;
import com.example.domain.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
class MybatisPlusApplicationTests {
@Autowired
private UserDao userDao;
@Test
void textGetAll() {
List<User> list=userDao.selectList(null);
System.out.println(list);
}
}
输出数据库中的两条数据:
从上面入门案例我们可以很清楚了解到MyBatisPlus的方便性
下面这些方法差不多将我们日常的需求都给覆盖了,而在MybatisPlus中也都有对应的方法,只不过换了个名字而已。
功能 | 自定义接口 | MP接口 |
---|---|---|
新增 | boolean save(T t) | int insert(T t) |
删除 | boolean delete(int id) | int deleteById(Serializable id) |
修改 | boolean update(T t) | int updateById(T t) |
根据id查询 | getById(int id) | T selectById(Serializable id) |
查询全部 | List getAll() | List selectList() |
分页查询 | PageInfo getAll(int page,int size) | IPage selectPage(IPage page) |
按条件查询 | List getAll(Condition condition) | IPage selectPage(Wrapper<T〉 queryWrapper) |
@Test
void textSave(){
User user=new User();
user.setName("张三");
user.setPassword("123456");
user.setAge(19);
user.setTel("123456789");
userDao.insert(user);
}
添加成功,只不过id是它给你指点的一个id,这样子是能够添加用户进去的。
@Test
void testDelete(){
userDao.deleteById(1694537075610619906L);
}
王五的数据就被删除了
@Test
void testUpdate(){
User user=new User();
user.setId(1L);
user.setName("张三");
userDao.updateById(user);
}
将id为1的name更新为张三,但是我们可以发现其他没有赋值的数据都没有发生改变,不是为空
入门案例中的就是查找数据,这不过是全部查询出来,那能不能查询单个数据?
@Test
void testSelect(){
User user=userDao.selectById(1L);
System.out.println(user);
}
可以发现也是可以的: