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

文章目录

准备数据

sql 复制代码
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;

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

xml 复制代码
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>6.0.12</version>
    </dependency>

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.10</version>
    </dependency>

    <dependency>
        <groupId>com.mysql</groupId>
        <artifactId>mysql-connector-j</artifactId>
        <version>8.0.33</version>
    </dependency>
</dependencies>

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

  • dao层

    java 复制代码
    // 接口
    package com.test.dao;
    
    public interface UserDao {
        void selectAll();
    
        void selectById();
    }
  • service层

    java 复制代码
    // 接口
    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();
        }
    }

准备好 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
  • user.properties

    复制代码
    name=张三
    age=23
    sex=男
    idCard=10001
    id=2

编写Druid的jdbcConfig配置类

java 复制代码
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;
    }
}

编写spring的配置类SpringConfig

java 复制代码
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 {
}

编写Dao层的实现类的逻辑

java 复制代码
// 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();
        }
    }
}

测试类

java 复制代码
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. 黑马程序员SSM框架教程

相关推荐
法欧特斯卡雷特3 分钟前
【译】Spring I&O 社区专家聊 Jimmer ORM
后端·spring·面试
Code季风34 分钟前
Spring 异常处理最佳实践:从基础配置到生产级应用
java·spring boot·spring
回家路上绕了弯35 分钟前
Java 堆深度解析:内存管理的核心战场
java·jvm
Code季风35 分钟前
Spring IoC 容器性能提升指南:启动速度与运行效率优化策略
java·spring·性能优化
谦行1 小时前
前端视角 Java Web 入门手册 5.10:真实世界 Web 开发—— 单元测试
java·spring boot·后端
····懂···1 小时前
开源数据库PostgreSQL专家技术
数据库·postgresql·开源
hhua01231 小时前
理解“无界队列”与“有界队列”及其适用场景
java·队列
Asu52021 小时前
思途SQL学习 0729
数据库·sql·学习
LZQqqqqo1 小时前
C# 接口(interface 定义接口的关键字)
java·开发语言·c#
寒水馨1 小时前
Java 9 新特性解析
java·开发语言·新特性·java9·jdk9