使用Spring连接数据库
文章目录
前言
这篇文章主要介绍了Spring通过DataSource类连接数据库,通过JdbcTemplate类操作数据库的的步骤。并结合以上内容,辅以Spring的IOC特性练习一个脱离前端的物流管理小项目。
物流管理
数据库中的条目:
物流单号(数字类型)、物流公司(varchar)、物流状态(char)
目标:实现增删改查
具体操作
①创建maven项目,导入相关依赖
在使用连接数据库的过程中,我们需要导入的maven依赖包括:Spring Web Mvc
、Spring JDBC
、MySQL Connector/J
,除了这些之外,还可以导入Junit
以便我们进行测试。
旁注:
这里可能有人会疑惑,我们不是要开发Web项目,为啥要导入Spring Web。这么做主要的原因是Spring Web包含了Spring框架的大部分包,包括core、beans啥的,直接导入web包比较方便省事。
这是我导包完成后的pom.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>transmit</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
②搭建项目的包结构
在dao层放操作数据库的类,pojo中创建快递的相关信息,spring配置文件放在resources包下。
③创建快递类
编写Courier类
快递类包含每件快递的信息:快递单号、物流公司、物流状态。并且,这些属性要和数据库中的对应相同。
package com.just.pojo;
/**
* @author Crisp
* @date 2021/4/11
*/
public class Courier {
/**
* id : 物流单号
* deliverCompany : 物流公司
* status : 物流状态
*/
int id;
String deliverCompany;
String status;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getDeliverCompany() {
return deliverCompany;
}
public void setDeliverCompany(String deliverCompany) {
this.deliverCompany = deliverCompany;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
@Override
public String toString() {
return "Courier{" +
"id=" + id +
", deliverCompany='" + deliverCompany + '\'' +
", status='" + status + '\'' +
'}';
}
}
配置Courier的bean
让我们来使用spring创建几个对象看看。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean name="courier01" class="com.just.pojo.Courier">
<property name="id" value="1"/>
<property name="deliverCompany" value="中通"/>
<property name="status" value="包裹正在揽收"/>
</bean>
<bean name="courier02" class="com.just.pojo.Courier">
<property name="id" value="2"/>
<property name="deliverCompany" value="申通"/>
<property name="status" value="请到49栋车库领取快递"/>
</bean>
<bean name="courier03" class="com.just.pojo.Courier">
<property name="id" value="3"/>
<property name="deliverCompany" value="韵达"/>
<property name="status" value="包裹已抵达上海,预计明天送达"/>
</bean>
</beans>
Courier类的测试类:放在test包的同样命名文件下
package com.just.pojo;
import org.junit.Test;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @author Crisp
* @date 2021/4/11
*/
public class CourierTest {
@Test
public void courierTest() {
//加载bean配置文件
ConfigurableApplicationContext context =
new ClassPathXmlApplicationContext("applicationContext.xml");
//获取Courier对象
Courier courier01 = (Courier)context.getBean("courier01");
System.out.println(courier01.getStatus());
}
}
建mysql表
然后在数据库中创建储存物流信息的表,我这边使用的是mysql数据库:
④使用DataSource连接数据库
bean配置连接数据库
接下来,我们就要连接数据库并编写查询语句了。
首先是配置bean,在连接数据库的过程中,我们需要用到DataSource对象和JdbcTemplate对象。
<!--配置DataSource-->
<bean name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url"
value="jdbc:mysql://localhost:3306/spring?characterEncoding=utf8&serverTimezone=UTC%2B8"/>
<property name="username" value="****"/>
<property name="password" value="****"/>
</bean>
<!--配置JdbcTemplate-->
<bean name="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
编写增删改查代码
然后在dao层编写增删改查代码:
首先定义接口规范
package com.just.dao;
import com.just.pojo.Courier;
import java.util.List;
import java.util.Map;
/**
* @author Crisp
* @date 2021/4/11
*/
public interface CourierDao {
/**
* 添加一则快递信息
* @param courier 添加的快递信息
* @return 数据库更改的条数
*/
int addCourier(Courier courier);
/**
* 删除一则快递信息
* @param courier 需要删除的快递
* @return 数据库更改的条目数量
*/
int deleteCourier(Courier courier);
/**
* 更新一则快递信息
* @param courier 需要更新的快递信息
* @return 数据库更新的条目数量
*/
int updateCourier(Courier courier);
/**
* 获取数据库中所有的快递信息
* @return 所有快递信息键值对组成的列表
*/
List<Map<String, Object>> allCourier();
}
然后编写实现类:
每个方法具体的作用和之前接口中写的如出一辙,所以就不再添加注释了。
package com.just.dao.impl;
import com.just.dao.CourierDao;
import com.just.pojo.Courier;
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.List;
import java.util.Map;
/**
* @author Crisp
* @date 2021/4/11
*/
public class CourierDaoImpl implements CourierDao {
JdbcTemplate jdbcTemplate;
@Override
public int addCourier(Courier courier) {
String sql = "insert courier(id, com, status) values(?, ?, ?)";
return jdbcTemplate.update(sql, courier.getId(), courier.getDeliverCompany(), courier.getStatus());
}
@Override
public int deleteCourier(Courier courier) {
String sql = "delete from courier where id = ?";
return jdbcTemplate.update(sql, courier.getId());
}
@Override
public int updateCourier(Courier courier) {
String sql = "update courier set com = ?, status = ? where id = ?";
return jdbcTemplate.update(sql, courier.getDeliverCompany(), courier.getStatus(), courier.getId());
}
@Override
public List<Map<String, Object>> allCourier() {
String sql = "select * from courier";
return jdbcTemplate.queryForList(sql);
}
public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
}
编写完成后,配置bean
<bean name="courierDao" class="com.just.dao.impl.CourierDaoImpl">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
测试功能
到这里,我们的业务逻辑就算完成了,接下来就是测试各种方法的功能了。
add测试
/**
* 添加测试
*/
@Test
public void addTest() {
ConfigurableApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
CourierDaoImpl courierDao = (CourierDaoImpl)context.getBean("courierDao");
Courier courier = (Courier)context.getBean("courier03");
System.out.println("添加" + courierDao.addCourier(courier));
}
delete测试
/**
* 删除测试
*/
@Test
public void delTest() {
ConfigurableApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
CourierDaoImpl courierDao = (CourierDaoImpl)context.getBean("courierDao");
Courier courier = (Courier)context.getBean("courier03");
System.out.println("删除" + courierDao.deleteCourier(courier));
}
update测试
/**
* 更新测试
*/
@Test
public void updateTest() {
ConfigurableApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
CourierDaoImpl courierDao = (CourierDaoImpl)context.getBean("courierDao");
Courier courier = (Courier)context.getBean("courier03");
courier.setDeliverCompany("圆通");
System.out.println("更新" + courierDao.updateCourier(courier));
}
list测试
/**
* 列出所有物流信息
*/
@Test
public void listTest() {
ConfigurableApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
CourierDaoImpl courierDao = (CourierDaoImpl)context.getBean("courierDao");
System.out.println(courierDao.allCourier());
}
总结
以上就是今天要讲的内容,本文仅仅简单介绍了Spring配置连接mysql数据库的方法。在编写的过程中,可以明显的感受到Spring使我们的代码精简了许多。