当前位置: 首页 > wzjs >正文

做餐饮系统网站建设seo三人行论坛

做餐饮系统网站建设,seo三人行论坛,哪个网络公司做网站好,网线制作实验总结SpringBootMyBatis集成进阶配置 - XML与注解的灵活运用 前言 在Spring Boot与MyBatis的集成开发中,开发者常面临XML映射文件与注解两种SQL定义方式的选择,以及复杂场景下的动态SQL、多数据源等进阶需求。本文将从核心配置的灵活性出发,对比X…

SpringBoot+MyBatis集成进阶配置 - XML与注解的灵活运用


前言

在Spring Boot与MyBatis的集成开发中,开发者常面临XML映射文件注解两种SQL定义方式的选择,以及复杂场景下的动态SQL、多数据源等进阶需求。本文将从核心配置的灵活性出发,对比XML与注解的适用场景,详解动态SQL的实现技巧,并结合ResultMaptypeAliases等高级特性,最终通过多数据源配置实战演示企业级解决方案。无论你是希望优化现有项目,还是应对复杂业务逻辑,本文均能提供清晰的实践路径。


一、XML与注解:如何选择?
1. 注解的简洁与局限

通过@Select@Insert等注解直接在Mapper接口中编写SQL,适合简单、静态的SQL场景,例如:

@Select("SELECT * FROM user WHERE id = #{id}")
User findById(Long id);

优点

  • 代码简洁,无需维护XML文件。
  • 适合快速开发小型项目。

缺点**:

  • 复杂SQL可读性差(如动态条件、关联查询)。
  • 无法直接使用MyBatis的动态SQL标签。

2. XML的动态与强大

XML映射文件通过<if><foreach>等标签支持动态SQL,适合复杂查询和批量操作:

<select id="findUsers" resultType="User">SELECT * FROM user<where><if test="name != null">AND name = #{name}</if><if test="status != null">AND status = #{status}</if></where>
</select>

优点

  • 动态SQL灵活,易于维护复杂逻辑。
  • 支持结果集映射(ResultMap)和关联查询。

缺点

  • 需额外维护XML文件,项目结构稍显复杂。

结论简单查询用注解,复杂逻辑用XML,二者可混合使用!


二、动态SQL实战:提升代码灵活性
1. 条件分支与循环
  • <if>标签:根据参数动态拼接条件。
  • <foreach>标签:实现批量插入或IN查询:
<insert id="batchInsert">INSERT INTO user (name, email) VALUES<foreach item="user" collection="list" separator=",">(#{user.name}, #{user.email})</foreach>
</insert>
2. 多表关联查询与ResultMap

通过ResultMap定义嵌套结果集,解决一对多关联查询:

<resultMap id="OrderWithItems" type="Order"><id property="id" column="order_id"/><collection property="items" ofType="OrderItem"><id property="id" column="item_id"/><result property="product" column="product_name"/></collection>
</resultMap>

三、核心配置优化:typeAliases与mapperLocations
1. 简化实体类引用

application.yml中配置type-aliases-package,避免XML中写全类名:

mybatis:type-aliases-package: com.example.entitymapper-locations: classpath:mapper/*.xml
2. 自动扫描Mapper接口

通过@MapperScan注解指定Mapper接口路径,避免逐个添加@Mapper

@SpringBootApplication
@MapperScan("com.example.mapper")
public class Application { ... }

四、多数据源配置实战
场景需求

同时连接主库(写操作)从库(读操作),需独立配置数据源与MyBatis会话。

1. 主数据源配置
@Configuration
@MapperScan(basePackages = "com.example.mapper.primary", sqlSessionFactoryRef = "primarySqlSessionFactory")
public class PrimaryDataSourceConfig {@Bean(name = "primaryDataSource")@ConfigurationProperties(prefix = "spring.datasource.primary")public DataSource primaryDataSource() {return DataSourceBuilder.create().build();}@Bean(name = "primarySqlSessionFactory")public SqlSessionFactory sqlSessionFactory(@Qualifier("primaryDataSource") DataSource dataSource) throws Exception {SqlSessionFactoryBean bean = new SqlSessionFactoryBean();bean.setDataSource(dataSource);bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/primary/*.xml"));return bean.getObject();}
}
2. 从数据源配置
@Configuration
@MapperScan(basePackages = "com.example.mapper.secondary", sqlSessionFactoryRef = "secondarySqlSessionFactory")
public class SecondaryDataSourceConfig {@Bean(name = "secondaryDataSource")@ConfigurationProperties(prefix = "spring.datasource.secondary")public DataSource secondaryDataSource() {return DataSourceBuilder.create().build();}@Bean(name = "secondarySqlSessionFactory")public SqlSessionFactory sqlSessionFactory(@Qualifier("secondaryDataSource") DataSource dataSource) throws Exception {SqlSessionFactoryBean bean = new SqlSessionFactoryBean();bean.setDataSource(dataSource);bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/secondary/*.xml"));return bean.getObject();}
}
3. 配置文件(application.yml)
spring:datasource:primary:url: jdbc:mysql://localhost:3306/primary_dbusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driversecondary:url: jdbc:mysql://localhost:3306/secondary_dbusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver

五、总结与最佳实践
  1. XML与注解混合使用:简单CRUD用注解,动态SQL和关联查询用XML。
  2. 动态SQL提升灵活性:善用<if><foreach>处理复杂业务逻辑。
  3. 配置优化技巧type-aliases-package简化代码,mapperLocations规范路径。
  4. 多数据源方案:通过独立配置DataSourceSqlSessionFactory实现读写分离。

避坑指南

  • 多数据源场景下,需明确指定@MapperScansqlSessionFactoryRef属性。
  • 避免在多数据源中重复扫描同一Mapper接口路径。

欢迎在评论区留言讨论你在MyBatis配置中遇到的难题!

http://www.dtcms.com/wzjs/275865.html

相关文章:

  • 如何建立论坛网站上海网站外包
  • 泉州服装网站建设长沙优化官网服务
  • 免费做ppt网站网站设计与制作
  • 购物网站制作多少钱北京网站seo技术厂家
  • 广州市筑正工程建设有限公司网站百度免费推广平台
  • 如何查网站的百度快照网站推广优化服务
  • 职业生涯规划用什么网站做测试360识图
  • 西宁网站制作哪家公司好线上营销技巧和营销方法
  • 沈阳定制网站开发公司seo策略分析
  • 做爰网站視屏高级seo是什么职位
  • 哈尔滨网站域名备案如何制作简单的网页链接
  • 邢台专业做wap网站百度搜索引擎网址格式
  • 企业做网站的公司有哪些西安网站公司推广
  • wordpress大发的微博怎么快速优化网站
  • 怎么创建网站域名广州网络推广万企在线
  • 学校网站建设介绍范文百度指数官网首页
  • php是网站开发的语言吗最新疫情爆发
  • 北京城乡建设部网站线上营销推广的公司
  • 室内设计图网站有哪些360搜索建站
  • 营销型网站建设亏1免费平台推广
  • 广州做网站如何公司网站seo外包
  • 北京旅游网站建设公司站长之家查询域名
  • 网站快速收录教程谷歌商店下载官方正版
  • 免费的企业查询优化技术基础
  • 意识形态网站建设google chrome
  • 福州网站建设信息seo推广软件排行榜
  • 网站模板视频教程网站推广是什么意思
  • 做网站需要哪些资质app开发教程
  • 男女直接做的视频网站南昌seo排名
  • 做哪个网站最简单百度销售平台怎样联系