4.6 实体类配置
Springboot的jpa的实体类(和数据库表关联的类)建议直接使用标签解析(不使用xml配置文件)。
一.实体类
所有实体类,都必须要有@Entity标签,才能用在Respository。例如前面讲到的User:
@Entity
public class User{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private String username;
private String password;
private String role;
private String nickname;
private String createDate;
...其他代码;
}
@Entity说明User类是实体
如果仅仅是开头大小写不同,那么不需要指定表,如果是中间有下划线,那么需要用name指定表:
@Entity(name="user")
如果有了这个标签,那么就必须指定主键,也就是User属性里面必须有一个需要标注@Id,在这里是username
然后id通常有生成方式,@GeneratedValue(strategy=GenerationType.AUTO)
GenerationType有四个值:
TABLE:使用一个特定的数据库表格来保存主键。
SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。
IDENTITY:主键由数据库自动生成(主要是自动增长型)
AUTO:主键由程序控制。
如果实体类的其他属性和对应表的字段是相等的,那么其他属性不用任何标注。
例如实体类的username属性,对应表User的username字段。建议一致,减少配置。
数据库的下划线风格的字段定义,例如create_date会和createDate对应
二.IDEA连接数据库
如果有太多的表,一个一个写也是非常麻烦的一件事,我们可以用IDEA生成这些实体类:
首先配置database,点击右上角的“Database”活动页:
弹出框如图所示,点击活动页左上角的“+”:
弹出框,点击DataSource,然后弹出的都是数据库,选择项目使用数据库:
弹出窗口如图:
最关键的是要输入以下几项:
Host:数据库ip地址或者url,如果是本地就输入localhost
Port:端口,如果没有修改过,就是3306
User:数据库用户名
Password:用户名对应的密码
这几项填完,就可以点下面的测试按钮“TestConnection”,成功后会弹出如图所示的提示:
如果是首次连接,那需要下载数据库驱动,点击Host上面的Driver:MySQLDriver,选择中间那个MySQL会自动适配(除非版本5.1在以下):
如果需要指定某个库,那么需要填写Database,例如下面填写的是abc
URL最后的?characterEncoding=utf-8作用是防止中文乱码
然后选择项目用得到的schema:
默认是全部选中
确定后就生效了:
如果后续要修改这些属性,选中后点击上面的“扳手”图标就可以了:
三.IDEA批量生成实体类
在左下角找到persistence:
这里会出现项目名,右键点击,在弹出菜单中选中“GeneratePersistenceMapping”,再选择“ByDataBaseSchema”:
弹出框如图所示:
按照要求填写就可以啦,这里要注意,生成后尽量不要去修改实体类的属性,特别是外键映射生成的属性。
但这个工具不是万能的,外键多对一会出现问题。
把外键生成的实体类,但外键本身又存在,这会造成冲突,Springboot启动失败。
@Entity
public class Entry{
private String id;
private String name;
private String intro;
private String datetime;
private String author;
private Course course;
private User userByAuthor;
private CollectionentryReferencesById;
...其他代码;
@ManyToOne@JoinColumn(name="author",referencedColumnName="username",nullable=false)
public User getUserByAuthor(){
return userByAuthor;
}
...其他代码;
}
这里的author就是外键,同时userByAuthor就是外键对应的实体类,
解决办法二选一:
1.删除author
2.在ManyToOne最后添加这些选项:,insertable=false,updatable=false
变成这样:
四 Specified key was too long; max key length is 1000 bytes
字符类型的字段,会映射成String,但一般没有指定长度,有时候就会出现“Specified key was too long; max key length is 1000 bytes”的错误,这个时候,就需要指定这些字段的长度,例如:
只要这些长度和小于1000就可以了