ibatis+spring升级springboot记录

本文介绍从ibatis+Spring项目迁移到ibatis+Spring Boot过程中遇到的问题及解决方案,包括核心XML配置、加载旧的XML配置、测试类编写、ibatis错误处理及web.xml文件的替代方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录ibatis+spring升级到ibatis+spring boot遇到的问题
注:没有将ibatis替换成为mybaits,xml配置也没有干掉,因为这样改动最小

一.spring升级到springboot

1.核心xml配置如下

<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>groupId</groupId>
	<artifactId>artifactId</artifactId>
	<version>version</version>
    <packaging>jar</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.2.RELEASE</version>
        <relativePath/>
    </parent>

	<properties>
        <!--   依赖版本控制     -->
        
        <!-- 包的名称 -->
        <finalName>finalName</finalName>
        <!--    设置jdk版本(编译版本)    -->
        <maven.compiler.source>1.8</maven.compiler.source>
    	<maven.compiler.target>1.8</maven.compiler.target>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencies>
		<!--   只有部分关键依赖;依赖冲突,建议使用idea的 ”maven help“插件,蛮好用的     -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

		<!--   因为旧项目使用的log4f,继续使用这个可以偷懒     -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j</artifactId>
            <version>1.3.8.RELEASE</version>
        </dependency>


		<!-- 数据库相关 start  -->
        <dependency>
            <groupId>org.apache.ibatis</groupId>
            <artifactId>ibatis-sqlmap</artifactId>
            <version>2.3.4.726</version>
        </dependency>
        <!--  用于解决spring4以上spring-orm移除ibatis的问题      -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-2-spring</artifactId>
            <version>1.0.1</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.13</version>
        </dependency>

        <!-- 数据库相关 end  -->
	</dependencies>

    <build>
        <finalName>${finalName}</finalName>
        <plugins>
            <!--	指定jdk版本		-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler-plugin.version}</version>
                <configuration>
                  <source>1.8</source>
                  <target>1.8</target>
                </configuration>
            </plugin>

            <!--	maven打jar包插件		-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>${maven-jar-plugin.version}</version>
            </plugin>

            <!--	springboot打包插件		-->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${springboot.version}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

2.spring 加载旧的xml配置

项目结构如下
在这里插入图片描述

使用@ImportResource注解导入旧配置

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;

@SpringBootApplication
@ImportResource(locations = {"/spring/springmvc-servlet.xml", "/spring/applicationContext-*.xml"})
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(TrustteeApplication.class, args);
    }
}

3.测试类该怎写,否则会出现spring xml(如/spring/springmvc-servlet.xml)没找到问题

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest()
@ContextConfiguration(locations = {"/spring/springmvc-servlet.xml", "/spring/applicationContext-*.xml"})
public class DemoClassTest {

    @Test
    public void test1() {
	 // 测试代码

    }
}

二、ibatis错误

1. org.springframework.orm.ibatis.SqlMapClientTemplate没找到

问题:不知道什么原因SqlMapClient类为空,导致的报错

原代码:


import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.orm.ibatis.SqlMapClientTemplate;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

/**
 * @author xxx
 * @version 1.0
 */
public abstract class BaseIbatisDao<E,PK extends Serializable> extends SqlMapClientDaoSupport implements EntityDao<E,PK> {
    protected final Log log = LogFactory.getLog(getClass());
    
    public Object getById(PK primaryKey) {
        Object object = getSqlMapClientTemplate().queryForObject(getFindByPrimaryKeyStatement(), primaryKey);
        return object;
    }
    .....
}

解决方案代码:
取消xml里面的sqlMapClient配置

import com.ibatis.sqlmap.client.SqlMapClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.orm.ibatis.SqlMapClientFactoryBean;
import org.springframework.orm.ibatis.SqlMapClientTemplate;


import javax.annotation.Resource;


@Configuration
public class MyConfig {

    @Resource(name = "sqlMapClient")
    private SqlMapClient sqlMapClient;

    @Bean("sqlMapClientTemplate")
    public SqlMapClientTemplate getSqlMapClientTemplate() {
        SqlMapClientTemplate sqlMapClientTemplate = new SqlMapClientTemplate();
        SqlMapClientFactoryBean sqlMapClientFactoryBean = new SqlMapClientFactoryBean();
        sqlMapClientTemplate.setSqlMapClient(sqlMapClient);
        return sqlMapClientTemplate;
    }

}

重写getSqlMapClientTemplate方法把sqlMapClient添加进去

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.ibatis.SqlMapClientTemplate;

/**
 * @author xxx
 * @version 1.0
 */
public abstract class
BaseIbatisDao<E,PK extends Serializable>  implements EntityDao<E,PK> {
    protected final Log log = LogFactory.getLog(getClass());

	@Autowired
	SqlMapClientTemplate sqlMapClientTemplate;

	public SqlMapClientTemplate getSqlMapClientTemplate() {
		return this.sqlMapClientTemplate;
	}
    
    public Object getById(PK primaryKey) {
        Object object = getSqlMapClientTemplate().queryForObject(getFindByPrimaryKeyStatement(), primaryKey);
        return object;
    }
    
    .....
    

为什么不继承,要手动呢,应为那个方法final是修饰的
在这里插入图片描述

三、干掉web.xml文件

1.重写filter

import cn.org.rapid_framework.web.scope.FlashFilter;
import com.xx.code.filter.RepeatedlyReadFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;

@Configuration
public class FilterConfig {


	....
	// 第一个
    @Bean
    public FilterRegistrationBean registerRepeatedlyReadFilter() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new RepeatedlyReadFilter());
        registration.addUrlPatterns("*.do");
        registration.setName("repeatedlyReadFilter");
		// 初始参数
        HashMap<String, String> initParam = new HashMap<>();
        initParam.put("excludedPages", "/uploadFile/*");
        initParam.put("IsCross", "true");
        registration.setInitParameters(initParam);
        //值越小,Filter越靠前。
        registration.setOrder(3);
        return registration;
    }
	
	// 第二个
	@Bean
    public FilterRegistrationBean registerSrFilter() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new SrFilter());
        registration.addUrlPatterns("*.do");
        registration.setName("srFilter");
 
        //值越小,Filter越靠前。
        registration.setOrder(4);
        return registration;
    }

	.....
}

2.重写拦截器

import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.ContextLoaderListener;
import org.springframework.web.servlet.DispatcherServlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;

public class WebAppInitializerConfig implements WebApplicationInitializer {

    /**
     * Servlet容器启动时会自动运行该方法
     */
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {

        servletContext.setInitParameter("contextConfigLocation", "classpath:applicationContext.xml");
        ServletRegistration.Dynamic registration = servletContext.addServlet("dispatcher", new DispatcherServlet());
        registration.setLoadOnStartup(1);
        registration.addMapping("/");
        registration.setInitParameter("contextConfigLocation", "classpath:dispatcher-servlet.xml");

        servletContext.addListener(new ContextLoaderListener());
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值