一、概述
最近觉得写Android太无聊了,就简单研究加后端框架吧。
二、环境准备
本次就不描述如何去创建Spring工程了,直接实现真实的注册登录操作。当然这只是个demo很多逻辑不够健全的地方就不做细纠了,毕竟精力有限。
1.mysql环境
2.navicat工具
3.maven环境
三、代码实现
由于代码中很多面向接口编程的,我就不放接口代码了,就只具具体的实现的代码,另外数据库的操作也有很多种,我就尽量使用少引入框架的方式。
1.controller实现.里面有些参数的含义可以参考:https://blog.csdn.net/zhangpower1993/article/details/81878773
package com.stormdzh.study.springdemo.controller.user;
import com.stormdzh.study.springdemo.service.user.impl.UserServiceImpl;
import com.stormdzh.study.springdemo.utils.common.rest.RestResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
/**
* 参数解析:
* uid
* nane
* psw
*/
@RestController
@RequestMapping(value = "/user")
public class UserController {
@Autowired
private UserServiceImpl userService;
/**
* 注册接口
*
* @param params
* @return
*/
@RequestMapping(value = "/register")
public Object register(@RequestParam Map<String, String> params) {
Object register = userService.register(params);
if(register == null) {
return RestResponse.success(register);
}else{
return RestResponse.error("用户已存在!");
}
}
/**
* 登录接口
*
* @param params
* @return
*/
@RequestMapping(value = "/login")
public Object login(@RequestParam Map<String, String> params) {
Object login = userService.login(params);
if (login == null) {
return RestResponse.error("登录失败!");
} else {
return RestResponse.success(login);
}
}
/**
* 登出接口
*
* @param params
* @return
*/
@RequestMapping(value = "/logout")
public Object logout(@RequestParam Map<String, String> params) {
return RestResponse.success(userService.logout(params));
}
}
2.service的实现
package com.stormdzh.study.springdemo.service.user.impl;
import com.stormdzh.study.springdemo.bean.user.db.DUser;
import com.stormdzh.study.springdemo.dao.user.impl.UserDaoImpl;
import com.stormdzh.study.springdemo.service.user.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Map;
@Component
public class UserServiceImpl implements UserService {
@Autowired
private UserDaoImpl userDao;
@Override
public Object register(Map<String, String> params) {
DUser user = userDao.query(params);
if (user == null) {
userDao.insert(params);
} else {//用户已经存在
}
return user;
}
@Override
public Object login(Map<String, String> params) {
DUser user = userDao.query(params);
if (user != null && user.getUname().equals(params.get("name")) && user.getUpsw().equals(params.get("psw"))) {
return user;
}
return null;
}
@Override
public Object logout(Map<String, String> params) {
userDao.update(params);
DUser user = userDao.query(params);
return user;
}
}
3.dao数据访问层的实现
package com.stormdzh.study.springdemo.dao.user.impl;
import com.stormdzh.study.springdemo.bean.user.db.DUser;
import com.stormdzh.study.springdemo.dao.user.UserDao;
import com.stormdzh.study.springdemo.dao.user.mapper.UsersRowMapper;
import com.stormdzh.study.springdemo.utils.common.AppUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.stereotype.Component;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* 默认条件是userid
*/
@Component
public class UserDaoImpl implements UserDao {
public String TABLE_NAME = "tb_users";
@Autowired
JdbcTemplate jdbcTemplate;
@Override
public void insert(Map<String, String> params) {
jdbcTemplate.update(new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
String sql = "insert into " + TABLE_NAME + " (uid,uname,upsw) values(?,?,?)";
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, params.get("uid"));
ps.setString(2, params.get("name"));
ps.setString(3, params.get("psw"));
return ps;
}
});
}
@Override
public void delete(Map<String, String> params) {
String sql = "DELETE FROM " + TABLE_NAME + " WHERE uname = " + "'" + params.get("name") + "'";
jdbcTemplate.execute(sql);
}
@Override
public void update(Map<String, String> params) {
String whereStr = "";
String uid = params.get("uid");
String uname = params.get("uname");
if (!AppUtils.isTextEmpty(uid)) {
whereStr = "uid = " + uid;
} else if (!AppUtils.isTextEmpty(uname)) {
whereStr = "uname = '" + uname + "'";
}
Set<Map.Entry<String, String>> entrySet = params.entrySet();
String updateStr = "";
for (Map.Entry<String, String> entry : entrySet) {
String key = entry.getKey();
String value = entry.getValue();
if (!AppUtils.isTextEmpty(updateStr))
updateStr = updateStr + " , ";
updateStr = updateStr + key + "='" + value + "'";
}
if (AppUtils.isTextEmpty(updateStr))
return;
String sql = "update " + TABLE_NAME + " set " + updateStr + " where " + whereStr;
System.out.println("updateUser==>" + sql);
jdbcTemplate.execute(sql);
}
@Override
public DUser query(Map<String, String> params) {
String sql = "SELECT * FROM " + TABLE_NAME + " WHERE uname = " + "'" + params.get("name") + "'";
List<DUser> userList = jdbcTemplate.query(sql, new UsersRowMapper());
if (AppUtils.isEmptyColls(userList)) {
return null;
}
return userList.get(0);
}
}
4.数据库的依赖以及配置
#数据库配置
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/gkkt?useUnicode=true&useJDBCCompliantTimezoneShift=true&serverTimezone=UTC&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=12345678
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 下面方法已经过时
# spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#数据库依赖
<!-- 链接mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
四、效果
1.发送注册请求:http://localhost:8080/user/register?name=user1&psw=123,接口和数据都ok。
image.png
2.发送登录请求:http://localhost:8080/user/login?name=user1&psw=123,调用ok。
image.png
网友评论