佛山做pc端网站惠州网站建设方案推广
目录
1. 快速开始
1. 创建user表
2. 插入几条数据
3. 创建一个新的springboot项目
4. 导入mybatis-plus依赖
5. 在配置文件中进行配置
6. 编写实体类
7. 编写Mapper 接口类
8. 添加 @MapperScan 注解
9. 测试
编辑2. CRUD
1. 插入一条语句
2. 根据主键id删除一条记录
3. 根据条件构造器wrapper进行删除
4. 根据主键id进行查找
5. 根据主键id进行批量查找
6. 根据map中指定的列名和列值进行等值匹配查找
7. 根据 wrapper 条件查询
8. 根据主键id进行更新
9. 根据条件构造器wrapper进行更新
编辑3. 分页
0. 配置分页插件
1. 通过selectPage方法分页
2. 通过selectMapsPage方法分页
4. 自增列的值(generated key)
5. 联接查询
1. 创建一个新表(order表)并插入数据
2. 创建Order实体类
3. 联合查询
4. 测试
1. 快速开始
1. 创建user表
DROP TABLE IF EXISTS `user`;
CREATE TABLE user (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL,password VARCHAR(50) NOT NULL
);
2. 插入几条数据
INSERT INTO user (username, password) VALUES ('alice', 'password123');
INSERT INTO user (username, password) VALUES ('bob', 'securepass');
INSERT INTO user (username, password) VALUES ('charlie', 'mypassword');
3. 创建一个新的springboot项目
4. 导入mybatis-plus依赖
<!-- springboot3 导入以下依赖 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.7</version></dependency><!-- springboot2 导入以下依赖 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.7</version></dependency>
导入mysql依赖
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency>
导入lombok依赖
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>
5. 在配置文件中进行配置
application.properties
# 数据库配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/数据库名?serverTimezone=GMT%2B8
spring.datasource.username=账号
spring.datasource.password=密码# MyBatis-Plus 配置
# 指定MyBatis-Plus使用StdOutImpl作为日志实现,这意味着SQL日志将输出到标准输出(通常是控制台)。
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
或 application.yml
# 数据库配置
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/数据库名?serverTimezone=GMT%2B8username: 账号password: 密码# MyBatis-Plus 配置
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
6. 编写实体类
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class User {private Integer id;private String username;private String password;
}
7. 编写Mapper 接口类
public interface UserMapper extends BaseMapper<User> {
}
8. 添加 @MapperScan
注解
在 Spring Boot 启动类中添加 @MapperScan
注解,扫描 Mapper 文件夹
@SpringBootApplication
@MapperScan("com.huan.mybatis_plus_learn.mappers")//Mapper所在的类路径
public class MybatisPlusLearnApplication {public static void main(String[] args) {SpringApplication.run(MybatisPlusLearnApplication.class, args);}}
9. 测试
@SpringBootTest
class MybatisPlusLearnApplicationTests {@Autowiredprivate UserMapper userMapper;@Testpublic void testSelect() {System.out.println(("----- selectAll method test ------"));List<User> userList = userMapper.selectList(null);Assert.isTrue(3 == userList.size(), "");for (User user : userList){System.out.println(user);}}
}
控制台输出:

