SpringBoot集成Mybatis+xml格式的sql配置文件操作

 更新时间:2021年7月28日 15:00  点击:1770

SpringBoot集成Mybatis+xml格式的sql配置文件

最近一直在研究SpringBoot技术,由于项目需要,必须使用Mybatis持久化数据。所以就用SpringBoot集成Mybatis。

由于项目使用的是xml配置文件格式的SQL管理,所以SpringBoot必须配置Mybatis文件。但这样做的话又与SpringBoot的零xml配置冲突。

所以索性使用java类来配置Mybatis。

下面是Mybatis的配置类:

  
import java.util.Properties; 
import javax.sql.DataSource; 
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver; 
import com.github.pagehelper.PageHelper; 
import tk.mybatis.spring.mapper.MapperScannerConfigurer;
/**
 * Mybatis & Mapper & PageHelper 配置
 * 
 * @file MybatisConfigurer.java
 * @author zoboy
 * @version 2.0.0
 * @todo TODO Copyright(C), 2017 xi'an Coordinates Software Development Co.,
 *       Ltd.
 */
@Configuration
public class MybatisConfigurer {
	
	static final String ALIASESPACKAG="com.cictec.cloud.bus.middleware.dc.common.biz.entity";
	static final String MAPPERXMLPATH="classpath:sqlmapper/*.xml";
	static final String BASEPACKAGE="com.cictec.cloud.bus.middleware.dc.mapper";
	static final String DATABSAENAME="POSTGRESQL";
	
    @Bean
    public SqlSessionFactory sqlSessionFactoryBean(DataSource dataSource) throws Exception {
        SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
        factory.setDataSource(dataSource);
        //实体类的包名(根据你的项目自行修改)
        factory.setTypeAliasesPackage(ALIASESPACKAG);
 
        //配置分页插件,详情请查阅官方文档
        PageHelper pageHelper = new PageHelper();
        Properties properties = new Properties();
        properties.setProperty("pageSizeZero", "true");//分页尺寸为0时查询所有纪录不再执行分页
        properties.setProperty("reasonable", "true");//页码<=0 查询第一页,页码>=总页数查询最后一页
        properties.setProperty("supportMethodsArguments", "true");//支持通过 Mapper 接口参数来传递分页参数
        pageHelper.setProperties(properties);
 
        //添加插件
        factory.setPlugins(new Interceptor[]{pageHelper});
 
        //添加XML目录
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        //*.mapper.xml的地址(根据你的项目自行修改)
        factory.setMapperLocations(resolver.getResources(MAPPERXMLPATH));        
        return factory.getObject();
    }
 
    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer() {
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactoryBean");
        //*.mapper(*.dao)的包名(根据你的项目自行修改)
        mapperScannerConfigurer.setBasePackage(BASEPACKAGE);
 
        //配置通用Mapper,详情请查阅官方文档
        Properties properties = new Properties();
        //tk.mybatis.mapper.common.Mapper
        properties.setProperty("mappers", "tk.mybatis.mapper.common.Mapper");
        properties.setProperty("notEmpty", "false");//insert、update是否判断字符串类型!='' 即 test="str != null"表达式内是否追加 and str != ''
        //使用的数据库类型名称(MySQL,Oracle,Postgresql...)
        properties.setProperty("IDENTITY", DATABSAENAME);
        mapperScannerConfigurer.setProperties(properties); 
        return mapperScannerConfigurer;
    }
}
 

可以直接在你的项目中使用这个配置类,所要改动的地方有3处,我在代码中用注释标注了。

项目结构如下图所示:

经测试,可以正常运行。

Mybatis xml文件配置sql标准格式

1.Mapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.test.dao.StrategyDao">
<resultMap id="StrategyResultMap" type="com.test.entity.Strategy">
        <result property="id" column="id"/>
        <result property="projectId" column="project_id"/>
        <result property="strategyType" column="strategy_type"/>
        <result property="strategyName" column="strategy_name"/>
        <result property="alias" column="alias"/>
    </resultMap>
