首先创建一些普通对象,用来与数据库的表建立映射关系,在此我们只定义了员工和部门两个实体来进行示例。
@Entity
@Table(name = "tbl_employee") // 指定关联的数据库的表名
public class Employee implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; // 主键ID
private String name; // 姓名
@ManyToOne
@JoinColumn(name = "department_id")
private Department department; // 部门
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
}
@Entity
@Table(name = "tbl_department")
public class Department implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; // 主键ID
private String name; // 部门名称
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
其中,注解@Entity用来标记该类是一个JPA实体类,并使用了注解@Table指定关联的数据库的表名;注解@Id用来定义记录的唯一标识,并结合注解@GeneratedValue将其设置为自动生成。
在entity层定义数据库的实体类
public class Demo { /** * 主键ID */ @Id @GenericGenerator(name = "system-uuid", strategy = "uuid") @GeneratedValue(generator = "system-uuid") @Column(name = "ID", nullable = false, length = 50) private String id; @NotNull(message = "数据类型不能为空") @Length(max = 25, message = "数据类型最长25个字符") @Column(name = "DATA_TYPE", length = 50, nullable = false) private String dataType; @NotNull(message = "身份证号不能为空") @Length(max = 18, message = "身份证号最长18个字符") @Column(name = "ID_CARD", length = 18) private String idCard; @NotNull(message = "姓名不能为空") @Length(max = 25, message = "姓名最长25个字符") @Column(name = "NAME", length = 50) private String name; /** * 日期 */ @Column(name = "DATE_TIME") private Timestamp dateTime; /** * 创建人、创建部门、创建时间 */ @Length(max = 32, message = "创建人单位最长32个字符") @Column(name = "CREATE_UNIT_ID", length = 32) private String createUnitId; @Length(max = 25, message = "创建人单位最长25个字符") @Column(name = "CREATE_UNIT_NAME", length = 50) private String createUnitName; @Length(max = 32, message = "创建人部门最长32个字符") @Column(name = "CREATE_ORG_ID", length = 32) private String createOrgId; @Length(max = 25, message = "创建人部门最长25个字符") @Column(name = "CREATE_ORG_NAME", length = 50) private String createOrgName; @Length(max = 32, message = "创建人最长32个字符") @Column(name = "CREATE_USER_ID", length = 32) private String createUserId; @Length(max = 25, message = "创建人最长25个字符") @Column(name = "CREATE_USER_NAME", length = 50) private String createUserName; @Column(name = "CREATE_TIME") private Timestamp createTime; /** * 更新人、更新部门、更新时间 */ @Length(max = 32, message = "更新人最长32个字符") @Column(name = "UPDATE_USER_ID", length = 32) private String updateUserId; @Length(max = 32, message = "更新人部门最长32个字符") @Column(name = "UPDATE_ORG_ID", length = 32) private String updateOrgId; @Column(name = "UPDATE_TIME") private Timestamp updateTime; /** * 无需入库,在回显时需要处理的字段 */ @Transient private String dataTypeName; @Transient private String createTimeFormated; } 上面的 ID主键定义
代码生成器
实体类中使用了@Table注解后,想要添加表中不存在的字段,就要使用@Transient这个注解了
代码生成器CodeGenerator(目前只支持SpringBoot/SpringDataJpa)
0、为什么使用代码生成器?
①、节约创建目录和文件的时间
②、节约重复工作时间(增删改查、分页)
1、背景
前段时间写了SSM的代码生成器,调用了Mybatis逆向工程API生成Pojo和Mapper,然后生成Controller、Service模板和一大堆资源文件,代码非常繁杂。SSM的确不太适合自动生成,为什么呢?
①、繁重的配置,拥有大量的资源文件。
②、引入了大量的第三方API,不利于维护升级。
③、Service模板依赖于逆向工程的规则。
2、想法
基于以上几点,发现SpringBoot+SpringDataJpa能完美解决以上几点问题。原因如下:
①、springboot几乎零配置。
②、springboot引入的第三方API较少。
③、SpringDataJpa是“正向工程”,用代码生成数据库。
3、使用
BB了一大堆没用的,等不及的直接看这里。
①首先从github下载
git clone https://github.com/1316151417/CodeGenerator.git
②运行jar包
java -cp CodeGenerator/target/CodeGenerator-0.0.1-SNAPSHOT.jar com.swust.zj.sss.main.SSSGenerator
然后输入>>>基目录、项目名、自定义包名、实体类名,如图:
然后就可以看到项目已经生成好了,如图:
③运行项目
此步需注意:
1、需要查看application.yml中的配置信息是否正确(mysql密码默认123456,等其他信息)
2、需自己添加实体类的字段(除id)
自动生成是只包含id的,如图:
package com.swust.zj.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import com.fasterxml.jackson.annotation.JsonGetter;
@Entity
public class User {
private Integer id;
@Id
@GeneratedValue
@JsonGetter
private Integer getId(){
return id;
}
private void setId(Integer id){
this.id = id;
}
}
然后我们自己添加一个字段
package com.swust.zj.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import com.fasterxml.jackson.annotation.JsonGetter;
@Entity
public class User {
private Integer id;
private String name;
@Id
@GeneratedValue
@JsonGetter
private Integer getId(){
return id;
}
private void setId(Integer id){
this.id = id;
}
private String getName(){
return name;
}
private void setName(String name){
this.name = name;
}
}
代码生成器
一、先用idea自带的数据库连接,连接到orcle或者mysql
二、选中你要代码生成的那个表,然后选择代码生成的目录,就可以进行代码自动生成了