You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

README.md 11 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346
  1. # spring-boot-demo-orm-mybatis-mapper-page
  2. > 此 demo 演示了 Spring Boot 如何集成通用Mapper插件和分页助手插件,简化Mybatis开发,带给你难以置信的开发体验。
  3. ## pom.xml
  4. ```xml
  5. <?xml version="1.0" encoding="UTF-8"?>
  6. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  7. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  8. <modelVersion>4.0.0</modelVersion>
  9. <artifactId>spring-boot-demo-orm-mybatis-mapper-page</artifactId>
  10. <version>1.0.0-SNAPSHOT</version>
  11. <packaging>jar</packaging>
  12. <name>spring-boot-demo-orm-mybatis-mapper-page</name>
  13. <description>Demo project for Spring Boot</description>
  14. <parent>
  15. <groupId>com.xkcoding</groupId>
  16. <artifactId>spring-boot-demo</artifactId>
  17. <version>1.0.0-SNAPSHOT</version>
  18. </parent>
  19. <properties>
  20. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  21. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  22. <java.version>1.8</java.version>
  23. <mybatis.mapper.version>2.0.4</mybatis.mapper.version>
  24. <mybatis.pagehelper.version>1.2.9</mybatis.pagehelper.version>
  25. </properties>
  26. <dependencies>
  27. <dependency>
  28. <groupId>org.springframework.boot</groupId>
  29. <artifactId>spring-boot-starter</artifactId>
  30. </dependency>
  31. <!-- 通用Mapper -->
  32. <dependency>
  33. <groupId>tk.mybatis</groupId>
  34. <artifactId>mapper-spring-boot-starter</artifactId>
  35. <version>${mybatis.mapper.version}</version>
  36. </dependency>
  37. <!-- 分页助手 -->
  38. <dependency>
  39. <groupId>com.github.pagehelper</groupId>
  40. <artifactId>pagehelper-spring-boot-starter</artifactId>
  41. <version>${mybatis.pagehelper.version}</version>
  42. </dependency>
  43. <dependency>
  44. <groupId>org.springframework.boot</groupId>
  45. <artifactId>spring-boot-starter-test</artifactId>
  46. <scope>test</scope>
  47. </dependency>
  48. <dependency>
  49. <groupId>org.projectlombok</groupId>
  50. <artifactId>lombok</artifactId>
  51. <optional>true</optional>
  52. </dependency>
  53. <dependency>
  54. <groupId>cn.hutool</groupId>
  55. <artifactId>hutool-all</artifactId>
  56. </dependency>
  57. <dependency>
  58. <groupId>com.google.guava</groupId>
  59. <artifactId>guava</artifactId>
  60. </dependency>
  61. <dependency>
  62. <groupId>mysql</groupId>
  63. <artifactId>mysql-connector-java</artifactId>
  64. </dependency>
  65. </dependencies>
  66. <build>
  67. <finalName>spring-boot-demo-orm-mybatis-mapper-page</finalName>
  68. <plugins>
  69. <plugin>
  70. <groupId>org.springframework.boot</groupId>
  71. <artifactId>spring-boot-maven-plugin</artifactId>
  72. </plugin>
  73. </plugins>
  74. </build>
  75. </project>
  76. ```
  77. ## SpringBootDemoOrmMybatisApplication.java
  78. ```java
  79. /**
  80. * <p>
  81. * 启动器
  82. * </p>
  83. *
  84. * @package: com.xkcoding.orm.mybatis.MapperAndPage
  85. * @description: 启动器
  86. * @author: yangkai.shen
  87. * @date: Created in 2018/11/8 13:43
  88. * @copyright: Copyright (c) 2018
  89. * @version: V1.0
  90. * @modified: yangkai.shen
  91. */
  92. @SpringBootApplication
  93. @MapperScan(basePackages = {"com.xkcoding.orm.mybatis.MapperAndPage.mapper"}) // 注意:这里的 MapperScan 是 tk.mybatis.spring.annotation.MapperScan 这个包下的
  94. public class SpringBootDemoOrmMybatisMapperPageApplication {
  95. public static void main(String[] args) {
  96. SpringApplication.run(SpringBootDemoOrmMybatisMapperPageApplication.class, args);
  97. }
  98. }
  99. ```
  100. ## application.yml
  101. ```yaml
  102. spring:
  103. datasource:
  104. url: jdbc:mysql://127.0.0.1:3306/spring-boot-demo?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=GMT%2B8
  105. username: root
  106. password: root
  107. driver-class-name: com.mysql.cj.jdbc.Driver
  108. type: com.zaxxer.hikari.HikariDataSource
  109. initialization-mode: always
  110. continue-on-error: true
  111. schema:
  112. - "classpath:db/schema.sql"
  113. data:
  114. - "classpath:db/data.sql"
  115. hikari:
  116. minimum-idle: 5
  117. connection-test-query: SELECT 1 FROM DUAL
  118. maximum-pool-size: 20
  119. auto-commit: true
  120. idle-timeout: 30000
  121. pool-name: SpringBootDemoHikariCP
  122. max-lifetime: 60000
  123. connection-timeout: 30000
  124. logging:
  125. level:
  126. com.xkcoding: debug
  127. com.xkcoding.orm.mybatis.MapperAndPage.mapper: trace
  128. mybatis:
  129. configuration:
  130. # 下划线转驼峰
  131. map-underscore-to-camel-case: true
  132. mapper-locations: classpath:mappers/*.xml
  133. type-aliases-package: com.xkcoding.orm.mybatis.MapperAndPage.entity
  134. mapper:
  135. mappers:
  136. - tk.mybatis.mapper.common.Mapper
  137. not-empty: true
  138. style: camelhump
  139. wrap-keyword: "`{0}`"
  140. safe-delete: true
  141. safe-update: true
  142. identity: MYSQL
  143. pagehelper:
  144. auto-dialect: true
  145. helper-dialect: mysql
  146. reasonable: true
  147. params: count=countSql
  148. ```
  149. ## UserMapper.java
  150. ```java
  151. /**
  152. * <p>
  153. * UserMapper
  154. * </p>
  155. *
  156. * @package: com.xkcoding.orm.mybatis.MapperAndPage.mapper
  157. * @description: UserMapper
  158. * @author: yangkai.shen
  159. * @date: Created in 2018/11/8 14:15
  160. * @copyright: Copyright (c) 2018
  161. * @version: V1.0
  162. * @modified: yangkai.shen
  163. */
  164. @Component
  165. // 注意:这里的Mapper是tk.mybatis.mapper.common.Mapper包下的
  166. public interface UserMapper extends Mapper<User>, MySqlMapper<User> {
  167. }
  168. ```
  169. ## UserMapperTest.java
  170. ```java
  171. /**
  172. * <p>
  173. * UserMapper 测试
  174. * </p>
  175. *
  176. * @package: com.xkcoding.orm.mybatis.MapperAndPage.mapper
  177. * @description: UserMapper 测试
  178. * @author: yangkai.shen
  179. * @date: Created in 2018/11/8 14:25
  180. * @copyright: Copyright (c) 2018
  181. * @version: V1.0
  182. * @modified: yangkai.shen
  183. */
  184. @Slf4j
  185. public class UserMapperTest extends SpringBootDemoOrmMybatisMapperPageApplicationTests {
  186. @Autowired
  187. private UserMapper userMapper;
  188. /**
  189. * 测试通用Mapper - 保存
  190. */
  191. @Test
  192. public void testInsert() {
  193. String salt = IdUtil.fastSimpleUUID();
  194. User testSave3 = User.builder().name("testSave3").password(SecureUtil.md5("123456" + salt)).salt(salt).email("testSave3@xkcoding.com").phoneNumber("17300000003").status(1).lastLoginTime(new DateTime()).createTime(new DateTime()).lastUpdateTime(new DateTime()).build();
  195. userMapper.insertUseGeneratedKeys(testSave3);
  196. Assert.assertNotNull(testSave3.getId());
  197. log.debug("【测试主键回写#testSave3.getId()】= {}", testSave3.getId());
  198. }
  199. /**
  200. * 测试通用Mapper - 批量保存
  201. */
  202. @Test
  203. public void testInsertList() {
  204. List<User> userList = Lists.newArrayList();
  205. for (int i = 4; i < 14; i++) {
  206. String salt = IdUtil.fastSimpleUUID();
  207. User user = User.builder().name("testSave" + i).password(SecureUtil.md5("123456" + salt)).salt(salt).email("testSave" + i + "@xkcoding.com").phoneNumber("1730000000" + i).status(1).lastLoginTime(new DateTime()).createTime(new DateTime()).lastUpdateTime(new DateTime()).build();
  208. userList.add(user);
  209. }
  210. int i = userMapper.insertList(userList);
  211. Assert.assertEquals(userList.size(), i);
  212. List<Long> ids = userList.stream().map(User::getId).collect(Collectors.toList());
  213. log.debug("【测试主键回写#userList.ids】= {}", ids);
  214. }
  215. /**
  216. * 测试通用Mapper - 删除
  217. */
  218. @Test
  219. public void testDelete() {
  220. Long primaryKey = 1L;
  221. int i = userMapper.deleteByPrimaryKey(primaryKey);
  222. Assert.assertEquals(1, i);
  223. User user = userMapper.selectByPrimaryKey(primaryKey);
  224. Assert.assertNull(user);
  225. }
  226. /**
  227. * 测试通用Mapper - 更新
  228. */
  229. @Test
  230. public void testUpdate() {
  231. Long primaryKey = 1L;
  232. User user = userMapper.selectByPrimaryKey(primaryKey);
  233. user.setName("通用Mapper名字更新");
  234. int i = userMapper.updateByPrimaryKeySelective(user);
  235. Assert.assertEquals(1, i);
  236. User update = userMapper.selectByPrimaryKey(primaryKey);
  237. Assert.assertNotNull(update);
  238. Assert.assertEquals("通用Mapper名字更新", update.getName());
  239. log.debug("【update】= {}", update);
  240. }
  241. /**
  242. * 测试通用Mapper - 查询单个
  243. */
  244. @Test
  245. public void testQueryOne(){
  246. User user = userMapper.selectByPrimaryKey(1L);
  247. Assert.assertNotNull(user);
  248. log.debug("【user】= {}", user);
  249. }
  250. /**
  251. * 测试通用Mapper - 查询全部
  252. */
  253. @Test
  254. public void testQueryAll() {
  255. List<User> users = userMapper.selectAll();
  256. Assert.assertTrue(CollUtil.isNotEmpty(users));
  257. log.debug("【users】= {}", users);
  258. }
  259. /**
  260. * 测试分页助手 - 分页排序查询
  261. */
  262. @Test
  263. public void testQueryByPageAndSort() {
  264. initData();
  265. int currentPage = 1;
  266. int pageSize = 5;
  267. String orderBy = "id desc";
  268. int count = userMapper.selectCount(null);
  269. PageHelper.startPage(currentPage, pageSize, orderBy);
  270. List<User> users = userMapper.selectAll();
  271. PageInfo<User> userPageInfo = new PageInfo<>(users);
  272. Assert.assertEquals(5, userPageInfo.getSize());
  273. Assert.assertEquals(count, userPageInfo.getTotal());
  274. log.debug("【userPageInfo】= {}", userPageInfo);
  275. }
  276. /**
  277. * 测试通用Mapper - 条件查询
  278. */
  279. @Test
  280. public void testQueryByCondition() {
  281. initData();
  282. Example example = new Example(User.class);
  283. // 过滤
  284. example.createCriteria().andLike("name", "%Save1%").orEqualTo("phoneNumber", "17300000001");
  285. // 排序
  286. example.setOrderByClause("id desc");
  287. int count = userMapper.selectCountByExample(example);
  288. // 分页
  289. PageHelper.startPage(1, 3);
  290. // 查询
  291. List<User> userList = userMapper.selectByExample(example);
  292. PageInfo<User> userPageInfo = new PageInfo<>(userList);
  293. Assert.assertEquals(3, userPageInfo.getSize());
  294. Assert.assertEquals(count, userPageInfo.getTotal());
  295. log.debug("【userPageInfo】= {}", userPageInfo);
  296. }
  297. /**
  298. * 初始化数据
  299. */
  300. private void initData() {
  301. testInsertList();
  302. }
  303. }
  304. ```
  305. ## 参考
  306. - 通用Mapper官方文档:https://github.com/abel533/Mapper/wiki/1.integration
  307. - pagehelper 官方文档:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md

一个用来深度学习并实战 spring boot 的项目,目前总共包含 66 个集成demo,已经完成 55 个。

Contributors (1)