需求:
Sql 中可将重复的 sql 提取出来,使用时用 include 引用即可,最终达到 sql 重用的目的。
<!--抽取重复的sql语句-->
<sql id="defaultFindAll">
select * from user
</sql>
已查询所用为例子
里面的 select * from user 替换为了 :下面的include标签
<!-- 配置查询所有操作 -->
<select id="findAll" resultType="user">
<include refid="defaultSql"></include>
</select>
可以用同样的方法替换UserDao.xml中的 select * from user 语句
需求:
我们根据实体类的不同取值,使用不同的 SQL 语句来进行查询。比如在 id 如果不为空时可以根据 id 查询, 如果 username 不同空时还要加入用户名作为条件。这种情况在我们的多条件组合查询中经常会碰到
/**
* 根据出入德参数条件
* @param user 查询调价:有可能有用户名,也可能有性别,也有可能有地址,也有可能什么都没有
* @return
*/
List<User> findUserByCondition(User user);
添加了了两个条件:
username=“老闫”;
sex=“男”
结果只能输出符合这两个条件的数据
<select id="findUserByCondition" resultMap="userMap" parameterType="user">
<include refid="defaultFindAll"></include>
<where>
<if test="userName != null">
and username = #{userName}
</if>
<if test="userSex != null">
and sex = #{userSex}
</if>
</where>
</select>
@Test
public void findUserByConditionTest(){
User user = new User();
user.setUserName("老闫");
user.setUserSex("女");
List<User> users = mapper.findUserByCondition(user);
for (User user1 : users) {
System.out.println(user1);
}
}
public class QueryVo {
private List<Integer> ids;
private User user;
public List<Integer> getIds() {
return ids;
}
public void setIds(List<Integer> ids) {
this.ids = ids;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
/**
* 查询在ids中的user数据
* @return
*/
List<User> findInIds(QueryVo vo);
foreach 标签中的标签解释:
collection:代表要遍历的集合元素,注意编写时不要写#{}
item 表示集合中每一个元素进行迭代时的别名,
index 指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,
open 表示该语句以什么开始,
separator 表示在每次进行迭代之间以什么符号作为分隔符,
close 表示以什么结束。
<select id="findInIds" resultMap="userMap" parameterType="queryVo">
<include refid="defaultFindAll"></include>
<where>
<if test="ids != null and ids.size() > 0">
<foreach collection="ids" open="and id in (" close=")" item = "ids" separator=",">
#{ids}
</foreach>
</if>
</where>
</select>
@Test
public void findUserInIdsTest(){
QueryVo vo = new QueryVo();
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(3);
list.add(5);
vo.setIds(list);
List<User> inIds = mapper.findInIds(vo);
for (User inId : inIds) {
System.out.println(inId);
}
}
今天学习的内容不多
原因:
上午中午 都用来注册网站了,昨晚在阿里云注册了一个域名www.kiteyy.cn
早上又在腾讯云注册了一个域名www.kitey.cn,和买了一个服务器;然后就成功的进了一次,因为网站要进行备案才可以正常访问了;
可以利用我的服务器的ip地址进行访问给你们看看效果图(哈哈白嫖的代码)
控制台截图:
腾讯云服务器截图
腾讯云域名截图
这里添加了域名解析,才可以连接到购买的服务器
阿里云域名截图
最后希望能早点备案,
嘻嘻 每一天都要加油偶!
2020/6/10/23:17