0
点赞
收藏
分享

微信扫一扫

java小技能:jpa & mybatis

引言

  1. 使用SQL建表
  2. 表和表之间的关系推荐使用代码逻辑去控制,方便进行扩展(分表),不推荐使用注解。

I MyBatis

1.1 引入依赖

<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>

mybatis-plus代码生成器

<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.1.tmp</version>
</dependency>
<!-- mybatisPlus Freemarker 模版引擎 -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
</dependency>

2.2 MybatisX plugin

java小技能:jpa & mybatis_java

2.3 定义sql语句

sql语句是写在一个xml文件内的,而且一般来说这个xml文件名要和接口一致,便于查找与维护。

java小技能:jpa & mybatis_spring_02

xml文件放在resources而且结构要和接口目录一致。

2.4 实体时间自动填充

@TableField(value="update_time",fill = FieldFill.UPDATE)
private LocalDateTime updateTime;

II jpa

注解

含义

@ManyToOne

定义了连接表之间的多对一的关系。

@OneToMany

定义了连接表之间存在一个一对多的关系。

2.1 添加依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

2.2 添加数据库配置

在application.yml文件中添加数据库配置

spring:
datasource:
url: jdbc:mysql://localhost:3306/mytest
type: com.alibaba.druid.pool.DruidDataSource
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver //驱动
jpa:
hibernate:
ddl-auto: update //自动更新
show-sql: true //日志中显示sql语句

2.3 创建实体

@Entity
@Getter
@Setter
public class Person {

@Id
@GeneratedValue
private Long id;

@Column(name = "name", nullable = true, length = 20)
private String name;

@Column(name = "agee", nullable = true, length = 4)
private int age;
}

2.4 接口继承JpaRepository接口

​PersonRepository.java​​接口继承JpaRepository接口

public interface PersonRepository extends JpaRepository<Person, Long> {
}

2.5 使用接口

@Autowired
private PersonRepository personRepository;

@PostMapping(path = "addPerson")
public void addPerson(Person person) {
personRepository.save(person);
}

2.6 注解

注解

解释

@Entity

声明类为实体或表。

@Table

声明表名。

@Basic

指定非约束明确的各个字段。

@Embedded

指定类或它的值是一个可嵌入的类的实例的实体的属性。

@Id

指定的类的属性,用于识别(一个表中的主键)。

@GeneratedValue

指定如何标识属性可以被初始化,例如自动、手动、或从序列表中获得的值。

@Transient

指定的属性,它是不持久的,即:该值永远不会存储在数据库中。

@Column

指定持久属性栏属性。

@SequenceGenerator

指定在@GeneratedValue注解中指定的属性的值。它创建了一个序列。

@TableGenerator

指定在@GeneratedValue批注指定属性的值发生器。它创造了的值生成的表。

@AccessType

这种类型的注释用于设置访问类型。如果设置@AccessType(FIELD),则可以直接访问变量并且不需要getter和setter,但必须为public。如果设置@AccessType(PROPERTY),通过getter和setter方法访问Entity的变量。

@JoinColumn

指定一个实体组织或实体的集合。这是用在多对一和一对多关联。

@UniqueConstraint

指定的字段和用于主要或辅助表的唯一约束。

@ColumnResult

参考使用select子句的SQL查询中的列名。

@ManyToMany

定义了连接表之间的多对多一对多的关系。

@ManyToOne

定义了连接表之间的多对一的关系。

@OneToMany

定义了连接表之间存在一个一对多的关系。

@OneToOne

定义了连接表之间有一个一对一的关系。

@NamedQueries

指定命名查询的列表。

@NamedQuery

指定使用静态名称的查询。

III 预备知识

3.1 FreeMarker

FreeMarker 是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。FreeMarker 是 免费的, 基于Apache许可证2.0版本发布。


修改模版之后,只要编译工程就可以生效,对应的idea的快捷键是command+F9。

3.2 使用maven构建的项目结构

源代码存放与main文件夹下的java内,resouces一般存放配置文件。

在项目编译执行后,resouces与java两个文件夹内,结构相同的文件会被放置在一起。

如:java/com/dao下的文件与resouces/com/dao下的文件会在编译后存放在一起。

举报

相关推荐

0 条评论