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

阿勒泰建设局网站品牌策划案模板范文

阿勒泰建设局网站,品牌策划案模板范文,网页设计设计网站建设,广告设计与制作专业学校1 动态SQL 动态SQL是MyBatis的特征之一&#xff0c;能够完成不同条件下不同的SQL拼接 1.1 <if>标签 在注册用户的时候&#xff0c;可能会有这样一个问题&#xff0c;由于注册分为两种字段&#xff1a;必填字段和非必填字段&#xff0c;如果在添加用户的时候有不确定的…

1 动态SQL

动态SQL是MyBatis的特征之一,能够完成不同条件下不同的SQL拼接

1.1 <if>标签

在注册用户的时候,可能会有这样一个问题,由于注册分为两种字段:必填字段和非必填字段,如果在添加用户的时候有不确定的字段传入,程序应该如何实现,此时就需要用到动态标签来判断了

例如添加的时候性别gender为非必填字段

@Mapper
public interface UserInfoXMLMapper {Integer insertByXML(UserInfo userInfo);
}
<insert id="insertByXML">insert into userinfo (username,password,age,<if test="gender != null">gender,</if>phone)values (#{username},#{password},#{age},<if test="gender != null">#{gender},</if>#{phone})
</insert>
@Slf4j
@SpringBootTest
class UserInfoXMLMapperTest {@Autowiredprivate UserInfoXMLMapper userInfoXMLMapper;@Testvoid insertByXML() {UserInfo userInfo = new UserInfo();userInfo.setUsername("222");userInfo.setPassword("222");userInfo.setAge(10);userInfo.setGender(1);userInfo.setPhone("123456");Integer integer = userInfoXMLMapper.insertByXML(userInfo);log.info(integer.toString());}
}

首先观察填写gender的情况

@Slf4j
@SpringBootTest
class UserInfoXMLMapperTest {@Autowiredprivate UserInfoXMLMapper userInfoXMLMapper;@Testvoid insertByXML() {UserInfo userInfo = new UserInfo();userInfo.setUsername("222");userInfo.setPassword("222");userInfo.setAge(10);//userInfo.setGender(1);userInfo.setPhone("123456");Integer integer = userInfoXMLMapper.insertByXML(userInfo);log.info(integer.toString());}
}

没有填写gender的情况,此时gender这一选项就没有被拼接

1.2 <trim>标签 

之前的插入用户功能,只有一个gender字段是选择项,如果有多个字段,一般考虑使用标签结合标签,对多个字段都采用动态生成的方式

标签中有如下属性:

1)prefix:表示整个语句块,以prefix的值作为前缀

2)suffix:表示整个语句块,以suffix的值作为后缀

3)prefixOverrides:表示整个语句块要去除掉的前缀

4)suffixOverrides:表示整个语句块要去除掉的后缀

<insert id="insertByXML">insert into userinfo<trim prefix="(" suffix=")" suffixOverrides=","><if test="username != null">username,</if><if test="password != null">password,</if><if test="age != null">age,</if><if test="gender != null">gender,</if><if test="phone != null">phone,</if></trim>values<trim prefix="(" suffix=")" suffixOverrides=","><if test="username != null">#{username},</if><if test="password != null">#{password},</if><if test="age != null">#{age},</if><if test="gender != null">#{gender},</if><if test="phone != null">#{phone},</if></trim>
</insert>

上述代码在整个语句前加'(',在整个语句后加')',去掉','的后缀

@Slf4j
@SpringBootTest
class UserInfoXMLMapperTest {@Autowiredprivate UserInfoXMLMapper userInfoXMLMapper;@Testvoid insertByXML() {UserInfo userInfo = new UserInfo();userInfo.setUsername("222");userInfo.setPassword("222");userInfo.setAge(10);//userInfo.setGender(1);//userInfo.setPhone("123456");Integer integer = userInfoXMLMapper.insertByXML(userInfo);log.info(integer.toString());}
}

让性别和电话号码两项编程非必填项,再次观察结果

可以看出,左右括号都添加上了,并且去掉了最后面的',' 

在以上SQL动态解析时,会将第一个部分做如下处理:

1)基于prefix配置,开始部分加上 (

2)基于suffix配置,结尾部分加上   )

3)多个组织语句都以','结尾,在最后拼接好的字符串还会以','结尾的,会基于suffixOverrides配置去掉最后一个','

1.3 <where>标签 

在以下场景,系统会根据我们筛选的条件,动态的组装where条件

List<UserInfo> selectByXML(UserInfo userInfo);
<select id="selectByXML" resultType="com.example.demo.UserInfo">select * from userinfo<where><if test="username != null">username = #{username}</if><if test="age != null">and age = #{age}</if><if test="gender != null">and gender = #{gender}</if></where>
</select>
@Test
void selectByXML() {UserInfo userInfo = new UserInfo();userInfo.setUsername("222");userInfo.setAge(10);userInfo.setGender(1);List<UserInfo> userInfoList = userInfoXMLMapper.selectByXML(userInfo);log.info(userInfoList.toString());
}

去掉username和gender再次观察 

