2023.05.27培训
task1:spring、springboot
task2:mybatis
目录



使用Maven,在pom.xml文件里输入
- <parent>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-parentartifactId>
- <version>2.3.7.RELEASEversion>
- parent>
-
- <dependencies>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-webartifactId>
- dependency>
-
-
- <dependency>
- <groupId>mysqlgroupId>
- <artifactId>mysql-connector-javaartifactId>
- <version>5.1.47version>
- dependency>
-
-
- <dependency>
- <groupId>com.alibabagroupId>
- <artifactId>druid-spring-boot-starterartifactId>
- <version>1.2.4version>
- dependency>
-
- <dependency>
- <groupId>com.baomidougroupId>
- <artifactId>mybatis-plus-boot-starterartifactId>
- <version>3.4.3.4version>
- dependency>
- dependencies>
在界面里点击
即可更新
更新完毕后,在项目目录底下外部文件夹会有导入的文件
配置项目运行端口、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
标注一个类为Spring容器的Bean,把普通pojo实例化到spring容器中,可理解为类加上这个注解后,会在后台自动创建一个对象,存入spring容器
@Autowired注解可以放在成员变量上,也可以放在成员变量的set方法上,也可以放在任意方法上表示
自动执行当前方法,如果方法有参数,会在IOC容器中自动寻找同类型参数为其传值。
例如和@Component配合使用,在类上声明@Component注解,再在另一个类的属性里设置这个类的成员变量并在上面加上@Autowired注解,则会自动赋予spring容器中创建的对象
@SpringBootApplication是一个组合注解,用于快捷配置启动类
SpringBoot应用标注在某个类上说明这个类是SpringBoot的主配置类
SpringBoot就应该运行这个类的main方法来启动SpringBoot应用
注意事项:
这个 启动类必须在放在整个项目的最根目录,Spring 在扫描注解的时候是扫描
这个文件所在包以下的所有Class,如果其他类放在了高于这个类或其他目录下就会扫描不到
添加位置:接口上面
作用:添加了@Mapper注解之后,在编译时会生成相应的接口实现类
用于扫描 Mapper 接口,并将其实例化后交给 Spring 容器管理,使得可以在其他组件中使用这些 Mapper 接口的实现类
- @SpringBootApplication
- @MapperScan("ykx.summertrain.system")
- public class YKXSpringBootApplication {
-
- }
@MapperScan 注解指定了 Mapper 接口所在的包路径,这样,在应用启动时Spring Boot 就会自动扫描该包下的所有 Mapper 接口,并将其实例化后交给 Spring 容器管理。
使用 @MapperScan 注解可以避免手动在配置文件中配置 Mapper 的 Bean,从而简化配置过程,提高开发效率。
@PostConstruct注解的方法在项目启动的时候执行这个方法,也可以理解为在spring容器启动的时候执行,可作为一些数据的常规化加载,比如数据字典之类的
四个和数据库相关的注解之一,见名知意,操作select语句
四个和数据库相关的注解之一,见名知意,操作insert语句
四个和数据库相关的注解之一,见名知意,操作delete语句
四个和数据库相关的注解之一,见名知意,操作update语句
一张数据库表对应一个实体类
实体类的属性对应数据库里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 + '\'' +
- '}';
- }
- }
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);
- }
启动类需要用@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);
- }
-
- }
建一个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)最后接收返回值并输出结果