2023.05.27培训
task1:spring、springboot
task2:mybatis
目录
一、使用IDEA创建工程
1.1新建
编辑
1.2选择Maven
1.3创建包
二、添加相关依赖
2.1添加依赖
2.2更新Maven
三、配置application.yaml文件
四、相关注解的使用和理解
4.1@Component
4.2@Autowired
4.3@springBootApplication
4.4@Mapper
4.5@MapperScan
4.6@PostConstruct
4.7@Select
4.8@Insert
4.9@Delete
4.10@Update
五、编写java代码
5.1DO类
5.2Mapper接口
5.3启动类
5.4测试类
六、执行流程分析
一、使用IDEA创建工程
1.1新建
1.2选择Maven
1.3创建包
二、添加相关依赖
2.1添加依赖
使用Maven,在pom.xml文件里输入
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.7.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Mysql Connector -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- Druid 数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.4</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3.4</version>
</dependency>
</dependencies>
2.2更新Maven
在界面里点击即可更新
更新完毕后,在项目目录底下外部文件夹会有导入的文件
三、配置application.yaml文件
配置项目运行端口、mysql端口、数据库IP、用户名、密码
server:
# 标记本项目运行在此电脑的 8000 端口
port: 8000
spring:
datasource:
# 数据库地址, mysql 端口默认 3306
url: jdbc:mysql://127.0.0.1:3306/summerytempdb?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&allowMultiQueries=true&useSSL=false&serverTimezone=UTC
# 驱动类,复制
driver-class-name: com.mysql.jdbc.Driver
username: root
password: ykxykx
四、相关注解的使用和理解
4.1@Component
标注一个类为Spring容器的Bean,把普通pojo实例化到spring容器中,可理解为类加上这个注解后,会在后台自动创建一个对象,存入spring容器
4.2@Autowired
@Autowired注解可以放在成员变量上,也可以放在成员变量的set方法上,也可以放在任意方法上表示
自动执行当前方法,如果方法有参数,会在IOC容器中自动寻找同类型参数为其传值。
例如和@Component配合使用,在类上声明@Component注解,再在另一个类的属性里设置这个类的成员变量并在上面加上@Autowired注解,则会自动赋予spring容器中创建的对象
4.3@springBootApplication
@SpringBootApplication是一个组合注解,用于快捷配置启动类
SpringBoot应用标注在某个类上说明这个类是SpringBoot的主配置类
SpringBoot就应该运行这个类的main方法来启动SpringBoot应用
注意事项:
这个 启动类必须在放在整个项目的最根目录,Spring 在扫描注解的时候是扫描
这个文件所在包以下的所有Class
,如果其他类放在了高于这个类或其他目录下就会扫描不到
4.4@Mapper
添加位置:接口上面
作用:添加了@Mapper注解之后,在编译时会生成相应的接口实现类
4.5@MapperScan
用于扫描 Mapper 接口,并将其实例化后交给 Spring 容器管理,使得可以在其他组件中使用这些 Mapper 接口的实现类
@SpringBootApplication
@MapperScan("ykx.summertrain.system")
public class YKXSpringBootApplication {
}
@MapperScan 注解指定了 Mapper 接口所在的包路径,这样,在应用启动时Spring Boot 就会自动扫描该包下的所有 Mapper 接口,并将其实例化后交给 Spring 容器管理。
使用 @MapperScan 注解可以避免手动在配置文件中配置 Mapper 的 Bean,从而简化配置过程,提高开发效率。
4.6@PostConstruct
@PostConstruct注解的方法在项目启动的时候执行这个方法,也可以理解为在spring容器启动的时候执行,可作为一些数据的常规化加载,比如数据字典之类的
4.7@Select
四个和数据库相关的注解之一,见名知意,操作select语句
4.8@Insert
四个和数据库相关的注解之一,见名知意,操作insert语句
4.9@Delete
四个和数据库相关的注解之一,见名知意,操作delete语句
4.10@Update
四个和数据库相关的注解之一,见名知意,操作update语句
五、编写java代码
5.1DO类
一张数据库表对应一个实体类
实体类的属性对应数据库里product表的字段
并给该类加上@Component注解
@Component
public class ProductDO {
private String product_id;
private String name;
private String type;
public String getProduct_id() {
return product_id;
}
public void setProduct_id(String product_id) {
this.product_id = product_id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
@Override
public String toString() {
return "ProductDO{" +
"product_id='" + product_id + '\'' +
", name='" + name + '\'' +
", type='" + type + '\'' +
'}';
}
}
5.2Mapper接口
product数据表对应的ProductMapper接口,加上@@Mapper注解
设置相应操作数据库的方法
@Mapper
public interface ProductMapper {
@Select("select *from t_ykx_product;")
ProductDO[] selectProduct();
@Insert("insert into t_ykx_product value(#{e.product_id},#{e.name},#{e.type});")
int insertNewProduct(@Param("e") ProductDO param);
@Delete("delete from t_ykx_product where product_id = #{id};")
int deleteProduct(@Param("id") String id);
@Update("update t_ykx_product set type = #{type} where type = 'BOOK';")
int updateProduct(@Param("type") String type);
}
5.3启动类
启动类需要用@SpringBootApplication注解声明
@MapperScan("ykx.summertrain.system")指定了 Mapper 接口所在的包路径
启动代码固定,复制即可~
@SpringBootApplication
@MapperScan("ykx.summertrain.system")
public class YKXSpringBootApplication {
public static void main(String[] args) {
SpringApplication.run(YKXSpringBootApplication.class,args);
}
}
5.4测试类
建一个TestClass作为测试类
加上@Component让spring去管理bean
类里声明ProductMapper接口属性,并加上@Autowired自动填充
定义一个init()方法,调用对应的sql方法并输出
加上@PostConstruct注解使之加载完后就执行init()方法
最终运行结果如下图所示
@Component
public class TestClass {
@Autowired
private ProductMapper productMapper ;
@PostConstruct
private void init(){
ProductDO[] productDOS = productMapper.selectProduct();
System.out.println("=======查询数据如下=======");
for(int i = 0; i < productDOS.length; i++){
System.out.println(productDOS[i]);
}
ProductDO productDO = new ProductDO();
productDO.setProduct_id("99");
productDO.setName("iPhone14 pro max");
productDO.setType("phone");
System.out.println("插入的数据:" + productDO);
int i1 = productMapper.insertNewProduct(productDO);
System.out.println("插入的行数为:" + i1);
int i2 = productMapper.deleteProduct("10");
System.out.println("删除的行数为:" + i2);
int i3 = productMapper.updateProduct("book");
System.out.println("修改的行数为:" + i3);
}
}
六、执行流程分析
1)在类上声明@Component注解,后台自动创建一个对象放在spring容器里,使用@Autowired可以获取这个对象
2)启动类声明了@MapperScan("ykx.summertrain.system") 会在项目里去找@Mapper注解
3)ProductMapper接口声明了@Mapper注解,将其对象放入容器内
4)TestClass声明了ProductMapper类型的属性,且加了@Autowired注解,所以将其对象赋给它
5)执行PostConstruct代码,调用ProductMapper里面的方法,mybatis分析方法,发现加有sql语句的注解,就在数据库里执行括号内的sql语句并返回结果
6)返回的结果自动封装好,就是ProductDO对象
7)最后接收返回值并输出结果