Skip to content

Commit bece64e

Browse files
committed
init
1 parent 8c1cc95 commit bece64e

File tree

9 files changed

+221
-182
lines changed

9 files changed

+221
-182
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
```$xslt
2+
Controller层的职责
3+
1. 验证收到的请求 异常:返回异常结果,和异常码, 必须的请求参数是否为空,格式是否正确,解析是否正常等
4+
2. 校验请求正常(表示该请求可以被处理):发送给Service层调用 并返回结果
5+
3. 返回结果处理(将用户信息添加到session,操作cookie等)
6+
7+
service层的职责
8+
1. 业务逻辑校验 注册时 输入的两次密码不一致 登陆时用户名不存在 等业务逻辑校验
9+
2. 处理业务,包括事物原子性等 调用DAO层 访问数据库 并缓存查询结果 key:sql语句 value:ResultSet
10+
3. 封装返回结果
11+
12+
DAO层的职责
13+
1. 查询参数校验,查询对象非空校验,插入表数据的唯一校验,以及非空校验等
14+
2. 访问数据库,从数据源连接池获取Connection对象,并创建PreparedStatement,设置sql语句,并设置所需参数。
15+
3. 执行SQL,并对返回的ResultSet进行转换,封装成对象,返回给service层
16+
17+
Controller把通过验证的【原始的请求JSON串】 传递给Service层
18+
19+
Service层 做业务,封装不同的SQLConfig对象(JSONObject)传递给DAO层
20+
21+
DAO层 解析SQLConfig对象 生成可执行的SQL语句,执行后得到结果,封装成JSONObject对象返回。
22+
23+
```

APIJSON-Java-Server/APIJSONDemo/src/main/java/apijson/demo/server/common/StandardSqlExecutor.java

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package apijson.demo.server.common;
22

3+
import com.google.common.collect.Maps;
4+
import lombok.extern.slf4j.Slf4j;
35
import zuo.biao.apijson.Log;
46
import zuo.biao.apijson.server.AbstractSQLExecutor;
57
import zuo.biao.apijson.server.SQLConfig;
@@ -13,25 +15,28 @@
1315

