Spring JDBC与MySQL数据库集成实战

在现代软件开发中,Spring框架与关系型数据库的集成是常见的需求。本文将通过一个完整的实例,展示如何在Spring JDBC应用中连接MySQL数据库服务器,并实现基本的CRUD操作。我们将从数据库的创建、Spring配置到代码实现,逐步展开。

一、数据库准备

在开始之前,请确保你已经安装了MySQL数据库服务器。如果没有安装,可以参考相关教程进行下载和安装。接下来,我们需要创建一个数据库和表结构。

以下是创建数据库和表的SQL脚本:

-- 创建数据库
CREATE DATABASE my_schema;

-- 创建表
USE my_schema;
CREATE TABLE PERSON (
    ID BIGINT PRIMARY KEY AUTO_INCREMENT,
    FIRST_NAME VARCHAR(255),
    LAST_NAME VARCHAR(255),
    ADDRESS VARCHAR(255)
);

执行上述脚本后,my_schema数据库中将包含一个名为PERSON的表,用于存储人员信息。

二、Spring JDBC应用开发

1. 数据访问层的实现

我们首先定义一个Person类,用于表示人员信息:

public class Person {
    private long id;
    private String firstName;
    private String lastName;
    private String address;

    // 构造函数、getter和setter省略
}

接着,我们实现一个PersonDao类,用于与数据库交互:

@Repository
public class PersonDao implements Dao<Person> {
    @Autowired
    private DataSource dataSource;
    private JdbcTemplate jdbcTemplate;
    private SimpleJdbcInsert jdbcInsert;

    @PostConstruct
    private void postConstruct() {
        jdbcTemplate = new JdbcTemplate(dataSource);
        jdbcInsert = new SimpleJdbcInsert(dataSource)
                .withTableName("PERSON").usingGeneratedKeyColumns("ID");
    }

    @Override
    public void save(Person person) {
        SqlParameterSource parameters = new BeanPropertySqlParameterSource(person);
        jdbcInsert.execute(parameters);
    }

    @Override
    public List<Person> loadAll() {
        return jdbcTemplate.query("SELECT * FROM PERSON", (resultSet, i) -> {
            return toPerson(resultSet);
        });
    }

    private Person toPerson(ResultSet resultSet) throws SQLException {
        Person person = new Person();
        person.setId(resultSet.getLong("ID"));
        person.setFirstName(resultSet.getString("FIRST_NAME"));
        person.setLastName(resultSet.getString("LAST_NAME"));
        person.setAddress(resultSet.getString("ADDRESS"));
        return person;
    }
}

在上述代码中,我们使用了JdbcTemplateSimpleJdbcInsert,分别用于执行SQL查询和插入操作。@PostConstruct注解确保在Bean初始化后,jdbcTemplatejdbcInsert被正确配置。

2. 业务逻辑层的实现

接下来,我们实现一个PersonClient类,用于调用PersonDao完成业务逻辑:

@Component
public class PersonClient {
    @Autowired
    private Dao<Person> personDao;

    public void process() {
        Person person1 = new Person("Dana", "Whitley", "464 Gorsuch Drive");
        System.out.println("Saving: " + person1);
        personDao.save(person1);

        Person person2 = new Person("Robin", "Cash", "64 Zella Park");
        System.out.println("Saving: " + person2);
        personDao.save(person2);

        List<Person> list = personDao.loadAll();
        System.out.println("Loaded all: " + list);
    }
}

process方法中,我们创建了两个Person对象,并通过personDao将它们保存到数据库中。最后,我们调用loadAll方法查询所有人员信息并打印。

3. Spring配置

为了连接MySQL数据库,我们需要配置DataSource。以下是Spring配置类的代码:

@Configuration
@ComponentScan
public class AppConfig {
    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource ds = new DriverManagerDataSource();
        ds.setDriverClassName(com.mysql.jdbc.Driver.class.getName());
        ds.setUrl("jdbc:mysql://localhost:3306/my_schema");
        ds.setUsername("root");
        ds.setPassword("1234");
        return ds;
    }

    public static void main(String[] args) {
        AnnotationConfigApplicationContext context =
                new AnnotationConfigApplicationContext(AppConfig.class);
        context.getBean(PersonClient.class).process();
    }
}

dataSource方法中,我们使用DriverManagerDataSource配置了MySQL数据库的连接信息,包括驱动类名、连接URL、用户名和密码。

三、运行与输出

运行AppConfig类的main方法后,程序将执行以下操作:

  1. 创建两个Person对象并保存到数据库。
  2. 查询数据库中的所有人员信息并打印。

运行结果如下:

Saving: Person{id=0, firstName='Dana', lastName='Whitley', address='464 Gorsuch Drive'}
Saving: Person{id=0, firstName='Robin', lastName='Cash', address='64 Zella Park'}
Loaded all: [Person{id=1, firstName='Dana', lastName='Whitley', address='464 Gorsuch Drive'}, Person{id=2, firstName='Robin', lastName='Cash', address='64 Zella Park'}]

四、总结

通过本文的实例,我们展示了如何在Spring JDBC应用中连接MySQL数据库,并实现基本的CRUD操作。我们从数据库的创建、Spring配置到代码实现,逐步完成了整个过程。希望本文能帮助你更好地理解和使用Spring JDBC与MySQL的集成。

你可能感兴趣的:(数据库,spring,mysql,个人开发)