Mybatis编写sql案例

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 列举开发中常用的sql编写案例

[toc]

列举开发中常用的sql编写案例

返回受影响行数


@Update({
   "update VirtualWarehouse set deleted=1 where id=#{virtualWarehouse.id}"})
@Options(useGeneratedKeys=true )
Long  deleteVirtualWarehouse(@Param("virtualWarehouse") VirtualWarehouse virtualWarehouse);

for循环


@Select({
""})
List findWarehouseListByIds(List ids);



### 遍历Set

```java
@Select({"<script>",        
"select 3  as status  ,'可用' as statusName, 
case COUNT(*) when null  then 0 else COUNT(*) end as 
statusCount from Warehouse",       
" where organizationId in ( ",        
" <foreach collection='collection' item='item' open='(' close=')' separator=','>",       
"       #{item}",        
"</foreach>",       
")",       
"</script>"})
WarehouseStatusCount 
findAvailableStatusWarehouseCount(Set<Long> organizationIds);

If语句


@Update({
          
"<script>",     
    "update VirtualWarehouse set ",   
    "name=#{virtualWarehouse.name} ",    
    " , updateTime=getdate()",     
    "<if test=\" virtualWarehouse.description !=null  and           virtualWarehouse.description !='' \" > ",   
     "   description=#{virtualWarehouse.description} ",  
    "</if>",   
    " where id=#{virtualWarehouse.id}",    
"</script>"
})
@Options(useGeneratedKeys = true)Long updateVirtualWarehouse(@Param("virtualWarehouse") VirtualWarehouse virtualWarehouse);

If-Else语句


@Select({
   
    "<script>",
    " select * from user ",
    "<where>",
    "<choose>",
    "   <when  test=\" user.name !=null and user.name !='' \" >",
    "       and name like CONCAT('%' , #{user.name} , '%')",
    "   </when>",
    "   <otherwise>",
    "       and name =#{currentUserName} ",
    "   </otherwise>",
    "</choose>",
    "</where>",
    "</script>"
})
List<User> findUser(@Param("user") User user, @Param("currentUserName") String currentUserName);

like 模糊查询

@Select({
   
"<script>",      
"   select count(id)  from Warehouse warehouse  ",     
"<where>",      
" organizationId in (",    
" <foreach collection='organizationIds' item='item' open='(' close=')' separator=','>",     
"       #{item}",    
"</foreach>",       
")",   
"   <if test=\" warehouse.id !=null and warehouse.id !=0 
\" >" ,          
" and  Warehouse.id=#{warehouse.id}" ,    
"</if>",      
"   <if test=\" warehouse.name !=null and warehouse.name 
!='' \" >" ,           
" and  Warehouse.name like CONCAT('%' , 
#{
   warehouse.name} , '%') " ,       
"</if>",     
"   <if test=\" warehouse.type !=null and 
warehouse.type!=0 \" >" ,        
" and  Warehouse.type=#{warehouse.type}" ,     
"   </if>",     
"</where>",    
"</script>",})
Integer countFindWarehouseList(@Param("warehouse") Warehouse warehouse ,   @Param("organizationIds") Set<Long> organizationIds);

或者


 sku.name like '%'+ #{
   keywords} + '%'  ",

if判断中带for循环


/** 
* 查询可用仓库,无分页 
*
* @return 
*/

@Select({
   "<script>",       
"select  * ",       
"from Warehouse   ",      
"<where>",       
"   <if test=\" searchProvisoDTO.name !=null and 
searchProvisoDTO.name !='' \" > ",       
"       and  name like CONCAT('%' , 
#{
   searchProvisoDTO.name} , '%') ",       
"   </if>",       
"   <if test=\" searchProvisoDTO.ids !=null  \" > ",       
"       <foreach collection='searchProvisoDTO.ids' 
item='id' open='and id in (' close=')'  separator=','>",       
"           #{id}",       
"       </foreach>",       
"   </if>",       
"</where>",       
"</script>",})List<Warehouse> 
findWarehouseListWithNoPage(@Param("searchProvisoDTO") 
SearchProvisoDTO searchProvisoDTO );

insert,返回主键


/** 
* 创建 * 
* @return 
*/
@Insert({
           
"<script>",        
" insert into DeliveryRouteStreet( deliveryRouteId , streetId , deleted , createTime) ",        
" VALUES ",        
"(#{
   deliveryRouteStreet.deliveryRouteId}, 
#{
   deliveryRouteStreet.streetId} ",        
" , 0 , now())",        
"</script>"})
@Options(useGeneratedKeys = true)
Long insertDeliveryRouteStreet(@Param("deliveryRouteStreet") 
DeliveryRouteStreet deliveryRouteStreet);

复杂分页查询


    @Select({
            "<script>",
            " SELECT u.id ,  u.account , u.username , u.mobile , u.dept_logic_id as deptId , u.org_logic_id as orgId ,  s.times , s.login_time  ",
            "<if test=\" condition.loginState !=null and condition.accounts !=null and  condition.accounts.size > 0 \" > ",
            "<choose>",
            "   <when  test=\"condition.accounts !=null and  condition.accounts.size > 0 and  condition.loginState !=null  and condition.loginState ==1 \" >",
            "       , '在线' as state ",
            "   </when>",
            "   <when  test=\"condition.accounts !=null and  condition.accounts.size > 0 and  condition.loginState !=null  and condition.loginState == 2 \" >",
            "       , '注销' as state ",
            "   </when>",
            "   <otherwise>",
            "     ,  '' as state ",
            "   </otherwise>",
            "</choose>",
            "</if>",
            " from bams_user u  LEFT JOIN login_statistics s on u.account=s.account ",
            "<where>",
            "   u.has_del=0 ",
            "   <if test=\"condition.account != null and condition.account !='' \"> and u.account like CONCAT('%' , #{condition.account} , '%') </if>",
            "   <if test=\"condition.username != null and condition.username !='' \"> and u.username like CONCAT('%' , #{condition.username} , '%') </if>",
            "   <if  test=\" condition.areaDeptId !=null  and condition.areaDeptId !='' \" >",
            "          and u.dept_logic_id like  CONCAT( #{condition.areaDeptId} , '%') ",
            "   </if>",
            "   <if test=\"condition.ids !=null and  condition.ids.size > 0 \" > ",
            "       <foreach collection='condition.ids' item='id' open='and u.id in (' close=')'  separator=','>",
            "           #{id}",
            "       </foreach>",
            "   </if>",
            "   <if test=\"condition.accounts !=null and  condition.accounts.size > 0  and condition.loginState !=null  \" > ",
            "       <choose>",
            "       <when  test=\" condition.loginState !=null   and condition.loginState == 1 \" >",
            "           <foreach collection='condition.accounts' item='id' open='and u.account in (' close=')'  separator=','>",
            "               #{id}",
            "           </foreach>",
            "       </when>",
            "       <otherwise>",
            "           <foreach collection='condition.accounts' item='id' open='and u.account not  in (' close=')'  separator=','>",
            "               #{id}",
            "           </foreach>",
            "       </otherwise>",
            "       </choose>",
            "   </if>",
            "   <if  test=\" condition.loginRecord !=null \" >",
            "       <choose>",
            "       <when  test=\" condition.loginRecord == 1 \" >",
            "           and  ( s.times &gt; 0) ",
            "       </when>",
            "       <when  test=\" condition.loginRecord == 2 \" >",
            "            and  (ISNULL(s.times) or s.times=0 ) ",
            "       </when>",
            "       </choose>",
            "   </if>",
            "   <if test=\"condition.startTime != null \"> and  s.login_time &gt;= #{condition.startTime} </if>",
            "   <if test=\"condition.endTime != null  \"> and  s.login_time &lt;= #{condition.endTime} </if>",
            "</where>",
            " order by u.id   ",
            "<if test=\"condition.needPage == true \"> ",
            "   limit #{condition.pageNum},#{condition.pageSize}  ",
            "</if>",
            "</script>"
    })
    List<LoginStatisticsDto> findPage(@Param("condition") LoginStatisticsCondition condition);

更多例子

https://www.jianshu.com/p/93ff4d89250c

目录
相关文章
|
3月前
|
SQL 数据库
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
SQL Server附加数据库出现错误823,附加数据库失败。数据库没有备份,无法通过备份恢复数据库。 SQL Server数据库出现823错误的可能原因有:数据库物理页面损坏、数据库物理页面校验值损坏导致无法识别该页面、断电或者文件系统问题导致页面丢失。
104 12
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
|
16天前
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
|
25天前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
2月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
374 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
2月前
|
缓存 Java 数据库连接
使用MyBatis缓存的简单案例
MyBatis 是一种流行的持久层框架,支持自定义 SQL 执行、映射及复杂查询。本文介绍了如何在 Spring Boot 项目中集成 MyBatis 并实现一级和二级缓存,以提高查询性能,减少数据库访问。通过具体的电商系统案例,详细讲解了项目搭建、缓存配置、实体类创建、Mapper 编写、Service 层实现及缓存测试等步骤。
|
2月前
|
SQL Java 数据库连接
mybatis使用四:dao接口参数与mapper 接口中SQL的对应和对应方式的总结,MyBatis的parameterType传入参数类型
这篇文章是关于MyBatis中DAO接口参数与Mapper接口中SQL的对应关系,以及如何使用parameterType传入参数类型的详细总结。
42 10
|
3月前
|
SQL XML Java
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
文章介绍了MyBatis中动态SQL的用法,包括if、choose、where、set和trim标签,以及foreach标签的详细使用。通过实际代码示例,展示了如何根据条件动态构建查询、更新和批量插入操作的SQL语句。
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
|
2月前
|
SQL 大数据 API
大数据-132 - Flink SQL 基本介绍 与 HelloWorld案例
大数据-132 - Flink SQL 基本介绍 与 HelloWorld案例
47 0
|
4月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
3月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
54 1