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

《MyBatis变形记:当SQL遇上“智能管家“》

各位代码魔法师们,准备好迎接MyBatis的"超级赛亚人"形态了吗?这次的升级可不是小打小闹,而是从"基础查询"跃升到了"智能管家"级别!让我们一起来看看这个"会思考"的SQL是如何工作的。

 第一章:Student的"回归正常"

好消息!那个叛逆的`s_sex`字段终于想通了,回归了正常的`sex`字段:

java
private String sex;  // 终于不再特立独行了!

而且它还多了两个构造方法:
- 无参构造:public Student() - "我是空白简历"
- 带参构造:public Student(String name, Integer age, String sex) - "我是完整档案"

最搞笑的是toString()方法里还有个小小的"笔误":
java
", s_sex='" + sex + '\''  // 等等,字段名不是改回sex了吗?
这就像一个人改了名字,但名片上还印着旧名字——小小的尴尬!

第二章:Dao接口的"批量超能力"

原来的Dao只是个"零售店",现在升级成了"批发市场":

java
// 批量删除 - 一次性送走多个学生
public int deleteByArray(@Param("ids") Integer[] ids);

// 批量添加 - 一次性迎接新生大军  
public int insertMore(@Param("students") List<Student> students);

注意这里的`@Param("ids")`和`@Param("students")`,它们就像给参数起了个"外号",让MyBatis在XML里能准确识别。

第三章:动态SQL的"智能大脑"

这才是本次升级的精华!MyBatis不再是那个死板的"复读机",而是变成了会思考的"智能管家"。

场景一:条件搜索的"多重人格"

xml
<select id="search" parameterType="com.qcby.entity.Student" resultType="com.qcby.entity.Student">
<!-- 原来的死板方式 -->
<!-- select * from student where name=#{name} and age=#{age} and sex=#{sex} -->

<!-- 现在的智能方式 -->
select * from student
<where>
<choose>
<when test="name!=null and name!=''">
name=#{name}
</when>
<when test="age!=null">
and age=#{age}
</when>
<otherwise>
and sex=#{sex}
</otherwise>
</choose>
</where>
</select>

这就像有个聪明的管家在问:
- "主人,你要按名字找吗?"
- "不要?那按年龄找?"  
- "还不要?那我就默认按性别找咯!"

场景二:修改操作的"精准手术"

xml
<update id="update" parameterType="com.qcby.entity.Student">
update student
<trim prefix="set" suffixOverrides=",">
<if test="name!=null">name = #{name},</if>
<if test="age!=null">age=#{age},</if>
<if test="sex!=null">sex=#{sex}</if>
</trim>
where id = #{id}
</update>

这个<trim>标签就像个细心的编辑:
- prefix="set":开头加上SET关键字
- suffixOverrides=",":自动去掉最后一个多余的逗号

这样即使只修改年龄,SQL也不会变成`set age=50,`这种语法错误的样子。

第四章:批量操作的"流水线作业"

批量删除:一键清理

xml
<delete id="deleteByArray">
delete from student where id in
<foreach collection="ids" item="id" separator="," open="(" close=")">
#{id}
</foreach>
</delete>

这个<foreach>标签就像工厂的流水线:
- collection="ids":原材料是id数组
- item="id":每个零件叫id
- separator=",":用逗号隔开
- open="(" close=")":最后包装成(1,2,3)的样子

批量添加:新生入学仪式

