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

网站建设合同标准范本天津市中小企业局网站

网站建设合同标准范本,天津市中小企业局网站,138ip域名查询网,wordpress找回删除插件文章目录 条件构造器补充知识TypeHandlerWrappers示例: 线程安全性示例: 使用 Wrapper 自定义 SQL示例:使用方法 使用注解查询使用XML配置查询链式调用与Lambda式调用 条件构造器补充知识 TypeHandler 在 wrapper 中使用 typeHandler 需要特…

文章目录

  • 条件构造器补充知识
    • TypeHandler
    • Wrappers
      • 示例:
    • 线程安全性
      • 示例:
    • 使用 Wrapper 自定义 SQL
      • 示例:
      • 使用方法
    • 使用注解查询
    • 使用XML配置查询
    • 链式调用与Lambda式调用

条件构造器补充知识

TypeHandler

在 wrapper 中使用 typeHandler 需要特殊处理利用 formatSqlMaybeWithParam 方法

// 查询
queryWrapper.apply("type={0,typeHandler="+ MyTypeHandler.class.getCanonicalName()+ "}", "待处理字符串");// 更新
updateWrapper.setSql("type={0,javaType=string,jdbcType=VARCHAR,typeHandler=xxx.xxx.MyTypeHandler}", "待处理字符串");

使用提示:

  1. 通过使用 MyBatis-Plus 的 Wrapper 条件构造器,开发者可以更加高效地构建复杂的数据库查询条件,同时保持代码的简洁性和安全性。以下是一些注意事项与推荐做法:

  2. 在使用 Wrapper 时,尽量使用 Lambda 表达式来避免硬编码字段名,这样可以提高代码的可读性和可维护性。

  3. Wrapper 支持链式调用,可以组合多个条件,如 and、or 等逻辑操作符。

  4. 在更新操作中使用 UpdateWrapper 或 LambdaUpdateWrapper 时,可以省略实体对象,直接在 Wrapper 中设置更新字段。

  5. 注意 Wrapper 的线程安全性,通常在每次使用时创建新的 Wrapper 实例。

  6. 在使用 MyBatis-Plus 的 Wrapper 时,应避免将前端动态参数直接拼接到 SQL 片段中,以防止 SQL 注入攻击。MyBatis-Plus 提供了安全的参数绑定方式,如使用 eq、apply 等方法,它们会自动处理参数绑定,避免 SQL 注入风险。

Wrappers

MyBatis-Plus 提供了 Wrappers 类,它是一个静态工厂类,用于快速创建 QueryWrapper、UpdateWrapper、LambdaQueryWrapper 和 LambdaUpdateWrapper 的实例。使用 Wrappers 可以减少代码量,提高开发效率。

示例:

// 创建 QueryWrapper
QueryWrapper<User> queryWrapper = Wrappers.query();
queryWrapper.eq("name", "张三");// 创建 LambdaQueryWrapper
LambdaQueryWrapper<User> lambdaQueryWrapper = Wrappers.lambdaQuery();
lambdaQueryWrapper.eq(User::getName, "张三");// 创建 UpdateWrapper
UpdateWrapper<User> updateWrapper = Wrappers.update();
updateWrapper.set("name", "李四");// 创建 LambdaUpdateWrapper
LambdaUpdateWrapper<User> lambdaUpdateWrapper = Wrappers.lambdaUpdate();
lambdaUpdateWrapper.set(User::getName, "李四");

线程安全性

Wrapper 实例不是线程安全的,因此建议在每次使用时创建新的 Wrapper 实例。这样可以避免多线程环境下的数据竞争和潜在的错误。

示例:

// 在每个方法或请求中创建新的 Wrapper 实例
public List<User> getUsersByName(String name) {QueryWrapper<User> queryWrapper = Wrappers.query();queryWrapper.eq("name", name);return userMapper.selectList(queryWrapper);
}

通过遵循这些最佳实践,开发者可以更加安全、高效地使用 MyBatis-Plus 的 Wrapper 条件构造器,构建出既安全又易于维护的数据库操作代码。

使用 Wrapper 自定义 SQL

