JavaWeb:(练习)十七、Spring学习练习三
JavaWeb:(练习)十七、Spring学习练习三
一、学习目标
初次接触Spring框架,学习了Spring的基础,基本了解了Spring的作用和优缺点。
搭建了第一个Spring项目,导入Spring配置文件,学习并练习了IOC控制反转,并且进行Spring Bean管理,以xml配置方式和注解方式分别实现。并且练习了Spring JDBC。由此完成了spring练习一
在练习一的基础上,学习并练习了Spring AOP、Spring事务管理等。以下是在练习一的基础上,所改变的练习代码。
注:关于UserDao改为接口,是因为在学习测试Spring集成MyBatis学习,其中包含错误。
在练习一、练习二的基础上,继续学习。练习了spring集成mybatis,并且测试前端发送数据到后端。
注:并未附上前端代码,在JavaWeb系列中包含前端文件
二、controller包
UserController
package com.ffyc.ssm.controller;
import com.ffyc.ssm.model.User;
import com.ffyc.ssm.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
/*
@Controller == <bean id = "" class = ""> 表示是控制层/Web层
@RequestMapping 可以作用在类、方法上,为类、方法定义一个映射地址
*/
@Controller
@RequestMapping(value = "/userCtl")
public class UserController {
/*
可以为方法定义一个映射地址
@RequestParam("account") String account 将请求中的各参数数据,绑定到参数列表中
*/
/*@RequestMapping(value = "/login")
public void login(@RequestParam("userAccount") String userAccount,
@RequestParam("userPassword") String userPassword) {
System.out.println("login---" + account + "---" + password);
}*/
/*
如果请求中的参数名和形参名一致,可以省略@RequestParam
*/
/*@RequestMapping(value = "/login")
public void login(String userAccount, String userPassword) {
System.out.println("login---" + userAccount + "---" + userPassword);
}*/
/*
如果请求中的参数名和形参名一致,可以省略@RequestParam
如果 model 类中的属性名与请求的参数名一致,则可以直接注入
*/
@Autowired
UserService userService;
@RequestMapping(value = "/login")
public User login(User user) {
System.out.println(user);
return userService.login(user);
}
}
三、dao包
UserDao
package com.ffyc.ssm.dao;
import com.ffyc.ssm.model.User;
import org.springframework.stereotype.Repository;
@Repository(value = "userDao")
public interface UserDao {
User login(User user);
}
四、model包
User
package com.ffyc.ssm.model;
public class User {
private Integer userId;
private String userAccount;
private String userPassword;
public User() {
}
public User(Integer userId, String userAccount, String userPassword) {
this.userId = userId;
this.userAccount = userAccount;
this.userPassword = userPassword;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserAccount() {
return userAccount;
}
public void setUserAccount(String userAccount) {
this.userAccount = userAccount;
}
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
@Override
public String toString() {
return "User{" +
"userId=" + userId +
", userAccount='" + userAccount + '\'' +
", userPassword='" + userPassword + '\'' +
'}';
}
}
五、service包
UserService
package com.ffyc.ssm.service;
import com.ffyc.ssm.dao.UserDao;
import com.ffyc.ssm.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service(value = "userService")
@Transactional
public class UserService {
@Autowired
UserDao userDao;
/*
获得sqlSession,创建代理对象
关闭sqlSession,提交事务
统统都被spring管理了
*/
public User login(User user) {
return userDao.login(user);
}
}
六、Test测试包
package com.ffyc.ssm.Test;
import com.ffyc.ssm.model.User;
import com.ffyc.ssm.service.UserService;
import org.springframework.context.annotation.ClassPathBeanDefinitionScanner;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test1 {
public static void main(String[] args) {
ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("spring.xml");
UserService userService = app.getBean("userService", UserService.class);
User user = new User();
user.setUserAccount("admin");
user.setUserPassword("admin");
System.out.println(userService.login(user));
}
}
七、配置文件
1、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>com.example</groupId>
<artifactId>ssm</artifactId>
<version>1.0-SNAPSHOT</version>
<name>ssm</name>
<packaging>war</packaging>
<properties>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
<junit.version>5.6.2</junit.version>
</properties>
<dependencies>
<!-- spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<!-- 阿里数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<!-- spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<!-- spring 结合 mybatis 的插件 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.2</version>
</dependency>
<!-- spring-mvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.0</version>
</plugin>
</plugins>
</build>
</project>
2、config.properties
dirverClassName=com.mysql.cj.jdbc.Driver
url = jdbc:mysql://127.0.0.1:3306/ffycdb?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
uname = root
password = root
3、db.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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:property-placeholder location="classpath:config.properties"></context:property-placeholder>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="url" value="${url}"></property>
<property name="driverClassName" value="${dirverClassName}"></property>
<property name="username" value="${uname}"></property>
<property name="password" value="${password}"></property>
<property name="initialSize" value="5"></property>
<property name="maxActive" value="20"></property>
<property name="maxWait" value="100"></property>
</bean>
<!-- <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!– 注入数据源 –>
<property name="dataSource" ref="dataSource"></property>
</bean>-->
<!-- 配置 spring 事务管理类, 并注入数据源 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 开启注解事务管理 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
</beans>
4、mybatis.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<!-- <setting name="logImpl" value="STDOUT_LOGGING"/>-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<typeAliases>
<typeAlias type="com.ffyc.ssm.model.User" alias="User"></typeAlias>
</typeAliases>
</configuration>
5、spring.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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="com.ffyc.ssm"></context:component-scan>
<!-- 导入另一个配置文件 -->
<import resource="classpath:spring_mybatis.xml"></import>
<!-- 基于注解方式 -->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
</beans>
6、spring_mybatis.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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 导入另一个配置文件 -->
<import resource="classpath:db.xml"></import>
<!-- 配置 sqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:mybatis.xml"></property>
<property name="mapperLocations" value="classpath:Mapper/*Mapper.xml"></property>
</bean>
<!-- 指定生成接口代理 -->
<bean id="mapperFactory" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.ffyc.ssm.dao"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
</beans>
7、springmvc.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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 开启 springmvc 注解 -->
<mvc:annotation-driven></mvc:annotation-driven>
</beans>
8、UserMapper
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ffyc.ssm.dao.UserDao">
<select id="login" resultType="User">
select * from user
where user_account = #{userAccount} and user_password = #{userPassword}
</select>
</mapper>