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

电商网站服务排名公司网站建设宣传报道稿件

电商网站服务排名,公司网站建设宣传报道稿件,公司需要做网站需要什么流程,满分作文网站一、MyBatis 动态 SQL 标签详解 标签作用核心属性使用场景示例<if>条件判断test"表达式"非必填字段处理xml <if test"gender ! null">gender#{gender}</if><trim>智能去除多余字符prefix/suffix prefixOverrides/suffixOverrides…

一、MyBatis 动态 SQL 标签详解

标签作用核心属性使用场景示例
<if>条件判断test="表达式"非必填字段处理xml <if test="gender != null">gender=#{gender}</if>
<trim>智能去除多余字符prefix/suffix
prefixOverrides/suffixOverrides
多字段动态插入/更新[见下方完整示例]
<where>动态生成 WHERE 子句,自动去除开头 AND/OR条件查询xml <where><if test="age!=null">AND age=#{age}</if></where>
<set>动态生成 SET 子句,自动去除尾部逗号更新操作xml <set><if test="name!=null">name=#{name},</if></set>
<foreach>遍历集合collection/item
open/close/separator
批量删除/IN 查询xml <foreach collection="ids" item="id" open="(" close=")" separator=",">#{id}</foreach>
<include>引用公共 SQL 片段refid消除重复 SQLxml <include refid="baseColumn"/>
<sql>定义可重用 SQL 片段id抽取公共字段列表xml <sql id="baseColumn">id,name,age</sql>
<trim> 完整示例(多字段插入)
<insert id="insertUser">INSERT INTO user<trim prefix="(" suffix=")" suffixOverrides=","><if test="username != null">username,</if><if test="password != null">password,</if></trim>VALUES<trim prefix="(" suffix=")" suffixOverrides=","><if test="username != null">#{username},</if><if test="password != null">#{password},</if></trim>
</insert>

二、XML vs 注解方式对比

特性XML 方式注解方式推荐场景
动态SQL原生支持,结构清晰需用<script>包裹,可读性差复杂业务首选 XML
可维护性SQL 与 Java 代码分离SQL 嵌入代码中中大型项目用 XML
多表关联支持强大的 ResultMap关联映射能力有限复杂关联查询用 XML
IDE 支持语法高亮、自动提示无 SQL 校验所有场景
批量操作完整支持拼接复杂批量操作强制 XML
注解方式示例(不推荐)
@Update("<script>" +"UPDATE user " +"<set>" +"   <if test='name!=null'>name=#{name},</if>" +"</set>" +"WHERE id=#{id}" +"</script>")
void updateUser(User user);

三、Mapper XML 实践

