[Spring]SSM整合
第一步
整合任何框架,首先都是导入相关的jar包:
<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.18</version></dependency><!--mybatis依赖--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version></dependency><!--mysql驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</version></dependency><!--阿里数据库连接池druid--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.8</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc --><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.18</version></dependency><!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.1</version></dependency><!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency>
注意:
如果你没使用spring框架,不用导入spring-jdbc和mybatis-spring;
最后的servlet-api,看你服务器是否使用的是tomcat,如果不是,请自行查阅相关使用;
如果你使用的是tomcat,若是10+版本,相应的jar包有所变化,详情可以查看:tomcat10整合SSM注意事项
第二步
导入了相关依赖包之后,就开始配置了。
这里先配jdbc:
jdbc
在resources目录(资源目录)下编写.properties配置文件,配置数据库连接信息:
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/yourDatabaseName
name=root
pwd=root
注意不用使用和系统环境变量中相关的变量名,否则spring赋值时会被系统环境变量中同名的变量给覆盖,到时候还需要手动设置不引入系统环境变量。
创建一个spring的配置类,使用@propertySource注解扫描jdbc配置文件:
@Configuration
@PropertySource("classpath:/your.properties")//扫描.propertie文件
@Import({JdbcConfig.class})//扫描jdbc的配置类
public class SpringConfig {
}
然后我们编写jdbc的spring配置类:
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;import javax.sql.DataSource;public class JdbcConfig {//在spring中已经引入了相关变量@Value("${driver}")private String driver;@Value("${url}")private String url;@Value("${name}")private String username;@Value("${pwd}")private String password;@Beanpublic DataSource dataSource(){//创建数据连接池,并将该数据连接池作为Bean返回给spring容器DruidDataSource druidDataSource = new DruidDataSource();druidDataSource.setDriverClassName(driver);druidDataSource.setUrl(url);druidDataSource.setUsername(username);druidDataSource.setPassword(password);return druidDataSource;}
}
然后我们编写mybatis的相关配置
mybatis的相关配置
在Mybatis的配置类里面,我们需要编写两个方法。一个是Mybatis自身配置类中需要配置的连接池,但在整合spring中,我们将其作为Bean返回给spring(需要引入mybatis-spring),方法名随意,但返回值类型需要是 SqlSessionFactory 。SqlSessionFactoryBean是mybatis-spring中的类。
还有一个返回值为 MapperScannerConfigurer(一样的是mybatis-spring中的类) 的方法,用于扫描mybatis映射文件中对应的mapper接口。
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import javax.sql.DataSource;public class MyBatisConfig {@Beanpublic SqlSessionFactory MysqlSessionFactoryBean(DataSource dataSource) throws Exception {SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();sqlSessionFactoryBean.setDataSource(dataSource);sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mappers/*.xml"));sqlSessionFactoryBean.setTypeAliasesPackage("entity");sqlSessionFactoryBean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);return sqlSessionFactoryBean.getObject();}@Beanpublic MapperScannerConfigurer MymapperScannerConfigurer(){MapperScannerConfigurer mapper = new MapperScannerConfigurer();mapper.setBasePackage("dao");return mapper;}
}
配置连接数据库的jdbc和mybatis之后,我们配置springMVC
配置springMVC
springMVC配置类中主要是扫描有关于前端的代码组件,如controller层、servlet层等。
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;@Configuration//声明为配置类
@ComponentScan("controller")//扫描相关组件包
@EnableWebMvc//启用springmvc相关功能
public class SpringMvcConfig {
}
编写替代web端代码中的web.xml配置文件的配置类:
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;//继承AbstractAnnotationConfigDispatcherServletInitializer父类
public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer {@Overrideprotected Class<?>[] getRootConfigClasses() {//获取非web组件的Bean容器return new Class[]{SpringConfig.class};}@Overrideprotected Class<?>[] getServletConfigClasses() {//获取web组件的Bean容器return new Class[]{SpringMvcConfig.class};}@Overrideprotected String[] getServletMappings() {//在服务器中的部署根return new String[]{"/"};}
}
编写相关代码
首先我们编写mybatis的映射文件和它对应的mapper接口:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="dao.UserMapper"><resultMap id="UserResult" type="entity.User"><id column="user_id" property="userId" /><result column="username" property="username"/><result column="password" property="password"/><result column="email" property="email"/><result column="phone" property="phone"/><result column="role" property="role"/><result column="create_time" property="createTime"/></resultMap><select id="selectByUsernameAndPassword" resultMap="UserResult">SELECTuser_id,username,password, -- 虽然数据库标记为invisible,但显式查询仍可获取email,phone,role,create_timeFROM userWHERE username = #{username}AND password = #{password}</select><update id="updateUser" parameterType="entity.User">UPDATE userSETusername = #{username},email = #{email},phone = #{phone}WHERE user_id = #{userId}</update>
</mapper>
编写对应的mapper接口:
import entity.User;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;public interface UserMapper {User selectByUsernameAndPassword(@Param("username") String username,@Param("password") String password);int updateUser(User user);
}
最后我们编写controller层等代码,
注意几点:
1.通过@Resource来注入mapper接口的实例对象,用该实例对象访问数据库
2.通过@RequestMapping()来配置url。
3.通过@RestController来标记当前类为controller层
4.上面三个注解都有可以替代的注解,比如@RestController可以用@Controller,这里不展开讲。
import dao.UserMapper;
import entity.Info;
import entity.User;
import org.springframework.web.bind.annotation.*;import javax.annotation.Resource;@RestController
@RequestMapping("/api/user")
public class UserController {@Resourceprivate UserMapper userMapper;@RequestMapping(value = "/login", method = RequestMethod.POST)@ResponseBodypublic Info login(@RequestParam String username,@RequestParam String password) {System.out.println(username + " " + password);Info info = new Info();info.message = "测试";// 查询用户信息User user = userMapper.selectByUsernameAndPassword(username, password);if(user != null) {info.message = "登录成功";info.data.put("userId",user.getUserId());info.data.put("username",user.getUsername());info.data.put("role",1);}else {info.message = "登录失败";}return info;}
}
相关的实体类就不放上来的。