1416
/**
1517
* Created by zhangls on 2019/1/2.
18+
*
1619
* @author zhangls
1720
*/
18-
21+
@Slf4j
1922
public class StandardSqlExecutor extends AbstractSQLExecutor {
2023
private static final String TAG = "DemoSQLExecutor";
2124

2225

2326
static {
2427
try { //加载驱动程序
2528
Class.forName("com.mysql.jdbc.Driver");
26-
Log.d(TAG, "成功加载 MySQL 驱动!");
29+
log.info("【成功加载 MySQL 驱动!");
2730
} catch (ClassNotFoundException e) {
31+
log.info("【严重ERROR】【加载 MySQL 驱动失败!】");
2832
e.printStackTrace();
2933
}
3034

3135
try { //加载驱动程序
3236
Class.forName("org.postgresql.Driver");
33-
Log.d(TAG, "成功加载 PostgresSQL 驱动!");
37+
log.info("【成功加载 PostgresSQL 驱动!");
3438
} catch (ClassNotFoundException e) {
39+
log.info("【严重ERROR】【加载 PostgresSQL 驱动失败!】");
3540
e.printStackTrace();
3641
}
3742
}
@@ -49,7 +54,7 @@ public int executeUpdate(@NotNull SQLConfig config) throws Exception {
4954

5055

5156
//TODO String 改为 enum Database 解决大小写不一致(MySQL, mysql等)导致创建多余的 Connection
52-
private Map<String, Connection> connectionMap = new HashMap<>();
57+
private Map<String, Connection> connectionMap = Maps.newHashMap();
5358

5459
/**
5560
* @param config
@@ -59,8 +64,9 @@ public int executeUpdate(@NotNull SQLConfig config) throws Exception {
5964
@SuppressWarnings("resource")
6065
private PreparedStatement getStatement(@NotNull SQLConfig config) throws Exception {
6166
Connection connection = connectionMap.get(config.getDatabase());
67+
6268
if (connection == null || connection.isClosed()) {
63-
Log.i(TAG, "select connection " + (connection == null ? " = null" : ("isClosed = " + connection.isClosed())));
69+
log.info("【获取数据库链接Connection对象为空或者已经被关闭!】");
6470

6571
if (StandardSqlConfig.DATABASE_POSTGRESQL.equalsIgnoreCase(config.getDatabase())) {
6672
connection = DriverManager.getConnection(config.getDBUri(), config.getDBAccount(), config.getDBPassword());
@@ -71,21 +77,33 @@ private PreparedStatement getStatement(@NotNull SQLConfig config) throws Excepti
7177
connectionMap.put(config.getDatabase(), connection);
7278
}
7379

74-
PreparedStatement statement = connection.prepareStatement(config.getSQL(config.isPrepared()));
75-
List<Object> valueList = config.isPrepared() ? config.getPreparedValueList() : null;
80+
PreparedStatement statement = null;
81+
82+
try {
83+
String sql = config.getSQL(config.isPrepared());
84+
log.info("【★★★重要日志★★★】【执行SQL为:】:{}", sql);
85+
86+
statement = connection.prepareStatement(sql);
7687

77-
if (valueList != null && valueList.isEmpty() == false) {
88+
List<Object> valueList = config.isPrepared() ? config.getPreparedValueList() : null;
7889

79-
for (int i = 0; i < valueList.size(); i++) {
90+
if (valueList != null && !valueList.isEmpty()) {
8091

81-
if (StandardSqlConfig.DATABASE_POSTGRESQL.equalsIgnoreCase(config.getDatabase())) {
82-
statement.setObject(i + 1, valueList.get(i));
83-
} else {
84-
statement.setString(i + 1, "" + valueList.get(i));
92+
for (int i = 0; i < valueList.size(); i++) {
93+
94+
if (StandardSqlConfig.DATABASE_POSTGRESQL.equalsIgnoreCase(config.getDatabase())) {
95+
statement.setObject(i + 1, valueList.get(i));
96+
} else {
97+
String val = String.valueOf(valueList.get(i));
98+
log.info("【重要日志】【执行SQL第 {} 个参数为:】:{}", i + 1, val);
99+
statement.setString(i + 1, val);
100+
}
85101
}
86102
}
103+
} catch (SQLException e) {
104+
log.error("【严重ERROR】【创建PreparedStatement对象失败!】");
105+
e.printStackTrace();
87106
}
88-
// statement.close();
89107

90108
return statement;
91109
}

APIJSON-Java-Server/APIJSONDemo/src/main/java/apijson/demo/server/controller/Controller.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
public class Controller {
3333

3434
/**
35-
* 获取
35+
* 获取 查询
3636
*/
3737
@PostMapping(UtilConstants.Request.GET)
3838
public String get(@RequestBody String request, HttpSession session) {
@@ -42,7 +42,7 @@ public String get(@RequestBody String request, HttpSession session) {
4242
}
4343

4444
/**
45-
* 计数
45+
* 计数 查询count(*)
4646
*/
4747
@PostMapping(UtilConstants.Request.HEAD)
4848
public String head(@RequestBody String request, HttpSession session) {
@@ -72,7 +72,7 @@ public String heads(@RequestBody String request, HttpSession session) {
7272
}
7373

7474
/**
75-
* 新增
75+
* 新增POST
7676
*/
7777
@PostMapping(UtilConstants.Request.POST)
7878
public String post(@RequestBody String request, HttpSession session) {
@@ -82,7 +82,7 @@ public String post(@RequestBody String request, HttpSession session) {
8282
}
8383

8484
/**
85-
* 修改
85+
* 修改 PUT
8686
*/
8787
@PostMapping(UtilConstants.Request.PUT)
8888
public String put(@RequestBody String request, HttpSession session) {
@@ -92,7 +92,7 @@ public String put(@RequestBody String request, HttpSession session) {
9292
}
9393

9494
/**
95-
* 删除
95+
* 删除 DELETE
9696
*/
9797
@PostMapping(UtilConstants.Request.DELETE)
9898
public String delete(@RequestBody String request, HttpSession session) {

APIJSON-Java-Server/APIJSONDemo/src/main/java/apijson/demo/server/controller/LoginController.java

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,21 @@
2222
import static zuo.biao.apijson.RequestMethod.HEADS;
2323

2424
/**
25+
* Controller层的职责
26+
* 1. 验证收到的请求 异常:返回异常结果,和异常码, 必须的请求参数是否为空,格式是否正确,解析是否正常等
27+
* 2. 校验请求正常(表示该请求可以被处理):发送给Service层调用 并返回结果
28+
* 3. 返回结果处理(将用户信息添加到session,操作cookie等)
29+
*
30+
* service层的职责
31+
* 1. 业务逻辑校验 注册时 输入的两次密码不一致 登陆时用户名不存在 等业务逻辑校验
32+
* 2. 处理业务,包括事物原子性等 调用DAO层 访问数据库 并缓存查询结果 key:sql语句 value:ResultSet
33+
* 3. 封装返回结果
34+
*
35+
* DAO层的职责
36+
* 1. 查询参数校验,查询对象非空校验,插入表数据的唯一校验,以及非空校验等
37+
* 2. 访问数据库,从数据源连接池获取Connection对象,并创建PreparedStatement,设置sql语句,并设置所需参数。
38+
* 3. 执行SQL,并对返回的ResultSet进行转换,封装成对象,返回给service层
39+
*
2540
* 登陆
2641
* Created by zhangls on 2019/1/2.
2742
* @author zhangls
@@ -32,8 +47,19 @@ public class LoginController {
3247
/**
3348
* 用户登录
3449
*
35-
* @param request 只用String,避免encode后未decode
3650
* @return
51+
* ##查询手机号是否存在 head方法
52+
* SELECT COUNT(*) AS COUNT FROM `apijson`.`apijson_privacy` WHERE ( (`phone`='13000082001') ) LIMIT 1 OFFSET 0;
53+
*
54+
* ##根据手机号码查询用户隐私表信息,从中获取用户ID
55+
* SELECT * FROM `apijson`.`apijson_privacy` WHERE ( (`phone`='13000082001') ) LIMIT 1 OFFSET 0;
56+
*
57+
* ##查询用户表中信息 验证用户名密码正确性 是否可以登录
58+
* SELECT COUNT(*) AS COUNT FROM `apijson`.`apijson_privacy` WHERE ( (`id`='82001') AND (`_password`='123456') ) LIMIT 1 OFFSET 0;
59+
*
60+
* ##根据用户ID查询用户基本信息 并返回 setSession
61+
* SELECT * FROM `apijson`.`apijson_user` WHERE ( (`id`='82001') ) LIMIT 1 OFFSET 0;
62+
*
3763
* @see <pre>
3864
* {
3965
* "type": 0, //登录方式,非必须 0-密码 1-验证码
@@ -56,6 +82,7 @@ public JSONObject login(@RequestBody String request, HttpSession session) {
5682
requestObject = StandardParser.parseRequest(request);
5783

5884
isPassword = requestObject.getIntValue(UtilConstants.Login.TYPE) == UtilConstants.Login.LOGIN_TYPE_PASSWORD;
85+
5986
phone = requestObject.getString(UtilConstants.Login.PHONE);
6087
password = requestObject.getString(UtilConstants.Login.PASS_WORD);
6188

@@ -86,16 +113,20 @@ public JSONObject login(@RequestBody String request, HttpSession session) {
86113

87114

88115
//手机号是否已注册
116+
//SELECT COUNT(*) AS COUNT FROM `apijson`.`apijson_privacy` WHERE ( (`phone`='13000082001') ) LIMIT 1 OFFSET 0
89117
JSONObject phoneResponse = new StandardParser(HEADS, true).parseResponse(
90118
new JSONRequest(
91119
new Privacy().setPhone(phone)
92120
)
93121
);
94-
if (JSONResponse.isSuccess(phoneResponse) == false) {
122+
123+
if (!JSONResponse.isSuccess(phoneResponse)) {
95124
return StandardParser.newResult(phoneResponse.getIntValue(JSONResponse.KEY_CODE), phoneResponse.getString(JSONResponse.KEY_MSG));
96125
}
126+
97127
JSONResponse response = new JSONResponse(phoneResponse).getJSONResponse(UtilConstants.Public.PRIVACY_);
98-
if (JSONResponse.isExist(response) == false) {
128+
129+
if (!JSONResponse.isExist(response)) {
99130
return StandardParser.newErrorResult(new NotExistException("手机号未注册"));
100131
}
101132

@@ -123,9 +154,11 @@ public JSONObject login(@RequestBody String request, HttpSession session) {
123154
} else {//verify手机验证码登录
124155
response = new JSONResponse(ControllerUtils.headVerify(Verify.TYPE_LOGIN, phone, password));
125156
}
126-
if (JSONResponse.isSuccess(response) == false) {
157+
158+
if (!JSONResponse.isSuccess(response)) {
127159
return response;
128160
}
161+
129162
response = response.getJSONResponse(isPassword ? UtilConstants.Public.PRIVACY_ : UtilConstants.Public.VERIFY_);
130163
if (JSONResponse.isExist(response) == false) {
131164
return StandardParser.newErrorResult(new ConditionErrorException("账号或密码错误"));
@@ -136,11 +169,13 @@ public JSONObject login(@RequestBody String request, HttpSession session) {
136169
new JSONRequest(new User(userId)).setFormat(true)
137170
)
138171
);
172+
139173
User user = response.getObject(User.class);
140174
if (user == null || BaseModel.value(user.getId()) != userId) {
141175
return StandardParser.newErrorResult(new NullPointerException("服务器内部错误"));
142176
}
143177

178+
144179
//登录状态保存至session
145180
//用户id
146181
session.setAttribute(UtilConstants.Login.USER_ID, userId);

APIJSON-Java-Server/APIJSONDemo/src/main/java/zuo/biao/apijson/JSONResponse.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,7 @@ public <T> T getObject(Class<T> clazz) {
284284
* @param clazz
285285
* @return
286286
*/
287+
@Override
287288
public <T> T getObject(String key, Class<T> clazz) {
288289
return getObject(this, key, clazz);
289290
}

0 commit comments

Comments
 (0)