javaee项目-打卡

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.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
      这里解释一下,这个在mapper里用是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
  • 七牛云储存图片并保存到存储空间里,mysql数据库加上图片url。

# 前端

  • web页面,评论也是一个困扰了很久的难题。我选择的是二级评论(虽然某种意义上来说是三级),功能是实现父子评论,子子评论,并且评论本身我封装 成了一个组件,那还涉及到了父子传值的问题,还有store缓存问题,permission异步问题。这些后面细讲(先挖坑)

  • 七牛云上传图片:Element upload头像上传组件应用

Last Updated: 10/17/2021, 8:21:50 PM