2. CRUD
以下的方法都是BaseMapper接口中默认有的,直接使用即可。
1. 插入一条语句
直接使用BaseMapper接口中的insert(T entity)方法。
@Testpublic void testInsert(){User user = new User();user.setUsername("huan");user.setPassword("123456");int insert = userMapper.insert(user);System.out.println(insert);}
但测试发现,插入的字段的id为负数。
要使id字段正常自增,需要给实体类的id字段添加@TableId(value = "id", type = IdType.AUTO)注释,用于标识数据库表的主键字段,IdType.AUTO
表示主键值由数据库自动生成,通常用于自增主键。
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName
@ToString
public class User {//添加注释@TableId(value = "id", type = IdType.AUTO)private Integer id;private String username;private String password;
}
2. 根据主键id删除一条记录
@Testpublic void testDeleteById(){int delete = userMapper.deleteById(1);System.out.println(delete);}
控制台输出。
数据库内容。
3. 根据条件构造器wrapper进行删除
@Testpublic void testDelete(){// 创建条件构造器QueryWrapper<User> queryWrapper = new QueryWrapper<>();// 添加条件:用户名为 "huan"queryWrapper.eq("username", "huan");// 执行删除操作int deleteCount = userMapper.delete(queryWrapper);System.out.println("删除了 " + deleteCount + " 条记录");}
控制台输出。
4. 根据主键id进行查找
@Testpublic void testSelectById(){User user = userMapper.selectById(2);System.out.println(user);Assert.notNull(user, "User must not be null");}
控制台输出。
5. 根据主键id进行批量查找
@Testpublic void testSelectBatchIds(){List<User> users = userMapper.selectBatchIds(List.of(5, 2, 3));users.forEach(user -> System.out.println(user));}
控制台输出。
6. 根据map中指定的列名和列值进行等值匹配查找
@Testpublic void testSelectByMap(){List<User> users = userMapper.selectByMap(Map.of("username", "huan", "password", "123456"));users.forEach(user -> System.out.println(user));}
控制台输出。
7. 根据 wrapper 条件查询
@Testpublic void testSelectList(){QueryWrapper<User> queryWrapper = new QueryWrapper<>();//指定查询字段为id,usernamequeryWrapper.select("id", "username");List<User> users = userMapper.selectList(queryWrapper);users.forEach(user -> System.out.println(user));}
控制台输出。
8. 根据主键id进行更新
@Testpublic void testUpdateById(){User user = new User();user.setId(5);user.setUsername("huan");user.setPassword("huan");int update = userMapper.updateById(user);User user1 = userMapper.selectById(5);System.out.println(user1);}
控制台输出。
9. 根据条件构造器wrapper
进行更新
@Testpublic void testUpdate(){QueryWrapper<User> queryWrapper = new QueryWrapper<>();// 指定查询条件 username="huan"queryWrapper.eq("username", "huan");queryWrapper.select("id", "username");User user = new User();user.setUsername("huan1");userMapper.update(user, queryWrapper);//这里查询不到,因为huan改为了huan1userMapper.selectList(queryWrapper).forEach(u -> System.out.println(user));}
控制台输出。

3. 分页
0. 配置分页插件
@Configuration
@ComponentScan
public class MybatisPlusConfig {/*** 添加分页插件*/@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 如果配置多个插件, 切记分页最后添加// 如果有多数据源可以不配具体类型, 否则都建议配上具体的 DbTypereturn interceptor;}
}
1. 通过selectPage方法分页
@Testpublic void testSelectPage(){// 创建分页对象 当前页,每页数据数Page<User> page = new Page<>(2,2);// 执行分页查询IPage<User> userPage = userMapper.selectPage(page, null);// 获取查询结果List<User> users = userPage.getRecords();long total = userPage.getTotal();long pages = userPage.getPages();// 输出查询结果System.out.println("总记录数:" + total);System.out.println("总页数:" + pages);users.forEach(user -> System.out.println(user));}
控制台输出。
2. 通过selectMapsPage
方法分页
该方法与selectPage的区别在于,selectMapsPage方法会将查询结果封装为一个Map<String,Object>。
@Testpublic void testSelectMapsPage(){// 创建分页对象Page<Map<String, Object>> page = new Page<>(2, 2);// 执行分页查询IPage<Map<String, Object>> userPage = userMapper.selectMapsPage(page, null);// 获取查询结果List<Map<String, Object>> users = userPage.getRecords();long total = userPage.getTotal();long pages = userPage.getPages();// 输出查询结果System.out.println("总记录数:" + total);System.out.println("总页数:" + pages);users.forEach(user -> System.out.println(user));}
控制台输出。
4. 自增列的值(generated key)
在 MyBatis-Plus 中,insert
方法可以直接获取自增列的值(generated key)。当你在实体类中使用 @TableId
注解并设置 type
为 IdType.AUTO
时,MyBatis-Plus 会自动处理自增主键的生成和赋值。
也就是说,MyBatis-Plus 会自动将主键的值赋值给实体类的对应字段,我们可以通过get方法直接取到主键的值。
@Testpublic void testInsert(){User user = new User();user.setUsername("huan");user.setPassword("123456");int insert = userMapper.insert(user);System.out.println("插入后的用户ID:" + user.getId());}
控制台输出。
5. 联接查询
1. 创建一个新表(order表)并插入数据
CREATE TABLE `order` (id BIGINT AUTO_INCREMENT PRIMARY KEY,user_id BIGINT NOT NULL,goods_name VARCHAR(255) NOT NULL,goods_price DECIMAL(10, 2) NOT NULL
);
INSERT INTO `order` (user_id, goods_name, goods_price) VALUES (2, 'Laptop', 999.99);
INSERT INTO `order` (user_id, goods_name, goods_price) VALUES (2, 'Smartphone', 499.99);
INSERT INTO `order` (user_id, goods_name, goods_price) VALUES (3, 'Headphones', 199.99);
INSERT INTO `order` (user_id, goods_name, goods_price) VALUES (5, 'Monitor', 299.99);
INSERT INTO `order` (user_id, goods_name, goods_price) VALUES (2, 'Keyboard', 49.99);
2. 创建Order实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Order {@TableId(value = "id", type = IdType.AUTO)private Integer id;private Integer userId;private String goodsName;private Double goodsPrice;
}
3. 联合查询
在Mapper中添加联合查询的方法,通过自定义 SQL 语句和@Select注解来实现。
public interface UserMapper extends BaseMapper<User> {//联合查询//查询user表和order表中user表中id和order表中id相等的数据//u.* 表示user表的所有字段@Select("SELECT u.*, o.goods_name, o.goods_price FROM user u INNER JOIN `order` o ON u.id = o.user_id WHERE u.id = #{userId}")List<Map<String, Object>> selectUserWithOrders(@Param("userId") Integer userId);
}
4. 测试
@Testpublic void testSelectUserWithOrders(){List<Map<String, Object>> userWithOrders = userMapper.selectUserWithOrders(2);userWithOrders.forEach(user -> System.out.println(user));}
控制台输出。
干饭去....
参考链接:
1. mybatis-plus官网
2. https://juejin.cn/post/6961721367846715428