当前位置: 首页 > news >正文

[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;}
}

 相关的实体类就不放上来的。

相关文章:

  • 游戏引擎学习第238天:让 OpenGL 使用我们的屏幕坐标
  • 基于Redis实现RAG架构的技术解析与实践指南
  • idea中运行groovy程序报错
  • 【perf】perf工具的使用生成火焰图
  • 基于 OpenCV 的图像与视频处理
  • Kubernetes(k8s)学习笔记(二)--k8s 集群安装
  • React+TS编写轮播图
  • 计算机视觉cv入门之Haarcascade的基本使用方法(人脸识别为例)
  • 【后端】【Django】Django 模型中的 `clean()` 方法详解:数据校验的最后防线
  • 【人工智能】推荐开源企业级OCR大模型InternVL3
  • css3新特性第四章(渐变)
  • 【条形码识别改名工具】如何批量识别图片条形码,并以条码内容批量重命名,基于WPF和Zxing的开发总结
  • 【iOS】alloc init new底层原理
  • 嵌入式---零点漂移(Zero Drift)
  • 网络设备基础运维全攻略:华为/思科核心操作与巡检指南
  • IDEA多环节实现优雅配置
  • IDEA在Git提交时添加.ignore忽略文件,解决为什么Git中有时候使用.gitignore也无法忽略一些文件
  • 国际数据加密算法(IDEA)详解
  • 按字符串长度升序,长度相同则按字典序
  • 【Linux系统】Linux基础指令(详解Linux命令行常用指令,每一个指令都有示例演示)
  • 王东杰:重审康有为的“大同世界”
  • 女子伸腿阻止列车关门等待同行人员,被深圳铁路警方行政拘留
  • 长沙岳麓警方通报“女子疑被性侵”:正在进一步侦办
  • 地铁口被吐槽像棺材?杭州地铁公司回应:是一个标志性出入口
  • 特朗普称美联储主席鲍威尔“应该尽早下台”
  • 网文书单|女频网文只是过家家?姐姐们搞事业干得飞起