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 ...
随机推荐
- Phone文件备份
一 把照片导入到本地 连接手机和PC,插上数据线后PC上会自动检测并弹出对话框,提示导入 可以指定导入的目录.确定之后点击导入即可开始执行导入操作. 二 把语音备忘录导入到本地 需要借助iTunes联 ...
- mac给文件批量添加后缀名
for i in *;do mv "$i" "$i.mp4";done
- CentOS利用Nginx+Docker部署.netcore应用
安装docker 官方文档https://docs.docker.com/engine/installation/linux/docker-ce/centos/ [root@sn ~]# yum re ...
- try{}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会 不会被执行,什么时候被执行,在 return 前还是后?
这是一道面试题,首先finally{}里面的code肯定是会执行的,至于在return前还是后, 看答案说的是在return后执行,我觉得不对,百度了一下,有说return前的,有说return后的, ...
- Yii2中DAO
数据库访问 (DAO) 创建数据库连接 执行 SQL 查询 引用表和列名称 执行事务 复制和读写分离 操纵数据库模式 Yii 包含了一个建立在 PHP PDO 之上的数据访问层 (DAO).DAO为不 ...
- 使用C#开发C/S框架高级版添加新项目实例
操作步骤: 1.新建一个项目CSFramework3.test,在CSFramework3.test项目下新建一个FormMan窗口(此时不需要继承). 2.按F7打开类,替换一下引用 using S ...
- 恢复Mysql丢失的root用户权限
今天安装了某个程序时, 由于程序很傻X的 新建了一个 root@localhost 用户 并把 root权限全部改为了 no 这下 我也 傻X 了.服务器上所有程序都崩溃了. 此时即使用root用 ...
- hbase 命令
HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协同服 ...
- python 常见错误和异常 函数 正则表达式及多线程编程
生成随机密码#!/usr/bin/env python import stringfrom random import choice def gen_pass(num=9): all_chs = st ...
- rpm检验是否被改动过
参考原文http://vbird.dic.ksu.edu.tw/linux_basic/0520rpm_and_srpm.php#rpmmanager_verify rpm -qVa (当然可 ...