• spring的简单使用(配合Druid操作数据库)


    准备数据

    create database if not exists db_spring;
    use db_spring;
    drop table if exists tb_user;
    create table if not exists tb_user
    (
        id      int primary key auto_increment,
        name    varchar(10) not null unique,
        age     int,
        id_card varchar(10)
    );
    
    insert into tb_user(name, age, id_card)
        values ('张三', 23, '10001'),
               ('李四', 18, '10002'),
               ('王五', 34, '10003'),
               ('赵六', 45, '10004');
    
    select * from tb_user;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    pom.xml文件中引用需要的库

    <dependencies>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-contextartifactId>
            <version>6.0.12version>
        dependency>
    
        <dependency>
            <groupId>com.alibabagroupId>
            <artifactId>druidartifactId>
            <version>1.1.10version>
        dependency>
    
        <dependency>
            <groupId>com.mysqlgroupId>
            <artifactId>mysql-connector-jartifactId>
            <version>8.0.33version>
        dependency>
    dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    准备好dao层接口和service层接口和实现类

    • dao层
      // 接口
      package com.test.dao;
      
      public interface UserDao {
          void selectAll();
      
          void selectById();
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    • service层
      // 接口
      package com.test.service;
      
      public interface UserService {
          void selectAll();
      
          void selectById();
      }
      
      // 实现类
      package com.test.service.impl;
      
      import com.test.dao.UserDao;
      import com.test.service.UserService;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.stereotype.Service;
      
      /**
       * Service注解就是标识这个类是service层的bean,spring启动的时候,就会把它放入到Ioc容器中
       * 跟这个相似还有 @Repository 和 @Controller
       */
      @Service
      public class UserServiceImpl implements UserService {
          // Autowired注解是自动装配
          @Autowired
          private UserDao userDao;
      
          @Override
          public void selectAll() {
              userDao.selectAll();
          }
      
          @Override
          public void selectById() {
              userDao.selectById();
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37

    准备好 jdbc.propertiesuser.properties

    这里分开写,是为了练习加载多个配置文件,所以需要再resources资源文件中新建这两个配置文件

    • jdbc.properties
      jdbc.driver=com.mysql.cj.jdbc.Driver
      jdbc.url=jdbc:mysql:///db_spring?useServerPrepStmts=true
      jdbc.username=root
      jdbc.password=root1234
      
      • 1
      • 2
      • 3
      • 4
    • user.properties
      name=张三
      age=23
      sex=男
      idCard=10001
      id=2
      
      • 1
      • 2
      • 3
      • 4
      • 5

    编写Druid的jdbcConfig配置类

    public class JdbcConfig {
        /**
         * 这里通过Value注解从properties配置文件中读取数据
         * 这里的前提,就是在 SpringConfig这个配置类中
         * 通过PropertySource注解引用的资源文件中的配置文件
         */
        @Value("${jdbc.driver}")
        private String driver;
    
        @Value("${jdbc.url}")
        private String url;
    
        @Value("${jdbc.username}")
        private String username;
    
        @Value("${jdbc.password}")
        private String password;
    
        /**
         * 通过 注解Bean来加载第三方
         */
        @Bean
        public DataSource dataSource() {
            DruidDataSource ds = new DruidDataSource();
            ds.setDriverClassName(driver);
            ds.setUrl(url);
            ds.setUsername(username);
            ds.setPassword(password);
    
            return ds;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    编写spring的配置类SpringConfig

    package com.test.config;
    
    import org.springframework.context.annotation.*;
    
    /**
     * Configuration注解:设置当前类为配置类
     * ComponentScan注解:用于扫描指定路径重点bean对象
     * PropertySource注解:用于把指定的配置文件加载借来
     * Import注解:是用于导入三方的bean类进入Ioc容器
     */
    @Configuration
    @ComponentScan({"com.test.dao", "com.test.service"})
    @PropertySource({"classpath:user.properties", "classpath:jdbc.properties"})
    @Import(JdbcConfig.class)
    public class SpringConfig {
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    编写Dao层的实现类的逻辑

    // Repository:表示是dao层的bean
    @Repository("userDao")
    public class UserDaoImpl implements UserDao {
        // 自动装配
        @Autowired
        private DataSource dataSource;
        // 获取配置文件中的数据
        @Value("${id}")
        private int id;
    
        @Override
        public void selectAll() {
            try {
                // 操作数据库
                Connection connection = dataSource.getConnection();
    
                String sql = "select * from tb_user";
    
                PreparedStatement prepareStatement = connection.prepareStatement(sql);
    
                ResultSet resultSet = prepareStatement.executeQuery();
    
                while (resultSet.next()) {
                    int id = resultSet.getInt("id");
                    String name = resultSet.getString("name");
                    String idCard = resultSet.getString("id_card");
                    int age = resultSet.getInt("age");
                    System.out.println("id:" + id + " , name:" + name + " , age:" + age + " , idCard:" + idCard);
                }
                // 释放资源
                resultSet.close();
                prepareStatement.close();
                connection.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }
    
        @Override
        public void selectById() {
            try {
                Connection connection = dataSource.getConnection();
    
                String sql = "select * from tb_user where id = ?";
    
                PreparedStatement prepareStatement = connection.prepareStatement(sql);
    
                prepareStatement.setInt(1, id);
    
                ResultSet resultSet = prepareStatement.executeQuery();
    
                while (resultSet.next()) {
                    int id = resultSet.getInt("id");
                    String name = resultSet.getString("name");
                    String idCard = resultSet.getString("id_card");
                    int age = resultSet.getInt("age");
                    System.out.println("id:" + id + " , name:" + name + " , age:" + age + " , idCard:" + idCard);
                }
                // 释放资源
                resultSet.close();
                prepareStatement.close();
                connection.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68

    测试类

    public class Main {
        public static void main(String[] args) {
            /**
             * 获取Ioc容器
             * 这里是通过SpringConfig这个配置类来获取
             */
            ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
    
            // 获取bean
            UserService userService = ctx.getBean(UserService.class);
    
            userService.selectAll();
            System.out.println("====== selectById ======");
            userService.selectById();
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    参考文献

    1. 黑马程序员SSM框架教程

  • 相关阅读:
    和ChatGPT聊了一会天它的学习反映能力惊呆了我
    第二章 经典同步练习作业
    【计算机操作系统】编程实现FCFS
    ArcGIS实验教程——实验四十六:地图概括功能实验教程
    When Less is More: Investigating Data Pruning for Pretraining LLMs at Scale
    刚开始测试自动化? 这些错误不要犯,一定要看!别踩坑!!
    操作系统面试题
    GE IS420UCSCH2A-C-V0.1-A模拟量输入模块
    【python小项目】用python写一个小工具——番茄钟
    【JAVA基础】【查漏补缺】05 - 面向对象
  • 原文地址:https://blog.csdn.net/ljp345775/article/details/133936953