一.目的:
给出一些spring+mybatis项目转spring mvc的踩坑点,需要一定的基础,不然可能听不懂我在说什么,当然也可能是我说的不清楚,还望大家指正和评论(主要是没吃没喝一天才把坑踩完)
二.spring+mybatis项目:
由于本人的后端只是初步使用的spring框架不涉及前端页面,并没有涉及web的东西,就连controller都没有添加@controller这些注释,但今天在练习需求中看到需要将用户管理服务注册到nacos,并可通过网关调用对应的API实现用户的增删改查,(啊这,API?,这不是web吗?)所以我不得不修改项目,将其变为springmvc。
1.更改controller:
@Setter
@RestController/*这里如果没页面就不要用Controller,为什么的话可以自行百度*/
public class UserService {
/**
*记住这个SetUserMapper,你会恨它的
*/
private UserMapperImpl userMapper;
public void setUserMapper(UserMapperImpl userMapper) {
this.userMapper = userMapper;
System.out.println("UserMapper is injected: " + (userMapper != null));
}
@RequestMapping("/findG")
public Result findsG(){
try{
return Result.ok("ok").put("data",userMapper.finds());
}catch (Exception e){
System.out.println("Q:"+e);
return Result.error("wrong");
}
}
}
2.添加ServletConfig配置类(踩坑点):
添加这个的原因主要是使用spring-servlet.xml这个东西它无法实例化SpringConfig.xml的bean(就因为这个我耗了一天),我们需要这个配置类实例化对象,因为我没有更改原有的spring配置,所以为了让spring-servlet.xml启到和SpringConfig.xml一样的作用,就必须配置它。
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "org.example")
public class ServletConfig {
@Bean
public UserService userService(UserMapperImpl userMapper) {
UserService userService = new UserService();
userService.setUserMapper(userMapper);
return userService;
}
@Bean
public UserMapperImpl userMapper() {
return new UserMapperImpl();
}
}
/**
*对应spring-serclet.xml内容(别以为是全部啊)
*
*<!-- <mvc:annotation-driven/>-->
*<!-- <context:annotation-config/>-->
*<!-- <context:component-scan base-package="org.example"/>-->
*--------------------------------------------------------------------------
*
*对应SpringConfig.xml的ean实例化内容
* <bean id="userService" class="org.example.service.UserService">
* <property name="userMapper" ref="userMapper"/>
* </bean>
*
* <!--数据库Mapper的bean-->
* <bean id="userMapper" class="org.example.mapper.UserMapperImpl">
* <property name="dataBase" ref="dataBase"/>
* </bean>
*
* <!--数据库的bean-->
* <bean id="dataBase" class="org.example.Mybatis">
*
* </bean>
*/
Mybatis不配置主要是因为Mybatis的配置类方法使静态的,直接new UserMapperImpl()就行了。
3.创建WebAppInitializer的webapp类
WebAppInitializer
类的作用是用来替代传统的 web.xml
文件,进行 Web 应用程序的配置。它是基于 Java 配置的方式进行 Servlet 容器初始化配置的一种方式,通常用于 Spring 应用程序中。
import
org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return null; // 这里如果有根配置类,可以返回它们,通常不需要
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[] { ServletConfig.class }; // 返回包含 DispatcherServlet 配置的 Java 配置类
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" }; // 指定 DispatcherServlet 的映射路径
}
}
/**
*这就是web.xml的部分
*<!-- <servlet>-->
*<!-- <servlet-name>spring</servlet-name>-->
*<!-- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-*class>-->
*<!-- <init-param>-->
*<!-- <param-name>contextConfigLocation</param-name>-->
*<!-- <param-value>classpath:spring-servlet.xml</param-value>-->
*<!-- </init-param>-->
*<!-- <load-on-startup>1</load-on-startup>-->
*<!-- </servlet>-->
*
*<!-- <servlet-mapping>-->
*<!-- <servlet-name>spring</servlet-name>-->
*<!-- <url-pattern>/</url-pattern>-->
*<!-- </servlet-mapping>-->
*/
4.Mybatis配置文件参考:
无需特意实例化Mybatis的bean
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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/user?serverTimezone=GMT%2b8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="MapperXml/UserMapper.xml"/>
</mappers>
</configuration>
class:
public class Mybatis {
private static final SqlSessionFactory sqlSessionFactory ;
static {
try {
//获取sqlSessionFactory对象
String resource = "mybatis-config.xml";/*注意命名啊*/
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
throw new RuntimeException("MybatisUtils工具类出现异常:"+e);
}
}
//获取sqlSession对象
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession(true);
}
}
三.springMVC项目:
1.项目目录:
controller写成了service,没注意啊哈哈~~~~~~~
从目录中可以看到我是没有改变Spring原有的文件的,只是添加了上述一些文件。
再次提醒:配置文件(.xml)的命名方法别错了,不然可能扫描不到
2.项目运行结果:
最后就是首先要记得配置Tomcat并添加部署。
四.总结:
好了,以上就是我想说的一些关于关于spring+mybatis项目转spring mvc的踩坑点,如果有说的不清楚的地方还请指明,如有不对的地方还望指正,希望大家天天开心。