关于spring+mybatis项目转spring mvc的踩坑点

一.目的:

给出一些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的踩坑点,如果有说的不清楚的地方还请指明,如有不对的地方还望指正,希望大家天天开心。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值