SpringBoot集成Mybatis+xml格式的sql配置文件
最近一直在研究SpringBoot技术,由于项目需要,必须使用Mybatis持久化数据。所以就用SpringBoot集成Mybatis。
由于项目使用的是xml配置文件格式的SQL管理,所以SpringBoot必须配置Mybatis文件。但这样做的话又与SpringBoot的零xml配置冲突。
所以索性使用java类来配置Mybatis。
下面是Mybatis的配置类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
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测试数据mon.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测试数据mon.Mapper properties.setProperty( "mappers" , "tk.mybatis.mapper测试数据mon.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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<? 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
1 2 3 4 |
@MyBatisRepository public interface StrategyDao extends ICrudDao<Strategy, Integer> { List<Map<String,Object>> findNameList(Strategy entity); } |
3.service
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
@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); } } |
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
原文链接:https://blog.csdn.net/u011051912/article/details/74295172
查看更多关于SpringBoot集成Mybatis+xml格式的sql配置文件操作的详细内容...