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框架教程

相关推荐
憨子周34 分钟前
2M的带宽怎么怎么设置tcp滑动窗口以及连接池
java·网络·网络协议·tcp/ip
FIN技术铺2 小时前
Redis集群模式之Redis Sentinel vs. Redis Cluster
数据库·redis·sentinel
霖雨2 小时前
使用Visual Studio Code 快速新建Net项目
java·ide·windows·vscode·编辑器
SRY122404192 小时前
javaSE面试题
java·开发语言·面试
Fiercezm3 小时前
JUC学习
java
无尽的大道3 小时前
Java 泛型详解:参数化类型的强大之处
java·开发语言
ZIM学编程3 小时前
Java基础Day-Sixteen
java·开发语言·windows
我不是星海3 小时前
1.集合体系补充(1)
java·数据结构
P.H. Infinity3 小时前
【RabbitMQ】07-业务幂等处理
java·rabbitmq·java-rabbitmq
爱吃土豆的程序员3 小时前
java XMLStreamConstants.CDATA 无法识别 <![CDATA[]]>
xml·java·cdata