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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388
  1. # spring-boot-demo-orm-beetlsql
  2. > 此 demo 主要演示了 Spring Boot 如何整合 beetl sql 快捷操作数据库,使用的是beetl官方提供的beetl-framework-starter集成。集成过程不是十分顺利,没有其他的orm框架集成的便捷。
  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-beetlsql</artifactId>
  10. <version>1.0.0-SNAPSHOT</version>
  11. <packaging>jar</packaging>
  12. <name>spring-boot-demo-orm-beetlsql</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. <ibeetl.version>1.1.68.RELEASE</ibeetl.version>
  24. </properties>
  25. <dependencies>
  26. <dependency>
  27. <groupId>org.springframework.boot</groupId>
  28. <artifactId>spring-boot-starter</artifactId>
  29. </dependency>
  30. <dependency>
  31. <groupId>org.springframework.boot</groupId>
  32. <artifactId>spring-boot-starter-jdbc</artifactId>
  33. </dependency>
  34. <dependency>
  35. <groupId>com.ibeetl</groupId>
  36. <artifactId>beetl-framework-starter</artifactId>
  37. <version>${ibeetl.version}</version>
  38. </dependency>
  39. <dependency>
  40. <groupId>org.springframework.boot</groupId>
  41. <artifactId>spring-boot-starter-test</artifactId>
  42. <scope>test</scope>
  43. </dependency>
  44. <dependency>
  45. <groupId>mysql</groupId>
  46. <artifactId>mysql-connector-java</artifactId>
  47. </dependency>
  48. <dependency>
  49. <groupId>cn.hutool</groupId>
  50. <artifactId>hutool-all</artifactId>
  51. </dependency>
  52. <dependency>
  53. <groupId>com.google.guava</groupId>
  54. <artifactId>guava</artifactId>
  55. </dependency>
  56. <dependency>
  57. <groupId>org.projectlombok</groupId>
  58. <artifactId>lombok</artifactId>
  59. <optional>true</optional>
  60. </dependency>
  61. </dependencies>
  62. <build>
  63. <finalName>spring-boot-demo-orm-beetlsql</finalName>
  64. <plugins>
  65. <plugin>
  66. <groupId>org.springframework.boot</groupId>
  67. <artifactId>spring-boot-maven-plugin</artifactId>
  68. </plugin>
  69. </plugins>
  70. </build>
  71. </project>
  72. ```
  73. ## application.yml
  74. > 注意下方注释的地方,**不能解开注释,并且需要通过JavaConfig的方式手动配置数据源**,否则,会导致beetl启动失败,因此,初始化数据库的数据,只能手动在数据库使用 resources/db 下的建表语句和数据库初始化数据。
  75. ```yaml
  76. spring:
  77. datasource:
  78. 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
  79. username: root
  80. password: root
  81. driver-class-name: com.mysql.cj.jdbc.Driver
  82. #### beetlsql starter不能开启下面选项
  83. # type: com.zaxxer.hikari.HikariDataSource
  84. # initialization-mode: always
  85. # continue-on-error: true
  86. # schema:
  87. # - "classpath:db/schema.sql"
  88. # data:
  89. # - "classpath:db/data.sql"
  90. # hikari:
  91. # minimum-idle: 5
  92. # connection-test-query: SELECT 1 FROM DUAL
  93. # maximum-pool-size: 20
  94. # auto-commit: true
  95. # idle-timeout: 30000
  96. # pool-name: SpringBootDemoHikariCP
  97. # max-lifetime: 60000
  98. # connection-timeout: 30000
  99. logging:
  100. level:
  101. com.xkcoding: debug
  102. com.xkcoding.orm.beetlsql: trace
  103. beetl:
  104. enabled: false
  105. beetlsql:
  106. enabled: true
  107. sqlPath: /sql
  108. daoSuffix: Dao
  109. basePackage: com.xkcoding.orm.beetlsql.dao
  110. dbStyle: org.beetl.sql.core.db.MySqlStyle
  111. nameConversion: org.beetl.sql.core.UnderlinedNameConversion
  112. beet-beetlsql:
  113. dev: true
  114. ```
  115. ## BeetlConfig.java
  116. ```java
  117. /**
  118. * <p>
  119. * Beetl数据源配置
  120. * </p>
  121. *
  122. * @package: com.xkcoding.orm.beetlsql.config
  123. * @description: Beetl数据源配置
  124. * @author: yangkai.shen
  125. * @date: Created in 2018/11/14 17:15
  126. * @copyright: Copyright (c) 2018
  127. * @version: V1.0
  128. * @modified: yangkai.shen
  129. */
  130. @Configuration
  131. public class BeetlConfig {
  132. /**
  133. * Beetl需要显示的配置数据源,方可启动项目,大坑,切记!
  134. */
  135. @Bean(name = "datasource")
  136. public DataSource getDataSource(Environment env){
  137. HikariDataSource dataSource = new HikariDataSource();
  138. dataSource.setDriverClassName(env.getProperty("spring.datasource.driver-class-name"));
  139. dataSource.setJdbcUrl(env.getProperty("spring.datasource.url"));
  140. dataSource.setUsername(env.getProperty("spring.datasource.username"));
  141. dataSource.setPassword(env.getProperty("spring.datasource.password"));
  142. return dataSource;
  143. }
  144. }
  145. ```
  146. ## UserDao.java
  147. ```java
  148. /**
  149. * <p>
  150. * UserDao
  151. * </p>
  152. *
  153. * @package: com.xkcoding.orm.beetlsql.dao
  154. * @description: UserDao
  155. * @author: yangkai.shen
  156. * @date: Created in 2018/11/14 16:18
  157. * @copyright: Copyright (c) 2018
  158. * @version: V1.0
  159. * @modified: yangkai.shen
  160. */
  161. @Component
  162. public interface UserDao extends BaseMapper<User> {
  163. }
  164. ```
  165. ## UserServiceImpl.java
  166. ```java
  167. /**
  168. * <p>
  169. * User Service
  170. * </p>
  171. *
  172. * @package: com.xkcoding.orm.beetlsql.service.impl
  173. * @description: User Service
  174. * @author: yangkai.shen
  175. * @date: Created in 2018/11/14 16:28
  176. * @copyright: Copyright (c) 2018
  177. * @version: V1.0
  178. * @modified: yangkai.shen
  179. */
  180. @Service
  181. @Slf4j
  182. public class UserServiceImpl implements UserService {
  183. private final UserDao userDao;
  184. @Autowired
  185. public UserServiceImpl(UserDao userDao) {
  186. this.userDao = userDao;
  187. }
  188. /**
  189. * 新增用户
  190. *
  191. * @param user 用户
  192. */
  193. @Override
  194. public User saveUser(User user) {
  195. userDao.insert(user, true);
  196. return user;
  197. }
  198. /**
  199. * 批量插入用户
  200. *
  201. * @param users 用户列表
  202. */
  203. @Override
  204. public void saveUserList(List<User> users) {
  205. userDao.insertBatch(users);
  206. }
  207. /**
  208. * 根据主键删除用户
  209. *
  210. * @param id 主键
  211. */
  212. @Override
  213. public void deleteUser(Long id) {
  214. userDao.deleteById(id);
  215. }
  216. /**
  217. * 更新用户
  218. *
  219. * @param user 用户
  220. * @return 更新后的用户
  221. */
  222. @Override
  223. public User updateUser(User user) {
  224. if (ObjectUtil.isNull(user)) {
  225. throw new RuntimeException("用户id不能为null");
  226. }
  227. userDao.updateTemplateById(user);
  228. return userDao.single(user.getId());
  229. }
  230. /**
  231. * 查询单个用户
  232. *
  233. * @param id 主键id
  234. * @return 用户信息
  235. */
  236. @Override
  237. public User getUser(Long id) {
  238. return userDao.single(id);
  239. }
  240. /**
  241. * 查询用户列表
  242. *
  243. * @return 用户列表
  244. */
  245. @Override
  246. public List<User> getUserList() {
  247. return userDao.all();
  248. }
  249. /**
  250. * 分页查询
  251. *
  252. * @param currentPage 当前页
  253. * @param pageSize 每页条数
  254. * @return 分页用户列表
  255. */
  256. @Override
  257. public PageQuery<User> getUserByPage(Integer currentPage, Integer pageSize) {
  258. return userDao.createLambdaQuery().page(currentPage, pageSize);
  259. }
  260. }
  261. ```
  262. ## UserServiceTest.java
  263. ```java
  264. /**
  265. * <p>
  266. * User Service测试
  267. * </p>
  268. *
  269. * @package: com.xkcoding.orm.beetlsql.service
  270. * @description: User Service测试
  271. * @author: yangkai.shen
  272. * @date: Created in 2018/11/14 16:30
  273. * @copyright: Copyright (c) 2018
  274. * @version: V1.0
  275. * @modified: yangkai.shen
  276. */
  277. @Slf4j
  278. public class UserServiceTest extends SpringBootDemoOrmBeetlsqlApplicationTests {
  279. @Autowired
  280. private UserService userService;
  281. @Test
  282. public void saveUser() {
  283. String salt = IdUtil.fastSimpleUUID();
  284. 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();
  285. user = userService.saveUser(user);
  286. Assert.assertTrue(ObjectUtil.isNotNull(user.getId()));
  287. log.debug("【user】= {}", user);
  288. }
  289. @Test
  290. public void saveUserList() {
  291. List<User> users = Lists.newArrayList();
  292. for (int i = 5; i < 15; i++) {
  293. String salt = IdUtil.fastSimpleUUID();
  294. 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();
  295. users.add(user);
  296. }
  297. userService.saveUserList(users);
  298. Assert.assertTrue(userService.getUserList().size() > 2);
  299. }
  300. @Test
  301. public void deleteUser() {
  302. userService.deleteUser(1L);
  303. User user = userService.getUser(1L);
  304. Assert.assertTrue(ObjectUtil.isNull(user));
  305. }
  306. @Test
  307. public void updateUser() {
  308. User user = userService.getUser(2L);
  309. user.setName("beetlSql 修改后的名字");
  310. User update = userService.updateUser(user);
  311. Assert.assertEquals("beetlSql 修改后的名字", update.getName());
  312. log.debug("【update】= {}", update);
  313. }
  314. @Test
  315. public void getUser() {
  316. User user = userService.getUser(1L);
  317. Assert.assertNotNull(user);
  318. log.debug("【user】= {}", user);
  319. }
  320. @Test
  321. public void getUserList() {
  322. List<User> userList = userService.getUserList();
  323. Assert.assertTrue(CollUtil.isNotEmpty(userList));
  324. log.debug("【userList】= {}", userList);
  325. }
  326. @Test
  327. public void getUserByPage() {
  328. List<User> userList = userService.getUserList();
  329. PageQuery<User> userByPage = userService.getUserByPage(1, 5);
  330. Assert.assertEquals(5, userByPage.getList().size());
  331. Assert.assertEquals(userList.size(), userByPage.getTotalRow());
  332. log.debug("【userByPage】= {}", JSONUtil.toJsonStr(userByPage));
  333. }
  334. }
  335. ```
  336. ## 参考
  337. - BeetlSQL官方文档:http://ibeetl.com/guide/#beetlsql
  338. - 开源项目:https://gitee.com/yangkb/springboot-beetl-beetlsql
  339. - 博客:https://blog.csdn.net/flystarfly/article/details/82752597

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

Contributors (1)