北京网站设计我选柚米,wordpress后台没有写权限,备案 非网站,阿里巴巴国际贸易网目录 1. 快速开始 1. 创建user表 2. 插入几条数据 3. 创建一个新的springboot项目 4. 导入mybatis-plus依赖 5. 在配置文件中进行配置 6. 编写实体类 7. 编写Mapper 接口类 8. 添加 MapperScan 注解 9. 测试
编辑2. CRUD 1. 插入一条语句 2. 根据主键id删除一条记录 3. 根据…目录 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 导入以下依赖 --dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-spring-boot3-starter/artifactIdversion3.5.7/version/dependency!-- springboot2 导入以下依赖 --dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.5.7/version/dependency 导入mysql依赖 dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.33/version/dependency 导入lombok依赖 dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependency 5. 在配置文件中进行配置 application.properties
# 数据库配置
spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver
spring.datasource.urljdbc:mysql://localhost:3306/数据库名?serverTimezoneGMT%2B8
spring.datasource.username账号
spring.datasource.password密码# MyBatis-Plus 配置
# 指定MyBatis-Plus使用StdOutImpl作为日志实现这意味着SQL日志将输出到标准输出通常是控制台。
mybatis-plus.configuration.log-implorg.apache.ibatis.logging.stdout.StdOutImpl 或 application.yml
# 数据库配置
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/数据库名?serverTimezoneGMT%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 BaseMapperUser {
}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 ------));ListUser 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(){// 创建条件构造器QueryWrapperUser queryWrapper new QueryWrapper();// 添加条件用户名为 huanqueryWrapper.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(){ListUser users userMapper.selectBatchIds(List.of(5, 2, 3));users.forEach(user - System.out.println(user));} 控制台输出。 6. 根据map中指定的列名和列值进行等值匹配查找 Testpublic void testSelectByMap(){ListUser users userMapper.selectByMap(Map.of(username, huan, password, 123456));users.forEach(user - System.out.println(user));} 控制台输出。 7. 根据 wrapper 条件查询 Testpublic void testSelectList(){QueryWrapperUser queryWrapper new QueryWrapper();//指定查询字段为idusernamequeryWrapper.select(id, username);ListUser 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(){QueryWrapperUser queryWrapper new QueryWrapper();// 指定查询条件 usernamehuanqueryWrapper.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(){// 创建分页对象 当前页每页数据数PageUser page new Page(2,2);// 执行分页查询IPageUser userPage userMapper.selectPage(page, null);// 获取查询结果ListUser 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方法会将查询结果封装为一个MapString,Object。 Testpublic void testSelectMapsPage(){// 创建分页对象PageMapString, Object page new Page(2, 2);// 执行分页查询IPageMapString, Object userPage userMapper.selectMapsPage(page, null);// 获取查询结果ListMapString, 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 BaseMapperUser {//联合查询//查询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})ListMapString, Object selectUserWithOrders(Param(userId) Integer userId);
} 4. 测试 Testpublic void testSelectUserWithOrders(){ListMapString, Object userWithOrders userMapper.selectUserWithOrders(2);userWithOrders.forEach(user - System.out.println(user));} 控制台输出。 干饭去.... 参考链接
1. mybatis-plus官网
2. https://juejin.cn/post/6961721367846715428