• 西南交通大学智能监测 培训课程练习2


    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文件里输入

    1. <parent>
    2. <groupId>org.springframework.bootgroupId>
    3. <artifactId>spring-boot-starter-parentartifactId>
    4. <version>2.3.7.RELEASEversion>
    5. parent>
    6. <dependencies>
    7. <dependency>
    8. <groupId>org.springframework.bootgroupId>
    9. <artifactId>spring-boot-starter-webartifactId>
    10. dependency>
    11. <dependency>
    12. <groupId>mysqlgroupId>
    13. <artifactId>mysql-connector-javaartifactId>
    14. <version>5.1.47version>
    15. dependency>
    16. <dependency>
    17. <groupId>com.alibabagroupId>
    18. <artifactId>druid-spring-boot-starterartifactId>
    19. <version>1.2.4version>
    20. dependency>
    21. <dependency>
    22. <groupId>com.baomidougroupId>
    23. <artifactId>mybatis-plus-boot-starterartifactId>
    24. <version>3.4.3.4version>
    25. dependency>
    26. dependencies>

     

    2.2更新Maven

    在界面里点击即可更新

    更新完毕后,在项目目录底下外部文件夹会有导入的文件

     

     

     

     三、配置application.yaml文件

    配置项目运行端口、mysql端口、数据库IP、用户名、密码

    1. server:
    2. # 标记本项目运行在此电脑的 8000 端口
    3. port: 8000
    4. spring:
    5. datasource:
    6. # 数据库地址, mysql 端口默认 3306
    7. url: jdbc:mysql://127.0.0.1:3306/summerytempdb?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&allowMultiQueries=true&useSSL=false&serverTimezone=UTC
    8. # 驱动类,复制
    9. driver-class-name: com.mysql.jdbc.Driver
    10. username: root
    11. 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 接口的实现类

    1. @SpringBootApplication
    2. @MapperScan("ykx.summertrain.system")
    3. public class YKXSpringBootApplication {
    4. }

    @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注解

    1. @Component
    2. public class ProductDO {
    3. private String product_id;
    4. private String name;
    5. private String type;
    6. public String getProduct_id() {
    7. return product_id;
    8. }
    9. public void setProduct_id(String product_id) {
    10. this.product_id = product_id;
    11. }
    12. public String getName() {
    13. return name;
    14. }
    15. public void setName(String name) {
    16. this.name = name;
    17. }
    18. public String getType() {
    19. return type;
    20. }
    21. public void setType(String type) {
    22. this.type = type;
    23. }
    24. @Override
    25. public String toString() {
    26. return "ProductDO{" +
    27. "product_id='" + product_id + '\'' +
    28. ", name='" + name + '\'' +
    29. ", type='" + type + '\'' +
    30. '}';
    31. }
    32. }

    5.2Mapper接口

    product数据表对应的ProductMapper接口,加上@@Mapper注解

    设置相应操作数据库的方法

    1. @Mapper
    2. public interface ProductMapper {
    3. @Select("select *from t_ykx_product;")
    4. ProductDO[] selectProduct();
    5. @Insert("insert into t_ykx_product value(#{e.product_id},#{e.name},#{e.type});")
    6. int insertNewProduct(@Param("e") ProductDO param);
    7. @Delete("delete from t_ykx_product where product_id = #{id};")
    8. int deleteProduct(@Param("id") String id);
    9. @Update("update t_ykx_product set type = #{type} where type = 'BOOK';")
    10. int updateProduct(@Param("type") String type);
    11. }

     

    5.3启动类

    启动类需要用@SpringBootApplication注解声明

    @MapperScan("ykx.summertrain.system")指定了 Mapper 接口所在的包路径

    启动代码固定,复制即可~

    1. @SpringBootApplication
    2. @MapperScan("ykx.summertrain.system")
    3. public class YKXSpringBootApplication {
    4. public static void main(String[] args) {
    5. SpringApplication.run(YKXSpringBootApplication.class,args);
    6. }
    7. }

     

    5.4测试类

    建一个TestClass作为测试类

    加上@Component让spring去管理bean

    类里声明ProductMapper接口属性,并加上@Autowired自动填充

    定义一个init()方法,调用对应的sql方法并输出

    加上@PostConstruct注解使之加载完后就执行init()方法

    最终运行结果如下图所示

    1. @Component
    2. public class TestClass {
    3. @Autowired
    4. private ProductMapper productMapper ;
    5. @PostConstruct
    6. private void init(){
    7. ProductDO[] productDOS = productMapper.selectProduct();
    8. System.out.println("=======查询数据如下=======");
    9. for(int i = 0; i < productDOS.length; i++){
    10. System.out.println(productDOS[i]);
    11. }
    12. ProductDO productDO = new ProductDO();
    13. productDO.setProduct_id("99");
    14. productDO.setName("iPhone14 pro max");
    15. productDO.setType("phone");
    16. System.out.println("插入的数据:" + productDO);
    17. int i1 = productMapper.insertNewProduct(productDO);
    18. System.out.println("插入的行数为:" + i1);
    19. int i2 = productMapper.deleteProduct("10");
    20. System.out.println("删除的行数为:" + i2);
    21. int i3 = productMapper.updateProduct("book");
    22. System.out.println("修改的行数为:" + i3);
    23. }
    24. }

     

    六、执行流程分析

    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)最后接收返回值并输出结果

  • 相关阅读:
    Requests,PyTest
    maven的使用
    Item-Based Recommendations with Hadoop
    第19节课:图标字体与前端框架——提升网页设计的效率与美观
    Linux中19个MySQL数据库管理命令
    信息学奥赛一本通-编程启蒙3349:练60.3 余数个数
    669. 修剪二叉搜索树、108. 将有序数组转换为二叉搜索树、538. 把二叉搜索树转换为累加树
    wilcoxon秩和检验--学习笔记
    java原子类-Atomic
    upload-labs靶场通关指南(5-8关)
  • 原文地址:https://blog.csdn.net/weixin_44572229/article/details/130902743