xml
<insert id="insertMore">
insert into student(name,age,sex) values
<foreach collection="students" item="stu" separator=",">
(#{stu.name},#{stu.age},#{stu.sex})
</foreach>
</insert>

这就像开学季,校长不用一个个念名字,直接说:"欢迎张三(18,男)、李四(19,女)、王五(20,男)同时入学!"

第五章:测试类的"实战演练"

测试方法现在变得丰富多彩:

java
@Test
public void search() {
Student student = new Student();
student.setSex("男");  // 只按性别搜索
List<Student> students = mapper.search(student);
}

这个测试就像在说:"管家,帮我找出所有男生,不管他们叫什么名字、多少岁!"

批量操作的测试更是壮观:
java
@Test
public void insertMore(){
// 一次性添加三个学生,像批发市场进货
List<Student> students = Arrays.asList(
new Student("丽丽",21,"女"),
new Student("丽丽1",22,"女"), 
new Student("丽丽2",23,"女")
);
int code = mapper.insertMore(students);
}

第六章:动态SQL标签的"武器库"

MyBatis为我们准备了一整套"智能武器":

1. <if>:基础判断,"如果有...就..."
2. <where>:智能WHERE,自动处理AND/OR问题
3. <trim>:精准修剪,去掉多余符号
4. <choose>/<when>/<otherwise>:多重选择,像switch-case
5. <foreach>:循环处理,批量操作的利器

代码世界的"智慧箴言"

1. 灵活性胜过死板:动态SQL让代码适应各种业务场景
2. 批量操作省时省力:一条SQL搞定多次操作,效率倍增
3. 注解让参数更清晰:@Param就像给参数贴标签,避免混淆
4. 标签组合威力大:各种动态SQL标签组合使用,解决复杂问题

结语

这次的MyBatis升级就像给SQL装上了"人工智能":
- 从"你问我答"变成了"你提需求,我智能解决"
- 从"单打独斗"变成了"团队作战"
- 从"固定套路"变成了"灵活应变"

现在我们的MyBatis不再是简单的"数据搬运工",而是升级成了懂得"察言观色"的智能管家!下次写SQL时,不妨想想:"我的SQL够智能吗?"

🎩 程序员魔法:记住,好的代码不是死板的指令,而是灵活的对话!让SQL学会"思考",你的开发效率将大幅提升!

http://www.dtcms.com/a/408559.html

相关文章:

  • 普宁网站建设在线p图
  • 网站请及时续费西湖南昌网站建设公司
  • 招标网站免费怎么区别做pc端和手机端网站
  • 制作商务网站wordpress 添加子菜单
  • 上海网站建设选缘魁-企查滕州做网站比较好的网络公司
  • 武夷山景区网站建设特点临沧网站建设临沧
  • 做海报哪个网站好thinkphp5来做网站吗
  • 河北雄安新区规划建设局网站宜选科技就是帮人做网站
  • 焦作网站建设兼职洛阳市做网站贴吧
  • 移动网站开发书籍江苏扬州建设工程信息网站
  • 网站如何适应屏幕现在pc端网站开发用的什么技术
  • 网站制作公司很好 乐云践新快速做效果图的网站叫什么
  • 黄石市建设局网站湖南众诚建设 官方网站
  • 自己做装修网站需要多少钱上海网址大全
  • [嵌入式embed]Keil5-STM32F103C8T6(江协科技)+移植FreeRTOS v9模版项目
  • 做窗帘的效果图网站那些因素会影响网站的排名位置
  • 惠州做网站哪家公司好wordpress吗
  • 网站做好了 后期怎么做企业网站营销优缺点
  • 做电子商务网站 除了域名 网页设计 还有服务器 和网站空间怎样建设网站后台
  • 做网站赚钱不旅游网站的首页怎么做
  • 美的网站建设用ps做网站首页
  • 巢湖网站建设公司东莞黄页大全
  • 公路水运建设质量安全监督网站it外包公司联系电话
  • 做卷皮网类似网站wordpress网站手机端菜单栏
  • 网站开发的解决方案国家城乡和住房建设部网站
  • 网站推广需求学习网站后台维护
  • 肇庆住房和城乡建设局网站建设局是个好单位吗
  • 简单建优化网站无需技术php网站服务器搭建
  • 然后建设一个论坛网站外贸网站建设是什么
  • 网站建设方案书阿里云高清图片素材网站推荐