SpringBoot从零搭建一个项目(四)用户系统架构

- 日理万妓 2023-03-06 03:56 65阅读 0赞

一、数据库设计
在这里插入图片描述
二、Java架构
整体架构如下:
在这里插入图片描述主要分为:持久层、业务层和控制层。
1、数据集合
省略get和set方法

  1. public class User {
  2. private Integer id;
  3. private String nickName;
  4. private String avatarUrl;
  5. private String openid;
  6. private String unionid;
  7. private String createDate;
  8. }

2、持久层

  1. @Repository
  2. public class UserDao {
  3. @Autowired
  4. private JdbcTemplate jdbcTemplate;
  5. /**
  6. * 根据openid查询用户
  7. * @param openid
  8. * @return
  9. */
  10. public User findUserByOpenid(String openid) {
  11. String sql = "select * from user where openid = ?";
  12. User user = null;
  13. try {
  14. user = jdbcTemplate.queryForObject(sql, new String[] { openid }, new RowMapper<User>() {
  15. public User mapRow(ResultSet rs, int rowNum) throws SQLException {
  16. User user = new User();
  17. user.setId(rs.getInt("id"));
  18. user.setNickName(rs.getString("nickName"));
  19. user.setAvatarUrl(rs.getString("avatarUrl"));
  20. user.setCreateDate(rs.getString("create_date"));
  21. user.setOpenid(rs.getString("openid"));
  22. return user;
  23. }
  24. });
  25. } catch (Exception e) {
  26. // TODO: handle exception
  27. }
  28. return user;
  29. }
  30. /**
  31. * 新增
  32. *
  33. * @param user
  34. * @return
  35. */
  36. public int addUser(final User user) {
  37. final String sql = "insert into user (nickName,avatarUrl,openid,unionid) values(?,?,?,?)";
  38. KeyHolder keyHolder = new GeneratedKeyHolder();
  39. jdbcTemplate.update(new PreparedStatementCreator() {
  40. public PreparedStatement createPreparedStatement(Connection conn) throws SQLException {
  41. PreparedStatement ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
  42. ps.setString(1, user.getNickName());
  43. ps.setString(2, user.getAvatarUrl());
  44. ps.setString(3, user.getOpenid());
  45. ps.setString(4, user.getUnionid());
  46. return ps;
  47. }
  48. }, keyHolder);
  49. return keyHolder.getKey().intValue();
  50. }
  51. }

类名上使用@Repository修饰,自动注入JdbcTemplate 操作数据库。
2、业务层

  1. public interface IUserService {
  2. User findUserByOpenid(String openid);
  3. int addUser(User user);
  4. }

上面是接口定义。

  1. @Service
  2. public class UserService implements IUserService {
  3. @Autowired
  4. private UserDao userDao;
  5. public int addUser(User user) {
  6. return userDao.addUser(user);
  7. }
  8. public User findUserByOpenid(String openid) {
  9. return userDao.findUserByOpenid(openid);
  10. }
  11. }

业务层实现,使用@Service修饰,自动注入持久层。
3、控制层

  1. @RestController
  2. @RequestMapping("/user")
  3. public class UserController extends BaseController {
  4. @Autowired
  5. private IUserService userService;
  6. @Autowired
  7. private WxConfig wxConfig;
  8. @RequestMapping("/login")
  9. public String registerAndLogin(
  10. @RequestParam("code") String code,
  11. @RequestParam("nickName") String nickName,
  12. @RequestParam("avatarUrl") String avatarUrl) {
  13. // 配置请求参数
  14. Map<String, String> param = new HashMap();
  15. param.put("appid", wxConfig.getAppid());
  16. param.put("secret", wxConfig.getAppsecret());
  17. param.put("js_code", code);
  18. param.put("grant_type", "authorization_code");
  19. // 发送请求
  20. String wxResult = HttpClientUtil.doGet(wxConfig.getLoginUrl(), param);
  21. JSONObject jsonObject = JSONObject.fromObject(wxResult);
  22. // 获取参数返回的
  23. int errcode = jsonObject.optInt("errcode");
  24. if (errcode != 0) {
  25. // 失败
  26. return fail();
  27. }
  28. String session_key = jsonObject.optString("session_key");
  29. String openid = jsonObject.optString("openid");
  30. String unionid = jsonObject.optString("unionid");
  31. String errmsg = jsonObject.optString("errmsg");
  32. User user = userService.findUserByOpenid(openid);
  33. if (user != null) {
  34. return success(user);
  35. }
  36. user = new User();
  37. user.setNickName(nickName);
  38. user.setAvatarUrl(avatarUrl);
  39. user.setOpenid(openid);
  40. user.setUnionid(unionid);
  41. user.setCreateDate(new Date().toString());
  42. int id = userService.addUser(user);
  43. user.setId(id);
  44. return success(user);
  45. }
  46. }

使用@RestController修饰,注入业务层。@RequestMapping指定访问路径,这里的路径是/user/login,全路径:http://127.0.0.1:8083/user/login?code=1&nickName=2&avatarUrl=3

这里返回我做了json封装,放在下节来说吧。

发表评论

表情:
评论列表 (有 0 条评论,65人围观)

还没有评论,来说两句吧...

相关阅读