From a6dfb84b61dee2ecbf35151fd57c35648453e33e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BA=AF=E6=B4=81=E7=9A=84=E5=BE=AE=E7=AC=91?= Date: Mon, 13 May 2019 17:30:48 +0800 Subject: [PATCH] MyBatis Plus demo --- README.md | 1 + README_EN.md | 3 + spring-boot-mybatis-plus/pom.xml | 58 ++++++++++ .../java/com/neo/MyBatisPlusApplication.java | 12 +++ .../com/neo/config/MybatisPlusConfig.java | 19 ++++ .../main/java/com/neo/mapper/UserMapper.java | 8 ++ .../src/main/java/com/neo/model/User.java | 11 ++ .../src/main/resources/application.yml | 14 +++ .../src/main/resources/db/data-h2.sql | 8 ++ .../src/main/resources/db/schema-h2.sql | 10 ++ .../com/neo/MyBatisPlusApplicationTests.java | 16 +++ .../test/java/com/neo/MyBatisPlusTest.java | 102 ++++++++++++++++++ 12 files changed, 262 insertions(+) create mode 100644 spring-boot-mybatis-plus/pom.xml create mode 100644 spring-boot-mybatis-plus/src/main/java/com/neo/MyBatisPlusApplication.java create mode 100644 spring-boot-mybatis-plus/src/main/java/com/neo/config/MybatisPlusConfig.java create mode 100644 spring-boot-mybatis-plus/src/main/java/com/neo/mapper/UserMapper.java create mode 100644 spring-boot-mybatis-plus/src/main/java/com/neo/model/User.java create mode 100644 spring-boot-mybatis-plus/src/main/resources/application.yml create mode 100644 spring-boot-mybatis-plus/src/main/resources/db/data-h2.sql create mode 100644 spring-boot-mybatis-plus/src/main/resources/db/schema-h2.sql create mode 100644 spring-boot-mybatis-plus/src/test/java/com/neo/MyBatisPlusApplicationTests.java create mode 100644 spring-boot-mybatis-plus/src/test/java/com/neo/MyBatisPlusTest.java diff --git a/README.md b/README.md index 16bb6b8..1727bdc 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,7 @@ Spring Boot 使用的各种示例,以最简单、最实用为标准,此开 - [spring-boot-webflux](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-webflux) :Spring Boot webflux 示例 - [spring-boot-elasticsearch](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-elasticsearch) :Spring Boot elasticsearch 示例 - [spring-boot-swagger](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-swagger) :Spring Boot swagger2 示例 +- [spring-boot-mybatis-plus](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-mybatis-plus) :Spring Boot 集成 MyBatis Plus 示例 **参考文章** diff --git a/README_EN.md b/README_EN.md index 3e6d607..62b2fe3 100644 --- a/README_EN.md +++ b/README_EN.md @@ -23,6 +23,9 @@ Spring Boot examples, using the simplest and the most useful scene demos. - [spring-boot-webflux](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-webflux) :Spring Boot webflux demo - [spring-boot-elasticsearch](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-elasticsearch) :Spring Boot elasticsearch demo - [spring-boot-swagger](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-swagger) :Spring Boot swagger2 demo +- [spring-boot-mybatis-plus](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-mybatis-plus) :Spring Boot MyBatis Plus demo + + --- ## Spring Boot (Already upgraded to 2.x) diff --git a/spring-boot-mybatis-plus/pom.xml b/spring-boot-mybatis-plus/pom.xml new file mode 100644 index 0000000..6f08877 --- /dev/null +++ b/spring-boot-mybatis-plus/pom.xml @@ -0,0 +1,58 @@ + + + 4.0.0 + + com.example + spring-boot-mybatis-plus + 1.0.0 + jar + + Spring Boot MyBatis Plus + Spring Boot 2 Demo + + + org.springframework.boot + spring-boot-starter-parent + 2.1.4.RELEASE + + + + UTF-8 + UTF-8 + 1.8 + + + + + org.projectlombok + lombok + true + + + com.baomidou + mybatis-plus-boot-starter + 3.1.1 + + + com.h2database + h2 + runtime + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/spring-boot-mybatis-plus/src/main/java/com/neo/MyBatisPlusApplication.java b/spring-boot-mybatis-plus/src/main/java/com/neo/MyBatisPlusApplication.java new file mode 100644 index 0000000..8cadbf0 --- /dev/null +++ b/spring-boot-mybatis-plus/src/main/java/com/neo/MyBatisPlusApplication.java @@ -0,0 +1,12 @@ +package com.neo; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class MyBatisPlusApplication { + + public static void main(String[] args) { + SpringApplication.run(MyBatisPlusApplication.class, args); + } +} diff --git a/spring-boot-mybatis-plus/src/main/java/com/neo/config/MybatisPlusConfig.java b/spring-boot-mybatis-plus/src/main/java/com/neo/config/MybatisPlusConfig.java new file mode 100644 index 0000000..914ffbb --- /dev/null +++ b/spring-boot-mybatis-plus/src/main/java/com/neo/config/MybatisPlusConfig.java @@ -0,0 +1,19 @@ +package com.neo.config; + +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("com.neo.mapper") +public class MybatisPlusConfig { + + /** + * 分页插件 + */ + @Bean + public PaginationInterceptor paginationInterceptor() { + return new PaginationInterceptor(); + } +} \ No newline at end of file diff --git a/spring-boot-mybatis-plus/src/main/java/com/neo/mapper/UserMapper.java b/spring-boot-mybatis-plus/src/main/java/com/neo/mapper/UserMapper.java new file mode 100644 index 0000000..227c33c --- /dev/null +++ b/spring-boot-mybatis-plus/src/main/java/com/neo/mapper/UserMapper.java @@ -0,0 +1,8 @@ +package com.neo.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.neo.model.User; + +public interface UserMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/spring-boot-mybatis-plus/src/main/java/com/neo/model/User.java b/spring-boot-mybatis-plus/src/main/java/com/neo/model/User.java new file mode 100644 index 0000000..0cf4ecc --- /dev/null +++ b/spring-boot-mybatis-plus/src/main/java/com/neo/model/User.java @@ -0,0 +1,11 @@ +package com.neo.model; + +import lombok.Data; + +@Data +public class User { + private Long id; + private String name; + private Integer age; + private String email; +} \ No newline at end of file diff --git a/spring-boot-mybatis-plus/src/main/resources/application.yml b/spring-boot-mybatis-plus/src/main/resources/application.yml new file mode 100644 index 0000000..46530ce --- /dev/null +++ b/spring-boot-mybatis-plus/src/main/resources/application.yml @@ -0,0 +1,14 @@ +# DataSource Config +spring: + datasource: + driver-class-name: org.h2.Driver + schema: classpath:db/schema-h2.sql + data: classpath:db/data-h2.sql + url: jdbc:h2:mem:test + username: root + password: test + +# Logger Config +logging: + level: + com.neo: debug diff --git a/spring-boot-mybatis-plus/src/main/resources/db/data-h2.sql b/spring-boot-mybatis-plus/src/main/resources/db/data-h2.sql new file mode 100644 index 0000000..7e97dbd --- /dev/null +++ b/spring-boot-mybatis-plus/src/main/resources/db/data-h2.sql @@ -0,0 +1,8 @@ +DELETE FROM user; + +INSERT INTO user (id, name, age, email) VALUES +(1, 'neo', 18, 'smile1@ityouknow.com'), +(2, 'keep', 36, 'smile@ityouknow.com'), +(3, 'pure', 28, 'smile@ityouknow.com'), +(4, 'smile', 21, 'smile@ityouknow.com'), +(5, 'it', 24, 'smile@ityouknow.com'); \ No newline at end of file diff --git a/spring-boot-mybatis-plus/src/main/resources/db/schema-h2.sql b/spring-boot-mybatis-plus/src/main/resources/db/schema-h2.sql new file mode 100644 index 0000000..baa5a61 --- /dev/null +++ b/spring-boot-mybatis-plus/src/main/resources/db/schema-h2.sql @@ -0,0 +1,10 @@ +DROP TABLE IF EXISTS user; + +CREATE TABLE user +( + id BIGINT(20) NOT NULL COMMENT '主键ID', + name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名', + age INT(11) NULL DEFAULT NULL COMMENT '年龄', + email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱', + PRIMARY KEY (id) +); \ No newline at end of file diff --git a/spring-boot-mybatis-plus/src/test/java/com/neo/MyBatisPlusApplicationTests.java b/spring-boot-mybatis-plus/src/test/java/com/neo/MyBatisPlusApplicationTests.java new file mode 100644 index 0000000..1eaf285 --- /dev/null +++ b/spring-boot-mybatis-plus/src/test/java/com/neo/MyBatisPlusApplicationTests.java @@ -0,0 +1,16 @@ +package com.neo; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class MyBatisPlusApplicationTests { + + @Test + public void contextLoads() { + } + +} diff --git a/spring-boot-mybatis-plus/src/test/java/com/neo/MyBatisPlusTest.java b/spring-boot-mybatis-plus/src/test/java/com/neo/MyBatisPlusTest.java new file mode 100644 index 0000000..d682335 --- /dev/null +++ b/spring-boot-mybatis-plus/src/test/java/com/neo/MyBatisPlusTest.java @@ -0,0 +1,102 @@ +package com.neo; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.neo.mapper.UserMapper; +import com.neo.model.User; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class MyBatisPlusTest { + + @Autowired + private UserMapper userMapper; + + + @Test + public void testSelectOne() { + User user = userMapper.selectById(1L); + System.out.println(user); + } + + @Test + public void testInsert() { + User user = new User(); + user.setName("微笑"); + user.setAge(3); + user.setEmail("neo@tooool.org"); + assertThat(userMapper.insert(user)).isGreaterThan(0); + // 成功直接拿会写的 ID + assertThat(user.getId()).isNotNull(); + } + + @Test + public void testDelete() { + assertThat(userMapper.deleteById(3L)).isGreaterThan(0); + assertThat(userMapper.delete(new QueryWrapper() + .lambda().eq(User::getName, "smile"))).isGreaterThan(0); + } + + @Test + public void testUpdate() { + User user = userMapper.selectById(2); + assertThat(user.getAge()).isEqualTo(36); + assertThat(user.getName()).isEqualTo("keep"); + + userMapper.update( + null, + Wrappers.lambdaUpdate().set(User::getEmail, "123@123").eq(User::getId, 2) + ); + assertThat(userMapper.selectById(2).getEmail()).isEqualTo("123@123"); + } + + @Test + public void testSelect() { + List userList = userMapper.selectList(null); + Assert.assertEquals(5, userList.size()); + userList.forEach(System.out::println); + } + + @Test + public void testSelectCondition() { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.select("max(id) as id"); + List userList = userMapper.selectList(wrapper); + userList.forEach(System.out::println); + } + + @Test + public void testPage() { + System.out.println("----- baseMapper 自带分页 ------"); + Page page = new Page<>(1, 2); + IPage userIPage = userMapper.selectPage(page, new QueryWrapper() + .gt("age", 6)); + assertThat(page).isSameAs(userIPage); + System.out.println("总条数 ------> " + userIPage.getTotal()); + System.out.println("当前页数 ------> " + userIPage.getCurrent()); + System.out.println("当前每页显示数 ------> " + userIPage.getSize()); + print(userIPage.getRecords()); + System.out.println("----- baseMapper 自带分页 ------"); + } + + private void print(List list) { + if (!CollectionUtils.isEmpty(list)) { + list.forEach(System.out::println); + } + } + + +} \ No newline at end of file