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

news/2024/5/18 23:11:30 标签: spring, 数据库, java, jdbc

文章目录

  • 准备数据
  • `pom.xml`文件中引用需要的库
  • 准备好dao层接口和service层接口和实现类
  • 准备好 `jdbc.properties` 和 `user.properties`
  • 编写Druid的jdbcConfig配置类
  • 编写spring的配置类`SpringConfig`
  • 编写Dao层的实现类的逻辑
  • 测试类
  • 参考文献

准备数据

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文件中引用需要的库

<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();
        }
    }
    

jdbcproperties__userproperties_98">准备好 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
    

jdbcConfig_118">编写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;
    }
}

springSpringConfig_154">编写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框架教程


http://www.niftyadmin.cn/n/5105563.html

相关文章

2023后端面试题(持续性更新)

1.JAVA8新特性 1、Lambda:表达式- - - - - Lambda允许把函数作为一个方法的参数 2、方法引用- - - - - 可以直接引用已有的java类或对象(实例)的方法或构造器 3、默认方法- - - - - 接口中一个实现的方法 4、Stream Api - - - - - 新添加的stream API(java.util.stream)&#…

【STM32】--PZ6860L,STM32F4,ARM3.0开发板

一、ARM3.0开发板详细介绍 1.开发板整体介绍 &#xff08;1&#xff09;各种外设和主板原理图 &#xff08;2&#xff09;主板供电部分5V和3.3V兼容设计 注意跳线帽 2.STM32核心板介绍 3.核心板原理图 STM32和51的IO对应关系 下载电路 二、ARM3.0开发板ISP下载原理分析 1.I…

大数据Flink(九十九):SQL 函数的解析顺序和系统内置函数

文章目录 SQL 函数的解析顺序和系统内置函数 一、​​​​​​​SQL 函数

通达OA通用版V12的表单js定制开发,良好实践总结-持续更新

通达OA通用版V12的表单js定制开发的良好实践总结-持续更新 良好实践总结在表单中的js区域标准代码2023年10月19日获取地址栏&#xff1a;协议、域名/IP地址端口号获取地址栏的参数&#xff0c;比如run_id、flow_id等向表单中追加自定义css、js文件 良好实践总结 在webroot下的…

Linux搭建文件服务器

搭建简单文件服务器 基于centos7.9搭建http文件服务器基于centos7.9搭建nginx文件服务器基于ubuntu2204搭建http文件服务器 IP环境192.168.200.100VMware17 基于centos7.9搭建http文件服务器 安装httpd [rootlocalhost ~]# yum install -y httpd关闭防火墙以及selinux [roo…

MapReduce面试题+详解

MapReduce篇面试题 1.“MapReduce”程序的主要配置参数是什么&#xff1f; “MapReduce”框架中用户需要指定的主要配置参数有&#xff1a; 分布式文件系统中作业的输入位置作业在分布式文件系统中的输出位置数据输入格式数据输出格式包含地图功能的类包含 reduce 函数的类包…

应用安全四十一:密码安全大全

现在大部分的应用的登录还是以密码为主,不管是社交软件,还是银行的APP。因此,密码也成为攻击者攻击的主要目标。攻击者尝试通过一切方法尝试获取一个系统的用户的密码,包括暴力攻击、撞库攻击、字典攻击、钓鱼攻击以及注入攻击等。本片文章从各个角度介绍密码以及相关的攻击…

【Excel】WPS单元格快速转换表格字母大小写

使用WPS Office打开表格&#xff0c;选择需要处理的单元格或单元格区域。 依次点击「会员专享」选项卡 —>「智能工具箱」。 再点击「格式」—>「大小写」&#xff0c;选择一种大小写转换方式即可。