mybatis快速入门(四)
mybatis动态标签<where><if><foreach>以及sql片段
1.创建一个包装类UserQueryVo.java
package cn.my.mybatis.entity;
public class UserQueryVo {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
2.UserMapp.xml里面添加新增一个查询sql
<!-- 入参类型是包装类 -->
<select id="findByNameAndSex" parameterType="cn.my.mybatis.entity.UserQueryVo" resultType="cn.my.mybatis.entity.User">
select * from user
<!-- where标签可以去掉首个and ,sql动态标签和jstl标签很类似,大家看一下应该就差不多了 -->
<where>
<if test="user != null">
<if test="user.sex != null and user.sex != ''">
and sex=#{user.sex}
</if>
<if test="user.username != null and user.username != ''">
and username=#{user.username}
</if>
</if>
</where>
</select>
3.UserDaoMapper.java文件中添加映射方法
public List<User> findByNameAndSex(UserQueryVo userVo);
4.TestUserMapper.java文件中添加测试方法
/**
* 根据名称和sex查询
*/
@Test
public void testFindByNameAndSex(){
SqlSession session = factory.openSession();
UserDaoMapper dao = session.getMapper(UserDaoMapper.class);//获取mybatis的动态代码实现接口对象
//这里就是构建包装类
UserQueryVo userQueryVo = new UserQueryVo();
User user = new User();
user.setUsername("王小二");
user.setSex("男");
userQueryVo.setUser(user); List<User> list = dao.findByNameAndSex(userQueryVo);
session.commit();
session.close();
System.out.println(list);
}
运行结果:[User [id=28, username=王小二, sex=男, birthday=Sat Sep 23 00:00:00 CST 2017, address=河南郑州]]
上面where和if标签都是使用过了
foreach标签使用
1.UserMapp.xml里面添加新增一个查询sql
<!-- 入参类型是包装类 -->
<select id="findByIds" parameterType="cn.my.mybatis.entity.UserQueryVo" resultType="cn.my.mybatis.entity.User">
select * from user
<!-- where标签可以去掉首个and ,sql动态标签和jstl标签很类似,大家看一下应该就差不多了 -->
<where>
<if test="listIds != null">
collection:UserQueryVo的属性名,item表示临时名称下面使用的,open:拼接字符串的开始,close拼接字符串的结束,separator:分隔符
<foreach collection="listIds" item="id" open=" id in (" close=")" separator=",">
#{id}
</foreach>
</if>
</where>
</select>
2.UserDaoMapper.java文件中添加映射方法
public List<User> findByIds(UserQueryVo userVo);
3.TestUserMapper.java文件中添加测试方法
@Test
public void testFindByIds(){
SqlSession session = factory.openSession();
UserDaoMapper dao = session.getMapper(UserDaoMapper.class);//获取mybatis的动态代码实现接口对象
//这里就是构建包装类
UserQueryVo userQueryVo = new UserQueryVo();
List<Integer> ids = new ArrayList<Integer>();
ids.add(1);
ids.add(10);
ids.add(22);
userQueryVo.setListIds(ids); List<User> list = dao.findByIds(userQueryVo);
session.commit();
session.close();
for (User user : list) {
System.out.println(user);
}
}
sql语句为:
select * from user WHERE id in ( ? , ? , ? )
运行结果:
User [id=1, username=王五, sex=2, birthday=null, address=null]
User [id=10, username=张三, sex=1, birthday=Thu Jul 10 00:00:00 CST 2014, address=北京市]
User [id=22, username=陈小明, sex=1, birthday=null, address=河南郑州]
上面基本的都讲完了,还差最后一个sql片段了
那我们把UserMapper.xml改造一下即可,里面只讲条件提取到sql标签中了,其它的所有代码都不需要变化。上代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="cn.my.dao.UserDaoMapper">
<select id="findById" parameterType="int" resultType="cn.my.mybatis.entity.User">
select * from user where id=#{id}
</select> <!-- sql片段 -->
<sql id="byNameAndSex_where">
<if test="user != null">
<if test="user.sex != null and user.sex != ''">
and sex=#{user.sex}
</if>
<if test="user.username != null and user.username != ''">
and username=#{user.username}
</if>
</if>
</sql> <!-- 入参类型是包装类 -->
<select id="findByNameAndSex" parameterType="cn.my.mybatis.entity.UserQueryVo" resultType="cn.my.mybatis.entity.User">
select * from user
<!-- where标签可以去掉首个and ,sql动态标签和jstl标签很类似,大家看一下应该就差不多了 -->
<where>
<!-- 将原有的代码直接写进sql标签中就搞定,如果sql片段在其它xml文件中那么直接引入其它文件的sql片段路径即可 -->
<include refid="byNameAndSex_where"/>
</where>
</select> <!-- sql片段 -->
<sql id="byIds_where">
<if test="listIds != null">
<!-- collection:UserQueryVo的属性名,item表示临时名称下面使用的,open:拼接字符串的开始,close拼接字符串的结束,separator:分隔符 -->
<foreach collection="listIds" item="id" open=" id in (" close=")" separator=",">
#{id}
</foreach>
</if>
</sql> <!-- 入参类型是包装类 -->
<select id="findByIds" parameterType="cn.my.mybatis.entity.UserQueryVo" resultType="cn.my.mybatis.entity.User">
select * from user
<!-- where标签可以去掉首个and ,sql动态标签和jstl标签很类似,大家看一下应该就差不多了 -->
<where>
<!-- 将原有的代码直接写进sql标签中就搞定,如果sql片段在其它xml文件中那么直接引入其它文件的sql片段路径即可 -->
<include refid="byIds_where"/>
</where>
</select> <!-- 新增映射 修改id名称为了以后封装basedao-->
<insert id="insert" parameterType="cn.my.mybatis.entity.User">
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO `user` (`username`,`birthday`,`sex`,`address`)
VALUES(#{username},#{birthday},#{sex},#{address})
</insert> <!-- 修改用户 修改id名称为了以后封装basedao-->
<update id="update" parameterType="cn.my.mybatis.entity.User">
UPDATE `user`
SET
`username` = #{username},
`birthday` = #{birthday},
`sex` = #{sex},
`address` = #{address}
WHERE `id` = #{id} ;
</update>
<!-- 删除 修改id名称为了以后封装basedao -->
<delete id="delete" parameterType="java.lang.Integer">
delete from user where id=#{id}
</delete>
</mapper>
写得可能不够好,如果有需要加群一起研究的可以q我,939705214,也可以直接加群号581591235,也可以加微信群号

mybatis快速入门(四)的更多相关文章
- MyBatis学习总结(一)——MyBatis快速入门
一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...
- MyBatis快速入门
一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...
- MyBatis学习总结(一)——MyBatis快速入门(转载)
本文转载自http://www.cnblogs.com/jpf-java/p/6013537.html MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了 ...
- MyBatis入门学习教程-MyBatis快速入门
一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...
- MyBatis学习总结(一)——MyBatis快速入门
一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...
- 【转】MyBatis学习总结(一)——MyBatis快速入门
[转]MyBatis学习总结(一)——MyBatis快速入门 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC ...
- MyBatis学习总结-MyBatis快速入门的系列教程
MyBatis学习总结-MyBatis快速入门的系列教程 [MyBatis]MyBatis 使用教程 [MyBatis]MyBatis XML配置 [MyBatis]MyBatis XML映射文件 [ ...
- MyBatis学习笔记(一)——MyBatis快速入门
转自孤傲苍狼的博客:http://www.cnblogs.com/xdp-gacl/p/4261895.html 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优 ...
- Java基础-SSM之mybatis快速入门篇
Java基础-SSM之mybatis快速入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 其实你可能会问什么是SSM,简单的说就是spring mvc + Spring + m ...
随机推荐
- .NET图表控件(LightningChart )的用法
概述 LightningChart (LightningChart Ultimate) 软件开发工具包是微软Visual Studio 的一个插件,专攻大数据可视化呈现问题,用于 WPF(Window ...
- Thrift入门
简介 Thrift最初由Facebook研发,主要用于各个服务之间的RPC通信,支持跨语言,常用的语言比如C++, Java, Python, PHP, Ruby, Erlang, Perl, Has ...
- PLECS—模型仿真——第十一周作业
1. 直流电机单闭环调速系统比例控制仿真 (1)整体电路图 (2)控制部分电路图 (3)参数设置+仿真结果 2. 直流电机单闭环调速系统比例积分控制仿真 (1)参数设置 (2)仿真结果 3. 直流电机 ...
- 关于在jsp中的路径问题
前言: jsp作为javaweb开发中常见的视图技术,我们平时在开发项目使用的过程中,经常会导入一些静态资源,比如css\js\jpg.png等图片格式的文件,这些文件的路径成了问题,经常会出现索引不 ...
- macbook air扩展显示器全屏滑动怎样不一起滑动?
macbook air 外接了一个显示器(扩展),当我有多个桌面时,用手指滑动触控板切换桌面时,扩展屏幕也跟着切换桌面有什么办法能让我在切换主屏幕桌面的时候,扩展屏幕保持不动呢?上周还好好的,昨晚关机 ...
- 揽货最短路径解决方案算法 - C# 蚁群优化算法实现
需求为(自己编的,非实际项目): 某配送中心进行揽货,目标客户数为50个客户,配送中心目前的运力资源如下: 现有车辆5台 单台运力最大行驶距离200千米 单台运力最大载重公斤1吨 问:运力怎样走法才能 ...
- 【Unity3D技术文档翻译】第1.1篇 AssetBundle 工作流
译者前言:本章是关于从创建到加载,再到使用 AssetBundle 的整个流程的概述.阅读本章将对 AssetBundle 的工作流程有个简单而全面的了解. 本章原文所在章节:[Unity Manua ...
- spring 代码中获取ApplicationContext(@AutoWired,ApplicationListener)
2017年度全网原创IT博主评选活动投票:http://www.itbang.me/goVote/234 学习spring框架时间不长,一点一滴都得亲力亲为.今天忽然觉得老是通过@Autowir ...
- java获取windows下面的文件对象
import javax.swing.*;import javax.swing.filechooser.FileSystemView;import java.io.File; FileSystemVi ...
- 老男孩Python全栈开发(92天全)视频教程 自学笔记18
day18课程内容: os模块 import osprint(os.getcwd())#D:\untitled\练习题 获取当前工作目录os.chdir(r'D:\untitled\练习题\16.1切 ...