首先数据库中的自增id会因为你的删除数据而发生断层
我们可以清空数据库数据和改变下一个自增来解决但都不能不通过操作就解决问题
下面我们通过一行代码获取长形字符串ID
package utils;
import java.util.UUID;
/**
* @author:LeeGaki
* @date:2022/1/7
*/
public class IDUtils {
public static String getID(){
return UUID.randomUUID().toString().replaceAll("-","");
}
}
说动态sql之前提一下sql片段简化代码
可以定义sql标签给它一个id,将你的代码放进去 然后在sql中用include标签引用
<sql id="set-if"> <set>
<if test="name!=null"> <include refid="set-if"/>
name=#{name} </set>
</if>
<if test="name==null">
name=name
</if>
</sql>
动态sql
所谓的动态sql其实本质还是sql语句,只是在执行sql语句的同时去执行一些逻辑代码。
where标签
if语句
where标签会匹配下面传入的sql语句 假如传入的sql语句是第一个条件自动去除and
<select id="getTea" resultType="pojo.Teacher" parameterType="map">
select * from school.teacher
<where>
<if test="name != null">
and school.teacher.name=#{name}
</if>
</where>
</select>
测试类:
@Test
public void getTea(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
Map map = new HashMap();
map.put("name","我");
List<Teacher> tea = mapper.getTea(map);
for (Teacher teacher : tea) {
System.out.println(teacher);
}
sqlSession.close();
}
choose语句
choose标签 只能选择其中一个
<select id="getTea" resultType="pojo.Teacher" parameterType="map">
select * from school.teacher
<where>
<choose>
<when test="name!=null">
name=#{name}
</when>
<otherwise>
id=#{id}
</otherwise>
</choose>
</where>
</select>
set标签
name=name防止不输入set语句报错
<update id="upTea" parameterType="map">
update school.teacher
<set>
<if test="name!=null">
name=#{name}
</if>
<if test="name==null">
name=name
</if>
</set>
where id = #{id}
</update>