From 7fe5bf631d529e9bcac6497ad11213b76d546ed5 Mon Sep 17 00:00:00 2001
From: "Yangkai.Shen" <237497819@qq.com>
Date: Mon, 15 Oct 2018 14:36:59 +0800
Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E9=9B=86=E6=88=90=20Jdbc=20Templa?=
=?UTF-8?q?te=EF=BC=8C=E5=B9=B6=E7=AE=80=E6=98=93=E5=B0=81=E8=A3=85?=
=?UTF-8?q?=E9=80=9A=E7=94=A8=20Dao=20=E5=B1=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 208 +++++++++---------
spring-boot-demo-orm-jdbctemplate/README.md | 2 +
spring-boot-demo-orm-jdbctemplate/pom.xml | 112 ++++++----
...ingBootDemoOrmJdbctemplateApplication.java | 21 +-
.../orm/jdbctemplate/annotation/Auto.java | 24 ++
.../orm/jdbctemplate/annotation/Column.java | 30 +++
.../orm/jdbctemplate/annotation/Ignore.java | 24 ++
.../orm/jdbctemplate/annotation/Table.java | 30 +++
.../orm/jdbctemplate/constant/Const.java | 18 ++
.../controller/UserController.java | 40 ++++
.../orm/jdbctemplate/dao/UserDao.java | 39 ++++
.../orm/jdbctemplate/dao/base/BaseDao.java | 97 ++++++++
.../orm/jdbctemplate/entity/User.java | 81 +++++++
.../jdbctemplate/service/IUserService.java | 26 +++
.../service/impl/UserServiceImpl.java | 49 +++++
.../src/main/resources/application.yml | 29 +++
.../src/main/resources/db/data.sql | 2 +
.../src/main/resources/db/schema.sql | 13 ++
18 files changed, 693 insertions(+), 152 deletions(-)
create mode 100644 spring-boot-demo-orm-jdbctemplate/README.md
create mode 100644 spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/annotation/Auto.java
create mode 100644 spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/annotation/Column.java
create mode 100644 spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/annotation/Ignore.java
create mode 100644 spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/annotation/Table.java
create mode 100644 spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/constant/Const.java
create mode 100644 spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/controller/UserController.java
create mode 100644 spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/dao/UserDao.java
create mode 100644 spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/dao/base/BaseDao.java
create mode 100644 spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/entity/User.java
create mode 100644 spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/service/IUserService.java
create mode 100644 spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/service/impl/UserServiceImpl.java
create mode 100644 spring-boot-demo-orm-jdbctemplate/src/main/resources/db/data.sql
create mode 100644 spring-boot-demo-orm-jdbctemplate/src/main/resources/db/schema.sql
diff --git a/pom.xml b/pom.xml
index 46a5c15..52f4edc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2,110 +2,116 @@
+ * 启动类 + *
+ * + * @package: com.xkcoding.orm.jdbctemplate + * @description: 启动类 + * @author: yangkai.shen + * @date: Created in 2018/10/15 9:50 AM + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ @SpringBootApplication public class SpringBootDemoOrmJdbctemplateApplication { - public static void main(String[] args) { - SpringApplication.run(SpringBootDemoOrmJdbctemplateApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(SpringBootDemoOrmJdbctemplateApplication.class, args); + } } diff --git a/spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/annotation/Auto.java b/spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/annotation/Auto.java new file mode 100644 index 0000000..2f71566 --- /dev/null +++ b/spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/annotation/Auto.java @@ -0,0 +1,24 @@ +package com.xkcoding.orm.jdbctemplate.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + *+ * 自增列注解 + *
+ * + * @package: com.xkcoding.orm.jdbctemplate.annotation + * @description: 自增列注解 + * @author: yangkai.shen + * @date: Created in 2018/10/15 11:23 AM + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD}) +public @interface Auto { +} diff --git a/spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/annotation/Column.java b/spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/annotation/Column.java new file mode 100644 index 0000000..4dd5245 --- /dev/null +++ b/spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/annotation/Column.java @@ -0,0 +1,30 @@ +package com.xkcoding.orm.jdbctemplate.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + *+ * 列注解 + *
+ * + * @package: com.xkcoding.orm.jdbctemplate.annotation + * @description: 列注解 + * @author: yangkai.shen + * @date: Created in 2018/10/15 11:23 AM + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD}) +public @interface Column { + /** + * 列名 + * + * @return 列名 + */ + String name(); +} diff --git a/spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/annotation/Ignore.java b/spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/annotation/Ignore.java new file mode 100644 index 0000000..7a84f3d --- /dev/null +++ b/spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/annotation/Ignore.java @@ -0,0 +1,24 @@ +package com.xkcoding.orm.jdbctemplate.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + *+ * 需要忽略的字段 + *
+ * + * @package: com.xkcoding.orm.jdbctemplate.annotation + * @description: 需要忽略的字段 + * @author: yangkai.shen + * @date: Created in 2018/10/15 1:25 PM + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD}) +public @interface Ignore { +} diff --git a/spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/annotation/Table.java b/spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/annotation/Table.java new file mode 100644 index 0000000..b509548 --- /dev/null +++ b/spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/annotation/Table.java @@ -0,0 +1,30 @@ +package com.xkcoding.orm.jdbctemplate.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + *+ * 表注解 + *
+ * + * @package: com.xkcoding.orm.jdbctemplate.annotation + * @description: 表注解 + * @author: yangkai.shen + * @date: Created in 2018/10/15 11:23 AM + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.TYPE}) +public @interface Table { + /** + * 表名 + * + * @return 表名 + */ + String name(); +} diff --git a/spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/constant/Const.java b/spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/constant/Const.java new file mode 100644 index 0000000..8d4881d --- /dev/null +++ b/spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/constant/Const.java @@ -0,0 +1,18 @@ +package com.xkcoding.orm.jdbctemplate.constant; + +/** + *+ * 常量池 + *
+ * + * @package: com.xkcoding.orm.jdbctemplate.constant + * @description: 常量池 + * @author: yangkai.shen + * @date: Created in 2018/10/15 10:59 AM + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ +public interface Const { + String SALT_PREFIX = "::SpringBootDemo::"; +} diff --git a/spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/controller/UserController.java b/spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/controller/UserController.java new file mode 100644 index 0000000..72829bb --- /dev/null +++ b/spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/controller/UserController.java @@ -0,0 +1,40 @@ +package com.xkcoding.orm.jdbctemplate.controller; + +import cn.hutool.core.lang.Dict; +import com.xkcoding.orm.jdbctemplate.entity.User; +import com.xkcoding.orm.jdbctemplate.service.IUserService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +/** + *+ * User Controller + *
+ * + * @package: com.xkcoding.orm.jdbctemplate.controller + * @description: User Controller + * @author: yangkai.shen + * @date: Created in 2018/10/15 1:58 PM + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ +@RestController +@Slf4j +public class UserController { + private final IUserService userService; + + @Autowired + public UserController(IUserService userService) { + this.userService = userService; + } + + @PostMapping("/user") + public Dict save(@RequestBody User user) { + Boolean save = userService.save(user); + return Dict.create().set("code", save ? 200 : 500).set("msg", save ? "成功" : "失败").set("data", save ? user : null); + } +} diff --git a/spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/dao/UserDao.java b/spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/dao/UserDao.java new file mode 100644 index 0000000..a114008 --- /dev/null +++ b/spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/dao/UserDao.java @@ -0,0 +1,39 @@ +package com.xkcoding.orm.jdbctemplate.dao; + +import com.xkcoding.orm.jdbctemplate.dao.base.BaseDao; +import com.xkcoding.orm.jdbctemplate.entity.User; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Repository; + +/** + *+ * User Dao + *
+ * + * @package: com.xkcoding.orm.jdbctemplate.dao + * @description: User Dao + * @author: yangkai.shen + * @date: Created in 2018/10/15 11:15 AM + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ +@Repository +public class UserDao extends BaseDao+ * Dao基类 + *
+ * + * @package: com.xkcoding.orm.jdbctemplate.dao.base + * @description: Dao基类 + * @author: yangkai.shen + * @date: Created in 2018/10/15 11:28 AM + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ +@Slf4j +public class BaseDao+ * 用户实体类 + *
+ * + * @package: com.xkcoding.orm.jdbctemplate.entity + * @description: 用户实体类 + * @author: yangkai.shen + * @date: Created in 2018/10/15 10:45 AM + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ +@Data +@Table(name = "orm_user") +public class User implements Serializable { + /** + * 主键 + */ + @Auto + private Long id; + + /** + * 用户名 + */ + private String name; + + /** + * 加密后的密码 + */ + private String password; + + /** + * 加密使用的盐 + */ + private String salt; + + /** + * 邮箱 + */ + private String email; + + /** + * 手机号码 + */ + @Column(name = "phone_number") + private String phoneNumber; + + /** + * 状态,-1:逻辑删除,0:禁用,1:启用 + */ + private Integer status; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 上次登录时间 + */ + @Column(name = "last_login_time") + private Date lastLoginTime; + + /** + * 上次更新时间 + */ + @Column(name = "last_update_time") + private Date lastUpdateTime; +} diff --git a/spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/service/IUserService.java b/spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/service/IUserService.java new file mode 100644 index 0000000..332e4cf --- /dev/null +++ b/spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/service/IUserService.java @@ -0,0 +1,26 @@ +package com.xkcoding.orm.jdbctemplate.service; + +import com.xkcoding.orm.jdbctemplate.entity.User; + +/** + *+ * User Service + *
+ * + * @package: com.xkcoding.orm.jdbctemplate.service + * @description: User Service + * @author: yangkai.shen + * @date: Created in 2018/10/15 1:51 PM + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ +public interface IUserService { + /** + * 保存用户 + * + * @param user 用户实体 + * @return 保存成功 {@code true} 保存失败 {@code false} + */ + Boolean save(User user); +} diff --git a/spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/service/impl/UserServiceImpl.java b/spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..3163870 --- /dev/null +++ b/spring-boot-demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/service/impl/UserServiceImpl.java @@ -0,0 +1,49 @@ +package com.xkcoding.orm.jdbctemplate.service.impl; + +import cn.hutool.core.util.IdUtil; +import cn.hutool.crypto.SecureUtil; +import com.xkcoding.orm.jdbctemplate.constant.Const; +import com.xkcoding.orm.jdbctemplate.dao.UserDao; +import com.xkcoding.orm.jdbctemplate.entity.User; +import com.xkcoding.orm.jdbctemplate.service.IUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + *+ * User Service Implement + *
+ * + * @package: com.xkcoding.orm.jdbctemplate.service.impl + * @description: User Service Implement + * @author: yangkai.shen + * @date: Created in 2018/10/15 1:53 PM + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ +@Service +public class UserServiceImpl implements IUserService { + private final UserDao userDao; + + @Autowired + public UserServiceImpl(UserDao userDao) { + this.userDao = userDao; + } + + /** + * 保存用户 + * + * @param user 用户实体 + * @return 保存成功 {@code true} 保存失败 {@code false} + */ + @Override + public Boolean save(User user) { + String rawPass = user.getPassword(); + String salt = IdUtil.simpleUUID(); + String pass = SecureUtil.md5(rawPass+ Const.SALT_PREFIX+salt); + user.setPassword(pass); + user.setSalt(salt); + return userDao.insert(user) > 0; + } +} diff --git a/spring-boot-demo-orm-jdbctemplate/src/main/resources/application.yml b/spring-boot-demo-orm-jdbctemplate/src/main/resources/application.yml index e69de29..1577d7b 100644 --- a/spring-boot-demo-orm-jdbctemplate/src/main/resources/application.yml +++ b/spring-boot-demo-orm-jdbctemplate/src/main/resources/application.yml @@ -0,0 +1,29 @@ +server: + port: 8080 + servlet: + context-path: /demo +spring: + datasource: + 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 + username: root + password: root + driver-class-name: com.mysql.cj.jdbc.Driver + type: com.zaxxer.hikari.HikariDataSource + initialization-mode: always + continue-on-error: true + schema: + - "classpath:db/schema.sql" + data: + - "classpath:db/data.sql" + hikari: + minimum-idle: 5 + connection-test-query: SELECT 1 FROM DUAL + maximum-pool-size: 20 + auto-commit: true + idle-timeout: 30000 + pool-name: SpringBootDemoHikariCP + max-lifetime: 60000 + connection-timeout: 30000 +logging: + level: + com.xkcoding: debug \ No newline at end of file diff --git a/spring-boot-demo-orm-jdbctemplate/src/main/resources/db/data.sql b/spring-boot-demo-orm-jdbctemplate/src/main/resources/db/data.sql new file mode 100644 index 0000000..3ab2b59 --- /dev/null +++ b/spring-boot-demo-orm-jdbctemplate/src/main/resources/db/data.sql @@ -0,0 +1,2 @@ +INSERT INTO `orm_user`(`id`,`name`,`password`,`salt`,`email`,`phone_number`) VALUES (1, 'user_1', 'ff342e862e7c3285cdc07e56d6b8973b', '412365a109674b2dbb1981ed561a4c70', 'user1@xkcoding.com', '17300000001'); +INSERT INTO `orm_user`(`id`,`name`,`password`,`salt`,`email`,`phone_number`) VALUES (2, 'user_2', '6c6bf02c8d5d3d128f34b1700cb1e32c', 'fcbdd0e8a9404a5585ea4e01d0e4d7a0', 'user2@xkcoding.com', '17300000002'); \ No newline at end of file diff --git a/spring-boot-demo-orm-jdbctemplate/src/main/resources/db/schema.sql b/spring-boot-demo-orm-jdbctemplate/src/main/resources/db/schema.sql new file mode 100644 index 0000000..22804e5 --- /dev/null +++ b/spring-boot-demo-orm-jdbctemplate/src/main/resources/db/schema.sql @@ -0,0 +1,13 @@ +DROP TABLE IF EXISTS `orm_user`; +CREATE TABLE `orm_user` ( + `id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '主键', + `name` VARCHAR(32) NOT NULL UNIQUE COMMENT '用户名', + `password` VARCHAR(32) NOT NULL COMMENT '加密后的密码', + `salt` VARCHAR(32) NOT NULL COMMENT '加密使用的盐', + `email` VARCHAR(32) NOT NULL UNIQUE COMMENT '邮箱', + `phone_number` VARCHAR(15) NOT NULL UNIQUE COMMENT '手机号码', + `status` INT(2) NOT NULL DEFAULT 1 COMMENT '状态,-1:逻辑删除,0:禁用,1:启用', + `create_time` DATETIME NOT NULL DEFAULT NOW() COMMENT '创建时间', + `last_login_time` DATETIME DEFAULT NULL COMMENT '上次登录时间', + `last_update_time` DATETIME NOT NULL DEFAULT NOW() COMMENT '上次更新时间' +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Spring Boot Demo Orm 系列示例表';