@Test
void selectByXML() {UserInfo userInfo = new UserInfo();//userInfo.setUsername("222");userInfo.setAge(10);//userInfo.setGender(1);List<UserInfo> userInfoList = userInfoXMLMapper.selectByXML(userInfo);log.info(userInfoList.toString());
}

可以看到,<where>自动帮我们去除了开头的and, 当查询的条件都为空时,<where>标签还会自动去掉where关键字

以上标签也可以使用 <trim prefix="where" prefixOverrides="and"> 替换,但是有些情况下,当子元素都没有内容时,where关键字也会保留

1.4 <set>标签

根据传入的用户对象属性来更新用户数据,可以使用标签指定动态内容

使用trim标签

Integer updateByXML(UserInfo userInfo);
<update id="updateByXML">update userinfo set<trim prefix="set" suffixOverrides=","><if test="username != null">username = #{username},</if><if test="age != null">age = #{age},</if><if test="gender != null">gender = #{gender},</if></trim>where id = 14
</update>
@Test
void updateByXML() {UserInfo userInfo = new UserInfo();userInfo.setUsername("456");userInfo.setAge(4);userInfo.setGender(2);Integer integer = userInfoXMLMapper.updateByXML(userInfo);log.info(integer.toString());
}

将username和gender去掉,再观察 

使用<set>标签 

@Test
void updateByXML() {UserInfo userInfo = new UserInfo();//userInfo.setUsername("456");userInfo.setAge(4);//userInfo.setGender(2);Integer integer = userInfoXMLMapper.updateByXML(userInfo);log.info(integer.toString());
}
<update id="updateByXML">update userinfo<set><if test="username != null">username = #{username},</if><if test="age != null">age = #{age},</if><if test="gender != null">gender = #{gender},</if></set>where id = 14
</update>

使用<set>标签可以再动态SQL语句中插入set关键字,并且会删除额外的逗号(用于update语句中)

1.5 <foreach>标签

对集合进行遍历时使用该标签,标签有如下属性:

1)collection:绑定⽅法参数中的集合,如List,Set,Map或数组对象

2)item:遍历时的每⼀个对象

3)open:语句块开头的字符串

4)close:语句块结束的字符串

5)separator:每次遍历之间间隔的字符串

Integer deleteByIds(List<Integer> ids);
<delete id="deleteByIds">delete from userinfo where id in<foreach collection="ids" separator="," item="id" open="(" close=")">#{id}</foreach>
</delete>
@Test
void deleteByIds() {Integer integer = userInfoXMLMapper.deleteByIds(Arrays.asList(12, 13, 14, 15));log.info(integer.toString());
}

1.6 <include>标签 

在XML映射文件中配置SQL,有时可能会存在很多重复的片段,此时就会存在很多冗余的代码

此时可以对重复的代码片段进行抽取,将其通过<sql>标签封装到一个SQL片段 ,然后通过<include>标签进行引用

1)<sql>:定义可重用的SQL片段

2)<include>:通过属性refid,指定包含的SQL片段

<sql id="allColumn">id, username, age, gender, phone, delete_flag, create_time, update_time
</sql>
<select id="queryAllUser" resultMap="BaseMap">select<include refid="allColumn"></include>from userinfo
</select>
<select id="queryById" resultType="com.example.demo.model.UserInfo">select<include refid="allColumn"></include>from userinfo where id= #{id}
</select>

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

相关文章:

  • 邵阳 做网站公司网络营销的特点主要包括什么
  • 网站服务器大小网站内页设计
  • 网站怎么做聚合页面高清效果图网站
  • 嘉兴企业网站开发零基础怎么自学动画制作
  • 电商平台设计电商网站建设苏州网站建设集团
  • 订货网站建设自己公司做网站
  • 徐水网站建设北京市网站建设企业
  • 手机网站制作建设建筑行业招聘网站排行榜
  • 免费做自我介绍网站深圳企业模板网站建设
  • 企业营销推广怎么做泰安网站seo
  • 邯郸市永年区做网站的公司一站式企业网站建设
  • wdcp 网站无法访问福州专业网站制作公司
  • 泰康人寿网站如何做计划领取网站开发个人感想
  • 做封面图什么网站暑假旅游最适合的城市
  • 定制网站的制作流程商城天气
  • 网站开发php jsp苏州网站建设专家
  • 网站数据分析视频做ui设计的软件
  • 工信部网站备案通知网站建设常见故障
  • 北京做网站费用郑州app开发公司定制外包
  • 兼职网站项目建设报告(完整版)wordpress 安装主题 无法调用图片和颜色
  • 永州网站建设网站山东又一地检测阳性
  • 代做广联达 的网站南阳网站建设aokuo
  • 达内网站开发公司网站建设需要什么
  • 网站 国外空间不需要icp许可证吗友情链接检查工具
  • 电子商务网站总体框架设计wordpress好的播放器
  • php网站开发 招聘python网站开发
  • 国家工程建设质量奖网站网站开发 定制 合同范本
  • 宁波网站建设兼职网站如何添加百度统计
  • 合肥建网站要多少钱wordpress cdn国内插件
  • 怎么设计自己的网站网站被降权后怎么办