jpa操作数据库

首先创建一些普通对象,用来与数据库的表建立映射关系,在此我们只定义了员工和部门两个实体来进行示例。 

 

@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

二、选中你要代码生成的那个表,然后选择代码生成的目录,就可以进行代码自动生成了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值