栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > 架构设计

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

架构设计 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

一、数据库设计

二、Java架构
整体架构如下:
主要分为:持久层、业务层和控制层。
1、数据集合
省略get和set方法

public class User {
	private Integer id;
	private String nickName;
	private String avatarUrl;
	private String openid;
	private String unionid;
	private String createDate;
}

2、持久层

@Repository
public class UserDao {

	@Autowired
	private JdbcTemplate jdbcTemplate;

	
	public User findUserByOpenid(String openid) {
		String sql = "select * from user where openid = ?";
		User user = null;
		try {
			user = jdbcTemplate.queryForObject(sql, new String[] { openid }, new RowMapper() {
				public User mapRow(ResultSet rs, int rowNum) throws SQLException {
					User user = new User();
					user.setId(rs.getInt("id"));
					user.setNickName(rs.getString("nickName"));
					user.setAvatarUrl(rs.getString("avatarUrl"));
					user.setCreateDate(rs.getString("create_date"));
					user.setOpenid(rs.getString("openid"));
					return user;
				}
			});
		} catch (Exception e) {
			// TODO: handle exception
		}
		return user;
	}

	
	public int addUser(final User user) {
		final String sql = "insert into user (nickName,avatarUrl,openid,unionid) values(?,?,?,?)";
		KeyHolder keyHolder = new GeneratedKeyHolder();
		jdbcTemplate.update(new PreparedStatementCreator() {

			public PreparedStatement createPreparedStatement(Connection conn) throws SQLException {
				PreparedStatement ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
				ps.setString(1, user.getNickName());
				ps.setString(2, user.getAvatarUrl());
				ps.setString(3, user.getOpenid());
				ps.setString(4, user.getUnionid());
				return ps;
			}

		}, keyHolder);
		return keyHolder.getKey().intValue();
	}
}

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

public interface IUserService {
	User findUserByOpenid(String openid);
	int addUser(User user);
}

上面是接口定义。

@Service
public class UserService implements IUserService {
	
	@Autowired
	private UserDao userDao;

	public int addUser(User user) {
		return userDao.addUser(user);
	}

	public User findUserByOpenid(String openid) {
		return userDao.findUserByOpenid(openid);
	}

}

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

@RestController
@RequestMapping("/user")
public class UserController extends BaseController {
	
	@Autowired
	private IUserService userService;
	
	@Autowired
	private WxConfig wxConfig;

	@RequestMapping("/login")
	public String registerAndLogin(
			@RequestParam("code") String code,
			@RequestParam("nickName") String nickName,
			@RequestParam("avatarUrl") String avatarUrl) {
		
		 // 配置请求参数
        Map param = new HashMap();
        param.put("appid", wxConfig.getAppid());
        param.put("secret", wxConfig.getAppsecret());
        param.put("js_code", code);
        param.put("grant_type", "authorization_code");
        // 发送请求
        String wxResult = HttpClientUtil.doGet(wxConfig.getLoginUrl(), param);
        JSONObject jsonObject = JSONObject.fromObject(wxResult);
        // 获取参数返回的
        int errcode = jsonObject.optInt("errcode");
        if (errcode != 0) {
			// 失败
        	return fail();
		}
        String session_key = jsonObject.optString("session_key");
        String openid = jsonObject.optString("openid");
        String unionid = jsonObject.optString("unionid");
        String errmsg = jsonObject.optString("errmsg");
        
        User user = userService.findUserByOpenid(openid);
        if (user != null) {
    		return success(user);
		}
        
        user = new User();
        user.setNickName(nickName);
        user.setAvatarUrl(avatarUrl);
        user.setOpenid(openid);
        user.setUnionid(unionid);
        user.setCreateDate(new Date().toString());
        int id = userService.addUser(user);
        user.setId(id);

		return success(user);
	}
}

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/912372.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号