入门初试
确定需求
项目名称:旅途
- 数据库的增删改查
- 页面一级菜单和二级菜单显示。
- 图片上传与删除
- 侧边目录收放展示
- 页面分页
确定使用的工具,框架
springboot框架,idea,mysql,mybatis,maven
设计表结构
主人公信息表:
姓名,小名,身高,体重,年龄,出生年月,职业,爱好,家庭地址,备注
家族成员信息表:
姓名,年龄,出生年月,目前关系,未来关系,备注
线路:
年份,年龄,职位,重大事迹,备注
原型图设计
创建springboot项目
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
创建数据库表
springboot与数据库进行连接
server.port=8080
###数据库连接信息
#数据库驱动
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#连接地址
spring.datasource.url=jdbc:mysql://localhost:3306/firstspringboot?serverTimezone=UTC&characterEncoding=utf-8&useSSL=flase
#数据库账户
spring.datasource.username=root
#数据库密码
spring.datasource.password=997573jqws
#配置jpa
#帮我们自动生成表结构
#spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
创建四个层
-
controller:控制层 控制业务逻辑
- 具体的业务模块流程的控制,controller层主要调用Service层里面的接口控制具体的业务流程,控制的配置也要在配置文件中进行。
-
dao:持久层,主要是和数据库进行交互
- dao层首先胡创建dao接口,接着就可以在配置文件中定义该接口的实现类;接着就可以在模块中调用dao的接口进行数据业务的处理,而不用关注此接口的具体实现是哪一个类,dao层的数据源和数据库实在配置文件中进行配置的。
-
model:实体层,数据库在项目中的类
-
主要用于定义与数据库对象的属性,提供get/set方法,带参和无参的构造方法。
-
@Data :注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法
-
-
service:业务层控制业务
- 业务模块的逻辑应用设计,和DAO层一样都是先设计接口,再创建要实现的类,然后在配置文件中进行配置其实现的关联。接下来就可以在service层调用接口进行业务逻辑应用的处理。
关于spring boot的四个层
看到过一个很形象的比喻:
Controller层像是一个服务员,他把客人(前端)点的菜(数据、请求的类型等)进行汇总什么口味、咸淡、量的多少,交给厨师长(Service层),厨师长则告诉沾板厨师(Dao 1)、汤料房(Dao 2)、配菜厨师(Dao 3)等(统称Dao层)我需要什么样的半成品,副厨们(Dao层)就负责完成厨师长(Service)交代的任务。
关于自动生成数据库表
@Entity注解和@Table注解都是Java Persistence API中定义的一种注解。
@Entity说明这个class是实体类,并且使用默认的orm规则,即class名就是数据库表中表明,class字段名即表中字段名。@Entity注解指明这是一个实体Bean。
import lombok.Data;
import javax.persistence.*;
@Data
@Entity(name = "t_book")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "book_name")
private String name;
@Column(name = "book_author")
private String author;
private Float price;
@Transient
private String description;
}
@Entity注解表示该类是要给实体类,在羡慕启动时会根据该类自动生成一张表,表的名称即@Entity注解中name的值,如果不配置name,默认表明为类名
所有的实体类都要有主键,@Id注解表示该属性是一个主键,@GeneratedValue注解表示注解自动生成,strategy则表示主键的生成策略
默认情况下,生成的表中字段的名称就是实体类中属性的名称,通过@Column注解可以定制生成的字段属性,name表示该属性对应的数据表中字段的名称,nullable表示该字段非空
@Transient注解表示在生成数据库中的表时,该属性被忽略,即不生成对应的字段