1. 基础结构规范
<?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.example.mapper.UserMapper"><!-- 1. 公共SQL片段 --><sql id="baseColumn">id,username,email</sql><!-- 2. ResultMap映射 --><resultMap id="userMap" type="User"><id column="id" property="id"/><result column="create_time" property="createTime"/></resultMap><!-- 3. SQL语句 --><select id="selectById" resultMap="userMap">SELECT <include refid="baseColumn"/>FROM user WHERE id = #{id}</select>
</mapper>
2. 动态 SQL 技巧
  • 避免空条件陷阱:用<where>替代WHERE 1=1

  • 批量插入优化

    <insert id="batchInsert">INSERT INTO user (name) VALUES<foreach collection="list" item="item" separator=",">(#{item.name})</foreach>
    </insert>

  • 安全更新:配合<set>防止全表更新

    <update id="update">UPDATE user<set><if test="name != null">name=#{name}</if></set>WHERE id = #{id} AND status = 1 <!-- 双重保险 -->
    </update>

四、项目实战:图书管理系统

1. 假设他需要我这个分页的字段在xml中
<!-- BookInfoMapper.xml -->
<select id="queryBookListByPage" resultType="BookInfo">SELECT id, book_name, author, count, price, publish, statusFROM book_infoWHERE status != 0ORDER BY id DESCLIMIT #{offset}, #{pageSize}
</select><select id="count" resultType="int">SELECT COUNT(1) FROM book_info WHERE status != 0
</select>
2. 逻辑删除 vs 物理删除
类型实现方式SQL 示例优点
逻辑删除更新状态字段UPDATE book SET status=0 WHERE id=#{id}数据可恢复,安全
物理删除真实删除数据DELETE FROM book WHERE id=#{id}节省存储空间
3. 条件更新(动态 SQL 典范)
<update id="updateBook">UPDATE book_info<set><if test="bookName != null">book_name = #{bookName},</if><if test="author != null">author = #{author},</if><if test="status != null">status = #{status},</if></set>WHERE id = #{id} AND status != 0 <!-- 防止更新已删除数据 -->
</update>

五、MyBatis 高级特性

1. 结果集自动映射
# application.yml
mybatis:configuration:map-underscore-to-camel-case: true # 开启驼峰转换auto-mapping-behavior: full # 自动映射未知字段
2. 枚举类型处理
// 枚举转换器
public enum BookStatus {NORMAL(1, "可借阅"),FORBIDDEN(2, "不可借阅");private final int code;private final String name;// 通过code获取枚举public static BookStatus fromCode(int code) { ... }
}// Mapper中使用
<result column="status" property="status" typeHandler="org.apache.ibatis.type.EnumOrdinalTypeHandler"/>
3. 二级缓存配置
<!-- Mapper.xml 开启缓存 -->
<cache eviction="LRU" flushInterval="60000" size="512" readOnly="true"/><!-- 特定语句禁用缓存 -->
<select id="selectLatest" useCache="false"> ... </select>

六、避坑指南

  1. 参数引用问题

    • #{field} 防止 SQL 注入

    • ${field} 直接拼接 SQL(慎用!)

  2. 动态 SQL 陷阱

    <!-- 错误示例:逗号问题 -->
    UPDATE user 
    <set><if test="name!=null">name=#{name},</if> <!-- 多余逗号会导致语法错误 -->age=#{age}
    </set><!-- 正确:用<set>智能处理 -->
  3. 批量操作优化

    // 分批提交(每1000条提交一次)
    @Transactional
    void batchInsert(List<User> users) {SqlSession batchSession = sqlSessionFactory.openSession(ExecutorType.BATCH);UserMapper mapper = batchSession.getMapper(UserMapper.class);for (int i = 0; i < users.size(); i++) {mapper.insert(users.get(i));if (i % 1000 == 0) batchSession.flushStatements();}batchSession.commit();
    }

七、典型应用场景解决方案

场景解决方案
多条件模糊查询<where> + <if test="name!=null and name!=''">AND name LIKE CONCAT('%',#{name},'%')</if>
批量逻辑删除<update> + <foreach>
主从表关联查询使用<resultMap><collection>标签
动态列排序ORDER BY ${sortField} ${sortOrder} (注意注入风险)
唯一约束冲突处理ON DUPLICATE KEY UPDATE + 动态<set>

总结

  1. 动态 SQL 优先 XML:复杂业务场景使用 XML 配置,保持代码清晰度

  2. 安全第一原则

    • 更新/删除操作必须带 WHERE 条件

    • 批量操作使用 @Transactional 保证事务

  3. 性能优化关键

    • 分页查询先查总数再查数据

    • 批量操作使用 BATCH 执行器

  4. 可维护性实践

    • 使用 <sql> 片段复用 SQL

    • 字段枚举值统一管理

通过图书管理系统实战案例,掌握 MyBatis 动态 SQL 在 CRUD 操作中的灵活应用,特别关注分页查询、条件更新、批量删除等高频场景的实现细节。


文章转载自:

http://waZfFl1p.xmnLc.cn
http://cPpKwM3j.xmnLc.cn
http://s5zQ5p3i.xmnLc.cn
http://62rkAtn5.xmnLc.cn
http://jqradZVe.xmnLc.cn
http://v1hiaOrx.xmnLc.cn
http://w73zvkPY.xmnLc.cn
http://1gjXC7jv.xmnLc.cn
http://lnMHhkBh.xmnLc.cn
http://eE3ME7u9.xmnLc.cn
http://BFZP7yY9.xmnLc.cn
http://zUB8ehsV.xmnLc.cn
http://wqg3AjRV.xmnLc.cn
http://qQdmJhVy.xmnLc.cn
http://9BMSsUOP.xmnLc.cn
http://zFXCmZZP.xmnLc.cn
http://M4WEU9tV.xmnLc.cn
http://kQNwtSvk.xmnLc.cn
http://LtuSALsz.xmnLc.cn
http://HskAAsU3.xmnLc.cn
http://OwSAnR3Y.xmnLc.cn
http://bA39d7xd.xmnLc.cn
http://XDKCneTz.xmnLc.cn
http://Ax5C0oeQ.xmnLc.cn
http://kzUOLsC7.xmnLc.cn
http://OWN4Zvvt.xmnLc.cn
http://eQCcRXlS.xmnLc.cn
http://nxhvcwwy.xmnLc.cn
http://WBxNItf0.xmnLc.cn
http://GPKFA4qr.xmnLc.cn
http://www.dtcms.com/wzjs/685141.html

相关文章:

  • 移动路由器做网站服务器吗接私活app有哪些平台
  • 英文网站推广工作广州建设技术职业学院有什么专业
  • 做h网站风险个体户做网站
  • 汽车交易网站系统建设网络营销中seo是什么意思
  • 金阊seo网站优化软件python做网站例子
  • 做电影网站需要什么软件青岛公司做网站
  • 做家政应该下载什么网站查询网站开发
  • 东莞外贸网站设计福州短视频seo
  • 粉末涂料做网站有用吗黄平网站建设
  • 网站开发补全邢路桥建设总公司网站
  • 京东联盟怎么做CMS网站软考哪个证书最有用
  • 特色的企业网站建设怎么做一个网站的步骤
  • 建设部网站人员查询wordpress文章dux评论修改
  • 免费做cpa单页网站企业网查询系统
  • 淘宝刷单网站怎么建设源代码百度移动网站建设有几种
  • 南京网站开发询南京乐识进入福建省建设干部培训中心网站
  • 铜陵网站建设vue旅游网站怎么做
  • 公司开发一个网站的流程自己做的网站手机不能看
  • 做药公司的网站前置审批wordpress函数大全
  • 自己有了域名 怎么做网站温州seo结算
  • 做网站好一点的软件百度sem
  • 做僾网站wdcp v3搭建WordPress
  • 高端手机网站建设需要多少钱wordpress sql语句
  • 200m的空间可以做大大的网站潍坊视频类网站建设
  • 天津网站备案技术支持 佛山网站建设
  • php电商网站开发的优势江西网站开发企业
  • intitle 无线网站制作免费的招聘平台有哪些
  • WordPress1001无标题深圳seo优化公司排名
  • 威海网站制作怎么样网站首页原型图
  • 南阳定制网站制作价格低用vue做网站