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

网友投稿 1067 2022-12-24

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

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

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

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},'%'))

2.Dao

@MyBatisRepository

public interface StrategyDao extends ICrudDao {

List> findNameList(Strategy entity);

}

3.service

public List> 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 findNameList(@RequestBody Strategy strategy) throws Exception {

try {

return result(strategyService.findNameList(strategy));

} catch (Exception e) {

throw e;

}

}

-----------

public Map result(Object object) {

Map result = new HashMap();

ResultUtil.addSuccessResult(result, object);

return result;

}

-------

public class ResultUtil {

public ResultUtil() {

}

public static void addSuccessResult(Map resultMap, Object data) {

resultMap.put("result", "1");

resultMap.put("msg", "调用成功!");

resultMap.put("code", "200");

resultMap.put("data", data);

}

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:flutter非对称加密(flutter混淆加密)
下一篇:智能车载终端行业市场分析(智能汽车市场)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~