在现代软件开发中,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
的表,用于存储人员信息。
我们首先定义一个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;
}
}
在上述代码中,我们使用了JdbcTemplate
和SimpleJdbcInsert
,分别用于执行SQL查询和插入操作。@PostConstruct
注解确保在Bean初始化后,jdbcTemplate
和jdbcInsert
被正确配置。
接下来,我们实现一个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
方法查询所有人员信息并打印。
为了连接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
方法后,程序将执行以下操作:
Person
对象并保存到数据库。运行结果如下:
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的集成。