创建工程
[SpringBoot框架]如何使用SpringBoot框架_万物更新_的博客-CSDN博客
实现步骤:
测试:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.tedu.demo529.mapper.ProductMapper"><!--里面写mapper接口的完全限定名--><insert id="insert">INSERT INTO cs.product(id,title,price,num) VALUES (NULL,#{title},#{price},#{num})</insert><select id="select" resultType="cn.tedu.demo529.entity.Product"># resultType这个里面想把数据封装成什么对象就写什么SELECT * FROM cs.product</select><delete id="deleteById">DELETE FROM cs.product WHERE id=#{id}</delete><update id="update">UPDATE cs.product SET title=#{title},price=#{price},num=#{num} WHERE id=#{id}</update>
</mapper>
动态sql
第一种批量删除
foreach循环遍历标签,collection用来设置遍历对象的类型,#{id}代表的是遍历出来的每一个item里面的id,separator=","是分割符号
//第一种批量删除int deleteByIds1(Integer[] ids);
<delete id="deleteByIds1">DELETE FROM cs.product WHERE id IN(<foreach collection="array" item="id" separator=",">#{id}</foreach>)</delete>
@Testvoid delete1(){Integer[] ids = {10,11,12,13};System.out.println(productMapper.deleteByIds1(ids));}
第二种批量删除 参数为list集合
//第二种批量删除int deleteByIds2(List<Integer> ids);
<delete id="deleteByIds2">DELETE FROM cs.product WHERE id IN(<foreach collection="list" item="id" separator=",">#{id}</foreach>)</delete>
@Testvoid delete2(){ArrayList<Integer> list = new ArrayList<>();list.add(18);list.add(19);list.add(20);System.out.println(productMapper.deleteByIds2(list));}
第三种批量删除 参数为Integer... 和Array数组一样
//第三种批量删除int deleteByIds3(Integer... ids);
<delete id="deleteByIds3">DELETE FROM cs.product WHERE id IN(<foreach collection="array" item="id" separator=",">#{id}</foreach>)</delete>
@Testvoid delete3(){System.out.println(productMapper.deleteByIds3(21,22,23,24));}
动态修改
和上面普通修改的区别在于,如果set修改的字段没给值,那么根据实体类的包装类型会把原字段改为null,动态修改则只是给值的才修改,没给值的不会改.
把STE 改为<set>标签会把多余的逗号去掉(因为如果修改的字段是空的话就就会多一个逗号)
if标签用来进行动态的判断,满足条件时才会生成标签体内的
//动态修改int dynamicUpdate(Product product);
<update id="dynamicUpdate">UPDATE cs.product<set><if test="title!=null">title=#{title},</if><if test="price!=null">price=#{price},</if><if test="num!=null">num=#{num}</if></set>WHERE id=#{id}</update>
@Testvoid dynamicUpdate(){Product p = new Product();p.setId(25);p.setTitle("智能语言机器人");System.out.println(productMapper.dynamicUpdate(p));}
sql片段
定义sql片段,如果要查询的字段非常多,就可以定义为片段
<sql id="selectSQL">id,title,price,num</sql><select id="selectById" resultType="cn.tedu.demo529.entity.Product">SELECT <include refid="selectSQL"></include> FROM cs.product WHERE id=#{id}</select>
也许会飘红,但不影响效果
当使用MyBatis框架查询数据,自定义对象的属性名和表字段的名不一致时如何解决?
1.如果仅仅是命名规范不一致 可以通过在application.properties里面添加以下配置解决
# 配置自动匹配对象属性名和表字段名不一致的问题
mybatis.configuration.map-underscore-to-camel-case=true
2.通过别名的方式解决 可以解决属性名和字段名完全不一致的问题
<select id="select" resultType="cn.tedu.boot10.entity.Class">SELECT id,class_name name,teacher_name teacherName,grade_level gradeLevel FROM class
</select>
3.通过resultMap标签解决,比别名的好处是可以复用
<!--通过ResultMap标签解决属性名和字段名不一致的问题-->
<resultMap id="classRM" type="cn.tedu.boot10.entity.Class"><id property="id" column="id"></id><result property="name" column="class_name"></result><result property="teacherName" column="teacher_name"></result><result property="gradeLevel" column="grade_level"></result>
</resultMap>
<select id="select" resultMap="classRM">SELECT id,class_name,teacher_name,grade_level FROM class
</select>