Loading... ## pom.xml: ```java <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.bdm</groupId> <artifactId>mybatis-start</artifactId> <version>0.0.1-SNAPSHOT</version> <name>mybatis-start</name> <description>mybatis-start</description> <properties> <java.version>1.8</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <spring-boot.version>2.3.7.RELEASE</spring-boot.version> </properties> <dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.16</version> </dependency> <!--自动生成实体类, 简化POJO实体类开发--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <scope>provided</scope> </dependency> <!--代码生成器--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.4.1</version> </dependency> <!--velocity模板引擎--> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.3</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.3.7.RELEASE</version> <configuration> <mainClass>com.bdm.MybatisStartApplication</mainClass> </configuration> </plugin> </plugins> </build> </project> ``` ## Mpconfig: 分页拦截器 ```java package com.bdm.config; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import com.bdm.MybatisStartApplication; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @code Description * @code author 本当迷 * @code date 2022/8/2-11:08 */ @Configuration public class MpConfig { // mybatis plus拦截器 分页功能 @Bean public MybatisPlusInterceptor mybatisPlusInterceptor(){ // 1.定制Mp拦截器 final MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); // 2.添加具体的拦截器 interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); // 3.添加乐观锁的拦截器 interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); return interceptor; } } ``` ## UserDao: 我们直接继承BaseMapper就可以使用mp里面已经封装好的接口了 ```java package com.bdm.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.bdm.domain.User; import org.apache.ibatis.annotations.Mapper; /** * @code Description * @code author 本当迷 * @code date 2022/8/2-9:27 */ @Mapper public interface UserDao extends BaseMapper<User> { } ``` ## User: 对于实体类,mp支持了很多功能,比如和数据库字段名、表名统一,逻辑删除字段等待 ```java package com.bdm.domain; import com.baomidou.mybatisplus.annotation.*; import lombok.*; /** * @code Description * @code author 本当迷 * @code date 2022/8/2-9:25 */ //@Setter //@Getter //@ToString @AllArgsConstructor @NoArgsConstructor @EqualsAndHashCode @Data // 设置TableName和数据库表名同步 @TableName("user") public class User { // 字段自增策略 @TableId(type = IdType.AUTO) private Long id; private String name; // 设置与数据库字段名同步 @TableField(value = "password") private String password; private Integer age; private String tel; // 当数据库中没有当前字段,可设置此注解 // @TableField(exist = false) // private Integer online; // 逻辑删除字段,标记当前记录是否被删除 // @TableLogic(value = "0", delval = "1") private Integer deleted; // 乐观锁 @Version private Integer version; public User(long l, String 小当迷, String s, int i, String s1) { } } ``` ## 使用mp增删改查操作: ```java @Autowired private UserDao userDao; @Test void testSave(){ // 添加操作 final User user = new User(5L, "小当迷", "1234", 10, "1230"); userDao.insert(user); } @Test void testSelectById(){ // 根据id查询 final User user = userDao.selectById(4L); System.out.println(user); } @Test void selectAll() { // 查询全部数据 final QueryWrapper<User> wrapper = new QueryWrapper<>(); final List<User> users = userDao.selectList(wrapper); users.forEach(System.out::println); } @Test void testDelete(){ // 根据id删除 userDao.deleteById(4L); } @Test void teatDeleteList(){ // 批量删除 final ArrayList<Long> list = new ArrayList<>(); list.add(2L); list.add(5L); userDao.deleteBatchIds(list); } @Test void testUpdate(){ // 根据id进行更新 final User user = new User(); user.setId(2L); user.setName("本当迷"); userDao.updateById(user); } ``` ## 分页功能: ```java @Test void testGetByPage(){ // page括号一参数:当前页码,括号第二个参数:每页显示数量 final IPage<User> page = new Page<User>(1, 2); userDao.selectPage(page, null); System.out.println("当前页码值:" + page.getCurrent() + " 每页显示数:" + page.getSize()); System.out.println("一共多少页" + page.getPages()); System.out.println("一共多少条数据:" +page.getTotal()); System.out.println("数据:" + page .getRecords()); } ``` ## 按条件查询的三种方式: ### 方式一: ```java // 方式一:按条件查询 final QueryWrapper<User> wrapper = new QueryWrapper(); wrapper.lt("id", 4); final List<User> list = userDao.selectList(wrapper); list.forEach(System.out::println); ``` ### 方式二: ```java // 方式一:lambda按条件查询 final QueryWrapper<User> wrapper = new QueryWrapper<User>(); wrapper.lambda().lt(User::getId, 4); final List<User> list = userDao.selectList(wrapper); list.forEach(System.out::println); ``` ### 方式三: ```java // 方式三:lambda格式条件查询 final LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<>(); lqw.lt(User::getId, 4); final List<User> list = userDao.selectList(lqw); list.forEach(System.out::println); ``` ## and和or的使用: ### and 条件直接用 "."点连接即可 ```java // and关系 lqw.lt(User::getId, 3).gt(User::getId, 1); ``` ### or ```java // or 或关系, 可在括号前面加个判断条件不等于null, 先判断第一个参数是否为true,如果为true连接当前条件 lqw.lt(null != userDao, User::getId, 3).or().gt(User::getId, 1); ``` ## 查询所有行数: ```java // 查询所有条数 final QueryWrapper<User> wrapper = new QueryWrapper<>(); wrapper.select("count(*) as count"); final List<Map<String, Object>> mapList = userDao.selectMaps(wrapper); System.out.println(mapList); ``` ## 等值判断:(通常用于登录验证) ```java final LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<>(); // 等同于 = lqw.eq(User::getName, "本当迷4").eq(User::getPassword, "123"); final User user = userDao.selectOne(lqw); System.out.println(user); ``` ## 模糊查询: ```java // 模糊匹配 final LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<>(); lqw.like(User::getName, "本当迷"); final List<User> users = userDao.selectList(lqw); users.forEach(System.out::println); ``` 最后修改:2022 年 08 月 02 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 1 如果文章有用,请随意打赏。