MyBatis-Plus 提供了强大的 Wrapper 条件构造器,允许开发者自定义 SQL 语句,以满足更复杂的数据库查询需求。为了使用这一功能,请确保你的 mybatis-plus 版本不低于 3.0.7。
注意事项:

  1. 版本要求:确保你的项目中使用的 mybatis-plus 版本至少为 3.0.7,以支持自定义 SQL 功能。
  2. 参数命名:在自定义 SQL 时,传递 Wrapper 对象作为参数时,参数名必须为 ew,或者使用注解 @Param(Constants.WRAPPER) 明确指定参数为 Wrapper 对象。
  3. 使用 ${ew.customSqlSegment}:在 SQL 语句中,使用 ${ew.customSqlSegment} 来引用 Wrapper 对象生成的 SQL 片段。
  4. 不支持基于 entity 的 where 语句:自定义 SQL 时,Wrapper 对象不会基于实体类自动生成 where 子句,你需要手动编写完整的 SQL 语句。

示例:

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Param;public interface UserMapper extends BaseMapper<User> {@Select("SELECT * FROM user ${ew.customSqlSegment}")List<User> selectByCustomSql(@Param(Constants.WRAPPER) Wrapper<User> wrapper);
}

在上述示例中,我们定义了一个 selectByCustomSql 方法,它使用了一个自定义的 SQL 语句,并通过 ${ew.customSqlSegment} 引入了 Wrapper 对象生成的 SQL 片段。

使用方法

要使用自定义 SQL,只需调用上述方法并传入一个 Wrapper 对象:

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "张三");List<User> userList = userMapper.selectByCustomSql(queryWrapper);

在这个例子中,selectByCustomSql 方法将执行一个带有 where 条件的查询,该条件由传入的 queryWrapper 对象生成。

通过这种方式,你可以灵活地结合 MyBatis-Plus 的 Wrapper 功能和自定义 SQL,以满足各种复杂的数据库操作需求。

使用注解查询

@Select("select * from mysql_data ${ew.customSqlSegment}")
List<MysqlData> getAll(@Param(Constants.WRAPPER) Wrapper wrapper);

使用XML配置查询

List<MysqlData> getAll(Wrapper ew);
<select id="getAll" resultType="MysqlData">SELECT * FROM mysql_data ${ew.customSqlSegment}
</select>

链式调用与Lambda式调用

MyBatis-Plus提供了两种风格的链式调用:普通链式调用和Lambda式链式调用。需要注意的是,Lambda式链式调用不支持Kotlin。

// 普通链式调用
UpdateChainWrapper<T> update();
// Lambda式链式调用(不支持Kotlin)
LambdaUpdateChainWrapper<T> lambdaUpdate();// 等价示例:
query().eq("id", value).one();
lambdaQuery().eq(Entity::getId, value).one();// 等价示例:
update().eq("id", value).remove();
lambdaUpdate().eq(Entity::getId, value).remove();

通过遵循这些最佳实践,我们可以确保Kotlin中的持久化对象定义既清晰又易于维护,同时充分利用MyBatis-Plus提供的功能。

http://www.yayakq.cn/news/341574/

相关文章:

  • 怎么用frontpage做网站绵阳市建设工程监督网站
  • 建设专业网站上海市建设工程材料网站
  • 村建站什么部门广州app定制公司
  • 花生棒 做网站对于网站建设提出建议
  • 网站推广苏州新手怎么学习网站建设
  • 做招牌的网站有哪些seo博客是什么意思
  • 西安有关做网站的公司wordpress 教学
  • 服装网站建设定制制作个人网站怎么做
  • 连云港市城乡建设局网站高效的客户管理crm系统
  • 越秀营销型网站息县网站建设公司
  • nginx wordpress站长工具seo综合查询收费吗
  • 江宁网站建设报价大学网站建设图
  • 中山专业网站制作kali安装wordpress
  • 凡客诚品网站设计特点百度seo关键词
  • 行情网免费网站大全一流的高密做网站的
  • 国内做进口的电商网站做亚马逊常用的网站
  • 站长统计app官方网站可以网上做单的网站有哪些
  • 外贸网站推广公司网站换空间步骤
  • 苏州知名网站建设设计公司排名在线设计软件
  • 免费小说网站怎么做怎么做百度口碑网站
  • 深圳手机医疗网站建设网页设计是学什么的
  • 网站建设设计文档模板工作纪律心得体会
  • 服务好的常州网站建设室内设计师35岁后的出路
  • 营销型网站代理网站开发质量屋
  • 四川省建设资格注册中心网站工业设计ai软件
  • 购物网站排名大全建设网站企业公司
  • 网站域名com和cn的差别在哪里游戏制作需要哪些人员
  • 做网站 (公司)网站如何做外链教程视频
  • 城乡建设部网站自助商品房深圳竞价托管
  • 公司注册资金减少意味着什么优化优化