javaee项目-打卡
yuiyake 9/15/2021
# 打卡项目踩坑、总结
# 明确需求
# web端
- 三级权限
- 超管,管理各类打卡CRUD,管理动态和普通用户CRUD
- 普通用户,发动态打卡,点赞和评论他人动态,创建小组
- 游客,仅浏览
# 小程序端
- 二级权限,普通用户和游客。功能一样。
- 细化:
- 用户注册
- 普通用户可以发图文打卡,视频打卡,小组内打卡
- 番茄钟功能
- 普通用户可以对评论管理和回复
- 可以看到自己的打卡日历
- 成就:连续打卡满12天可以得到一颗星星
# 建表
用户表
- 用户编号 uid
- 用户名 uname
- 用户头像 uavg
- 性别 sex
- 权限 role
- 状态 state
- 手机 phone
- 创建时间 createTime
- 打卡天数 clockDate
- 打卡时间clockTime
管理表
- 管理编号 gid
- 管理密码 gpassword
- 头像 gavg
- 权限 role
状态表
- 用户编号 uid
- 用户状态 state
小组表
- 用户编号 uid
- 用户名 uname
- 小组名 zname
- 打卡类别 clockType
打卡表
- 类别 clockType
# 后端
# 技术栈/使用的辅助插件
- springboot
- mybatis
- lombok
- swagger
- hutool
- fastjson
- druid
- java poi
# 前端
# 技术栈/辅助插件
- vue
- vue-cli
- vueRouter
- vueX
- element-ui
# 困难
# 后端
springboot 数据库主键自增
- 百度了很多方法都是用jpa的注释@GeneratedValue(strategy = GenerationType.AUTO)
@GeneratedValue(strategy = GenerationType.AUTO) private Integer id;
1
2
- 或者用注释@Options(useGeneratedKeys=true, keyProperty="对象.属性")
@Insert("insert into claim_voucher(cause,create_sn,create_time,next_deal_sn,total_amount,status) values(#{cause},#{createSn},#{createTime},#{nextDealSn},#{totalAmount},#{status})") @Options(useGeneratedKeys = true, keyProperty = "id") void insert(ClaimVoucher claimVoucher);
1
2
3- 但!这些方法我都尝试过了,可能是都精准踩坑,没能解决成功。但是我发现用mybatis-generator逆向工程的时候发现他自带的inset 和 insertSelective
都可以主键自增。怎么回事呢?我去研究了一下,然后实现了不靠任何插件和注释的,mybatis自带的主键自增方法:这里解释一下,这个在mapper里用
// mapper.xml <insert id="insert" parameterType="com.clock.bean.Reply"> <selectKey keyProperty="rid" order="AFTER" resultType="java.lang.Integer"> SELECT LAST_INSERT_ID() </selectKey> insert into reply (did, fid, fromuid, touid, rTime, rContents ) values (#{did,jdbcType=INTEGER}, #{fid,jdbcType=INTEGER}, #{fromuid,jdbcType=INTEGER}, #{touid,jdbcType=INTEGER}, #{rtime,jdbcType=TIMESTAMP}, #{rcontents,jdbcType=LONGVARCHAR} ) </insert>
1
2
3
4
5
6
7
8
9
10
11
12是mybatis自带的生成主键的方法,keyProperty是主键的字段名,order是标记这 段代码执行的时间,resultType是返回类型。然后在下面的insert into 语句里,不要加主键!不要加主键!,LAST_INSERT_ID()是记 录上一次主键的值,执行的时候就会自动+1主键,实现主键自增。
返回json数据联调
- 这个问题是在写二级评论的时候遇到的。最终查出来的解决方案也是在mapper里做文章。
mapper层:
<select id="selectUserReply" resultMap="Comments" parameterType="com.clock.bean.vo.RootReplyVO"> SELECT r.*, u.username as touname, u2.username as fromuname FROM `reply` r join user u on u.id = r.touid join user u2 on u2.id = r.fromuid where did = #{did} and fid is null </select> // 重点来了!在这个resultMap里,把selectSonReply <resultMap id="Comments" type="com.clock.bean.vo.RootReplyVO"> <result property="rid" column="rid"/> <collection property="replyVOS" column="rid" javaType="ArrayList" ofType="com.clock.bean.vo.ReplyVO" select="selectSonReply"></collection> </resultMap> <select id="selectSonReply" resultType="com.clock.bean.vo.ReplyVO"> SELECT r.*, u.username as touname, u2.username as fromuname FROM `reply` r join user u on u.id = r.touid join user u2 on u2.id = r.fromuid where fid =#{rid} </select>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
- 这个问题是在写二级评论的时候遇到的。最终查出来的解决方案也是在mapper里做文章。
mapper层:
七牛云储存图片并保存到存储空间里,mysql数据库加上图片url。
# 前端
web页面,评论也是一个困扰了很久的难题。我选择的是二级评论(虽然某种意义上来说是三级),功能是实现父子评论,子子评论,并且评论本身我封装 成了一个组件,那还涉及到了父子传值的问题,还有store缓存问题,permission异步问题。这些后面细讲(先挖坑)
七牛云上传图片:Element upload头像上传组件应用