<select id="findNameList" resultType="java.util.Map" parameterType="com.test.entity.Strategy">
        SELECT DISTINCT t.strategy_name strategyName,t.alias from test_strategy t WHERE
        t.project_id=#{projectId, jdbcType=INTEGER} AND t.del_status=0 AND t.strategy_type =#{strategyType}
        AND (t.strategy_name LIKE concat('%',#{strategyName,jdbcType=VARCHAR},'%')
        or t.alias LIKE concat('%',#{strategyName,jdbcType=VARCHAR},'%'))
    </select>
</mapper>

2.Dao

@MyBatisRepository
public interface StrategyDao extends ICrudDao<Strategy, Integer> {
  List<Map<String,Object>> findNameList(Strategy entity);
}

3.service

public List<Map<String, Object>> findNameList(Strategy strategy) throws Exception {
        try {
            return dao.findNameList(strategy);
        } catch (Exception var3) {
            throw new MySqlException("P2101", "数据库执行异常", var3);
        }
   }
-----------
public class MySqlException extends ServiceException {
    public MySqlException(String errorCode, Object[] args) {
        super(errorCode, args);
    }
    public MySqlException(String errorCode) {
        super(errorCode);
    }
    public MySqlException(String errorCode, String message) {
        super(errorCode, message);
    }
    public MySqlException(String errorCode, String message, Throwable cause) {
        super(errorCode, message, cause);
    }
}

4.Controller

 @RequestMapping("/nameList")
    public Map<String, Object> findNameList(@RequestBody Strategy strategy) throws Exception {
        try {
            return result(strategyService.findNameList(strategy));
        } catch (Exception e) {
            throw e;
        }
    }
-----------
public Map<String, Object> result(Object object) {
        Map<String, Object> result = new HashMap();
        ResultUtil.addSuccessResult(result, object);
        return result;
    }
-------
public class ResultUtil {
    public ResultUtil() {
    }
    public static void addSuccessResult(Map<String, Object> resultMap, Object data) {
        resultMap.put("result", "1");
        resultMap.put("msg", "调用成功!");
        resultMap.put("code", "200");
        resultMap.put("data", data);
    }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持猪先飞。

[!--infotagslink--]

相关文章

  • C#连接SQL数据库和查询数据功能的操作技巧

    本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
  • Mybatis Plus select 实现只查询部分字段

    这篇文章主要介绍了Mybatis Plus select 实现只查询部分字段的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-01
  • MySQL性能监控软件Nagios的安装及配置教程

    这篇文章主要介绍了MySQL性能监控软件Nagios的安装及配置教程,这里以CentOS操作系统为环境进行演示,需要的朋友可以参考下...2015-12-14
  • PostgreSQL判断字符串是否包含目标字符串的多种方法

    这篇文章主要介绍了PostgreSQL判断字符串是否包含目标字符串的多种方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-23
  • 解决springboot使用logback日志出现LOG_PATH_IS_UNDEFINED文件夹的问题

    这篇文章主要介绍了解决springboot使用logback日志出现LOG_PATH_IS_UNDEFINED文件夹的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-28
  • 解决Mybatis 大数据量的批量insert问题

    这篇文章主要介绍了解决Mybatis 大数据量的批量insert问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-09
  • mybatis的Configuration详解

    这篇文章主要介绍了mybatis的Configuration详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-04
  • 详解Mysql中的JSON系列操作函数

    新版 Mysql 中加入了对 JSON Document 的支持,可以创建 JSON 类型的字段,并有一套函数支持对JSON的查询、修改等操作,下面就实际体验一下...2016-08-23
  • PostgreSQL TIMESTAMP类型 时间戳操作

    这篇文章主要介绍了PostgreSQL TIMESTAMP类型 时间戳操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-26
  • mybatis 返回Integer,Double,String等类型的数据操作

    这篇文章主要介绍了mybatis 返回Integer,Double,String等类型的数据操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-25
  • SpringBoot实现excel文件生成和下载

    这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
  • postgresql 实现多表关联删除

    这篇文章主要介绍了postgresql 实现多表关联删除操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-02
  • Postgresql 如何选择正确的关闭模式

    这篇文章主要介绍了Postgresl 如何选择正确的关闭模式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-18
  • 深入研究mysql中的varchar和limit(容易被忽略的知识)

    为什么标题要起这个名字呢?commen sence指的是那些大家都应该知道的事情,但往往大家又会会略这些东西,或者对这些东西一知半解,今天我总结下自己在mysql中遇到的一些commen sense类型的问题。 ...2015-03-15
  • postgresql数据添加两个字段联合唯一的操作

    这篇文章主要介绍了postgresql数据添加两个字段联合唯一的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-04
  • 详解springBoot启动时找不到或无法加载主类解决办法

    这篇文章主要介绍了详解springBoot启动时找不到或无法加载主类解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-09-16
  • MySQL 字符串拆分操作(含分隔符的字符串截取)

    这篇文章主要介绍了MySQL 字符串拆分操作(含分隔符的字符串截取),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-22
  • SpringBoot集成Redis实现消息队列的方法

    这篇文章主要介绍了SpringBoot集成Redis实现消息队列的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-10
  • mysql的3种分表方案

    一、先说一下为什么要分表:当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。根据个人经验,mysql执行一个sql的过程如下:1...2014-05-31
  • 解决Springboot get请求是参数过长的情况

    这篇文章主要介绍了解决Springboot get请求是参数过长的情况,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-17