实体设计
实体类
- 博客 Blog:
分类、标签、评论、用户、标题、内容、首图、标记、浏览次数、赞赏开启、评论开启、版权开启、发布状态、是否推荐、创建时间、更新时间 - 博客分类 Type:
名称 - 博客标签 Tag
名称 - 博客评论 Comment
昵称、邮箱、头像、评论内容、创建时间、评论对象 - 用户 User
昵称、用户名、密码、邮箱、类型、头像、创建时间、更新时间
应用分层
- 终端显示层
- 请求处理层(Web层)
- 业务逻辑层(Service层)
- 持久层(Dao层)
- 数据源(MySQL)
命名约定
Service/Dao层方法命名约定
- 获取单个对象:getXXX()
- 获取多个对象:listXXX()
- 获取统计值:countXXX()
- 插入:saveXXX()或者insertXXX()
- 删除:removeXXX()
- 修改:updateXXX()
实体类创建
需要关注主键生成策略和实体类之间的关系,为自动生成数据库表,需要用到JPA的相关注解:
- @Entity
指出该Java类为实体类,将映射到指定的数据库表 - @Table
当实体类与其映射的数据库表名不同名时,需要使用@Table标注说明 - @Id
指定主键 - @GeneratedValue
标注主键的生成策略 - @Temporal
调整Date精度 - @ManyToOne
多对一关系 - 其他注解
建表
可能会出现建表失败的问题,异常信息如下
GenerationTarget encountered exception accepting command : Error executing DDL "create table hibernate_sequence (next_val bigint) type=MyISAM" via JDBC Statement
主要问题出在 TYPE = MYISAM。MySQL 5.x之后的版本应使用 ENGINE=MyISAM设置存储引擎。
由于使用框架自动进行建表,另寻解决方案,将数据库方言由MySQLDialect改为MySQL5Dialect,重启项目,问题解决。
# 配置数据库方言
spring:
jpa:
database-platform: org.hibernate.dialect.MySQL5Dialect
发现多出一张表:hibernate_sequence,用以记录其他表的主键。具体分析见 https://blog.youkuaiyun.com/zhangli0910/article/details/83580855