Spring 整合 JavaWeb 可以实现由Spring来控制事务和管理数据库,Spring容器可以管理Java Bean,有助于降低代码耦合。
一、Spring 整合 Java Web
1.1 工程搭建
在数据库创建porsche表
DROP TABLE IF EXISTS `porsche`; CREATE TABLE `porsche` ( `por_id` int(11) NOT NULL AUTO_INCREMENT, `por_name` char(100) CHARACTER SET gb2312 COLLATE gb2312_chinese_ci DEFAULT NULL, `por_price` double DEFAULT NULL, `por_stock` int(11) DEFAULT NULL, PRIMARY KEY (`por_id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=gb2312; -- ---------------------------- -- Records of porsche -- ---------------------------- BEGIN; INSERT INTO `porsche` VALUES (2, 'Cayenne', 910000, 30); INSERT INTO `porsche` VALUES (3, 'Macan', 550000, 40); INSERT INTO `porsche` VALUES (4, 'Taycay 2022', 880000, 50); INSERT INTO `porsche` VALUES (5, 'Porsche 911', 1270000, 40); INSERT INTO `porsche` VALUES (6, 'Porsche 718', 540000, 70); INSERT INTO `porsche` VALUES (7, '918 Spyder', 13380000, 10); INSERT INTO `porsche` VALUES (8, 'Cayman', 720000, 30); INSERT INTO `porsche` VALUES (9, 'Boxster', 670000, 110); INSERT INTO `porsche` VALUES (10, 'Carrera GT', 6450000, 20); INSERT INTO `porsche` VALUES (11, 'Taycan Tubo S', 880000, 140); INSERT INTO `porsche` VALUES (12, 'Taycan 2023', 880000, 120); COMMIT; SET FOREIGN_KEY_CHECKS = 1; 复制代码
使用IDEA创建maven工程,在pom.xml文件中添加Spring IoC容器依赖、数据库驱动依赖以及其他依赖如jsp等。
<properties> <spring-version>5.3.13</spring-version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency> <!--spring jdbc依赖--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.16</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.14</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl --> <dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> 复制代码
添加 Add Framework Support,选择Web Application
1.2 增加配置
在resource目录下添加Spring配置文件application.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.alibaba.com/schema/stat http://www.alibaba.com/schema/stat.xsd http://www.springframework.org/schema/tool http://www.springframework.org/schema/tool/spring-tool.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!--包扫描配置--> <context:component-scan base-package="com.citi"/> <!--引用外部配置文件--> <context:property-placeholder location="classpath:database.properties"></context:property-placeholder> <!--数据库连接池配置--> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="${driverClassName}"/> <property name="url" value="${url}" /> <property name="username" value="${username}"/> <property name="password" value="${password}"/> <property name="initialSize" value="${initialSize}"/> <property name="maxActive" value="${maxActive}"/> </bean> <!--配置JDBC Template,注入Spring容器中--> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <constructor-arg name="dataSource" ref="dataSource"></constructor-arg> </bean> <!--事务管理器配置--> <bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!--开启基于注解的配置模式--> <tx:annotation-driven transaction-manager="dataSourceTransactionManager" /> </beans> 复制代码
在resource目录下增加数据库连接信息的配置database.properties
driverClassName=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/tx?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true username=root password=root initialSize=5 maxActive=20 复制代码
1.3 测试
新增entity包,增加porsche表对应的实体类Porsche
public class Porsche { private Integer porId; private String porName; private Double porPrice; private Integer porStock; // 此处省略getter/setter/toString方法 } 复制代码
新增dao包,增加PorscheDao,在类上增加@Repository注解,由Spring容器管理;并使用Spring JdbcTemplate操作数据库
@Repository public class PorscheDao { @Autowired private JdbcTemplate jdbcTemplate; public List<Porsche> selectAll(){ String selectAllSql = "SELECT por_id, por_name, por_price, por_stock FROM porsche"; RowMapper rowMapper = new BeanPropertyRowMapper<>(Porsche.class); List<Porsche> porscheList = jdbcTemplate.query(selectAllSql, rowMapper); return porscheList; } }