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 8.1 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. # spring-boot-demo-orm-mybatis
  2. > 此 demo 演示了 Spring Boot 如何与原生的 mybatis 整合,使用了 mybatis 官方提供的脚手架 `mybatis-spring-boot-starter `可以很容易的和 Spring Boot 整合。
  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</artifactId>
  10. <version>1.0.0-SNAPSHOT</version>
  11. <packaging>jar</packaging>
  12. <name>spring-boot-demo-orm-mybatis</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.version>1.3.2</mybatis.version>
  24. </properties>
  25. <dependencies>
  26. <dependency>
  27. <groupId>org.mybatis.spring.boot</groupId>
  28. <artifactId>mybatis-spring-boot-starter</artifactId>
  29. <version>${mybatis.version}</version>
  30. </dependency>
  31. <dependency>
  32. <groupId>mysql</groupId>
  33. <artifactId>mysql-connector-java</artifactId>
  34. </dependency>
  35. <dependency>
  36. <groupId>org.projectlombok</groupId>
  37. <artifactId>lombok</artifactId>
  38. <optional>true</optional>
  39. </dependency>
  40. <dependency>
  41. <groupId>cn.hutool</groupId>
  42. <artifactId>hutool-all</artifactId>
  43. </dependency>
  44. <dependency>
  45. <groupId>com.google.guava</groupId>
  46. <artifactId>guava</artifactId>
  47. </dependency>
  48. <dependency>
  49. <groupId>org.springframework.boot</groupId>
  50. <artifactId>spring-boot-starter-test</artifactId>
  51. <scope>test</scope>
  52. </dependency>
  53. </dependencies>
  54. <build>
  55. <finalName>spring-boot-demo-orm-mybatis</finalName>
  56. <plugins>
  57. <plugin>
  58. <groupId>org.springframework.boot</groupId>
  59. <artifactId>spring-boot-maven-plugin</artifactId>
  60. </plugin>
  61. </plugins>
  62. </build>
  63. </project>
  64. ```
  65. ## SpringBootDemoOrmMybatisApplication.java
  66. ```java
  67. /**
  68. * <p>
  69. * 启动类
  70. * </p>
  71. *
  72. * @package: com.xkcoding.orm.mybatis
  73. * @description: 启动类
  74. * @author: yangkai.shen
  75. * @date: Created in 2018/11/8 10:52
  76. * @copyright: Copyright (c) 2018
  77. * @version: V1.0
  78. * @modified: yangkai.shen
  79. */
  80. @MapperScan(basePackages = {"com.xkcoding.orm.mybatis.mapper"})
  81. @SpringBootApplication
  82. public class SpringBootDemoOrmMybatisApplication {
  83. public static void main(String[] args) {
  84. SpringApplication.run(SpringBootDemoOrmMybatisApplication.class, args);
  85. }
  86. }
  87. ```
  88. ## application.yml
  89. ```yaml
  90. spring:
  91. datasource:
  92. 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
  93. username: root
  94. password: root
  95. driver-class-name: com.mysql.cj.jdbc.Driver
  96. type: com.zaxxer.hikari.HikariDataSource
  97. initialization-mode: always
  98. continue-on-error: true
  99. schema:
  100. - "classpath:db/schema.sql"
  101. data:
  102. - "classpath:db/data.sql"
  103. hikari:
  104. minimum-idle: 5
  105. connection-test-query: SELECT 1 FROM DUAL
  106. maximum-pool-size: 20
  107. auto-commit: true
  108. idle-timeout: 30000
  109. pool-name: SpringBootDemoHikariCP
  110. max-lifetime: 60000
  111. connection-timeout: 30000
  112. logging:
  113. level:
  114. com.xkcoding: debug
  115. com.xkcoding.orm.mybatis.mapper: trace
  116. mybatis:
  117. configuration:
  118. # 下划线转驼峰
  119. map-underscore-to-camel-case: true
  120. mapper-locations: classpath:mappers/*.xml
  121. type-aliases-package: com.xkcoding.orm.mybatis.entity
  122. ```
  123. ## UserMapper.java
  124. ```java
  125. /**
  126. * <p>
  127. * User Mapper
  128. * </p>
  129. *
  130. * @package: com.xkcoding.orm.mybatis.mapper
  131. * @description: User Mapper
  132. * @author: yangkai.shen
  133. * @date: Created in 2018/11/8 10:54
  134. * @copyright: Copyright (c) 2018
  135. * @version: V1.0
  136. * @modified: yangkai.shen
  137. */
  138. @Mapper
  139. @Component
  140. public interface UserMapper {
  141. /**
  142. * 查询所有用户
  143. *
  144. * @return 用户列表
  145. */
  146. @Select("SELECT * FROM orm_user")
  147. List<User> selectAllUser();
  148. /**
  149. * 根据id查询用户
  150. *
  151. * @param id 主键id
  152. * @return 当前id的用户,不存在则是 {@code null}
  153. */
  154. @Select("SELECT * FROM orm_user WHERE id = #{id}")
  155. User selectUserById(@Param("id") Long id);
  156. /**
  157. * 保存用户
  158. *
  159. * @param user 用户
  160. * @return 成功 - {@code 1} 失败 - {@code 0}
  161. */
  162. int saveUser(@Param("user") User user);
  163. /**
  164. * 删除用户
  165. *
  166. * @param id 主键id
  167. * @return 成功 - {@code 1} 失败 - {@code 0}
  168. */
  169. int deleteById(@Param("id") Long id);
  170. }
  171. ```
  172. ## UserMapper.xml
  173. ```xml
  174. <?xml version="1.0" encoding="UTF-8"?>
  175. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  176. <mapper namespace="com.xkcoding.orm.mybatis.mapper.UserMapper">
  177. <insert id="saveUser">
  178. INSERT INTO `orm_user` (`name`,
  179. `password`,
  180. `salt`,
  181. `email`,
  182. `phone_number`,
  183. `status`,
  184. `create_time`,
  185. `last_login_time`,
  186. `last_update_time`)
  187. VALUES (#{user.name},
  188. #{user.password},
  189. #{user.salt},
  190. #{user.email},
  191. #{user.phoneNumber},
  192. #{user.status},
  193. #{user.createTime},
  194. #{user.lastLoginTime},
  195. #{user.lastUpdateTime})
  196. </insert>
  197. <delete id="deleteById">
  198. DELETE
  199. FROM `orm_user`
  200. WHERE `id` = #{id}
  201. </delete>
  202. </mapper>
  203. ```
  204. ## UserMapperTest.java
  205. ```java
  206. /**
  207. * <p>
  208. * UserMapper 测试类
  209. * </p>
  210. *
  211. * @package: com.xkcoding.orm.mybatis.mapper
  212. * @description: UserMapper 测试类
  213. * @author: yangkai.shen
  214. * @date: Created in 2018/11/8 11:25
  215. * @copyright: Copyright (c) 2018
  216. * @version: V1.0
  217. * @modified: yangkai.shen
  218. */
  219. @Slf4j
  220. public class UserMapperTest extends SpringBootDemoOrmMybatisApplicationTests {
  221. @Autowired
  222. private UserMapper userMapper;
  223. @Test
  224. public void selectAllUser() {
  225. List<User> userList = userMapper.selectAllUser();
  226. Assert.assertTrue(CollUtil.isNotEmpty(userList));
  227. log.debug("【userList】= {}", userList);
  228. }
  229. @Test
  230. public void selectUserById() {
  231. User user = userMapper.selectUserById(1L);
  232. Assert.assertNotNull(user);
  233. log.debug("【user】= {}", user);
  234. }
  235. @Test
  236. public void saveUser() {
  237. String salt = IdUtil.fastSimpleUUID();
  238. User user = 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();
  239. int i = userMapper.saveUser(user);
  240. Assert.assertEquals(1, i);
  241. }
  242. @Test
  243. public void deleteById() {
  244. int i = userMapper.deleteById(1L);
  245. Assert.assertEquals(1, i);
  246. }
  247. }
  248. ```
  249. ## 参考
  250. - Mybatis官方文档:http://www.mybatis.org/mybatis-3/zh/index.html
  251. - Mybatis官方脚手架文档:http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/
  252. - Mybatis整合Spring Boot官方demo:https://github.com/mybatis/spring-boot-starter/tree/master/mybatis-spring-boot-samples

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