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
时间: 2024-10-09 18:38:04

mybatis快速入门(四)的相关文章

MyBatis学习总结(一)——MyBatis快速入门

MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 二.mybatis快速入门 2.1.准备开发环境 1.创建测试项目,普通java项目或者是JavaWeb项目均可,如下图所示: 2.添加相应的jar包 [mybat

尚硅谷-mybatis快速入门

1. Mybatis介绍(ibatis) MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. JDBC--->dbutils(自动封装)--->MyBatis--->Hibernate 2. mybatis快速入

MyBatis学习总结(一)——MyBatis快速入门(转载)

孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(一)--MyBatis快速入门 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 二.mybatis快速入门 2.1.准备

MyBatis学习总结——MyBatis快速入门

MyBatis学习总结(一)--MyBatis快速入门 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 二.Mybatis入门 1. 用到的相关包      {Mybatis} mybat

【转】MyBatis学习总结(一)——MyBatis快速入门

[转]MyBatis学习总结(一)——MyBatis快速入门 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 二.mybatis快速入门 2.1.准备开发环境 1.创建测试项目,普通jav

MyBatis学习笔记(一)——MyBatis快速入门

一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 二.mybatis快速入门 2.1.准备开发环境 1.创建测试项目,普通java项目或者是JavaWeb项目均可,如下图所示: 2.添加相应

mybatis介绍和mybatis快速入门

1.mybatis介绍 mybatis是支持普通sql查询,存储过程和该机映射的持久层(把java对象存储到数据库中)框架.几乎消除jdbc代码和手动设置参数以及对结果集的检索封装.mybatis可以使用映射文件xml,接口dao来操作实体类bean. 2.mybatis快速入门 1.建立数据库表users create database mybatis; use mybatis; CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT, NAM

MyBatis快速入门经典

简介 MyBatis的前身叫iBatis,本是apache的一个开源项目, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis.MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java

AndroidStudio快速入门四:打造你的开发工具,settings必备

http://blog.csdn.net/jf_1994/article/details/50085825 前言:这里是使用AS的基本设置,适合新入手的朋友阅读,将这里介绍的设置完基本使用无忧啦. 1.setting介绍 点击菜单栏:File | settings 快捷方式:ctrl+art+s 注意:我们可以在基本设置头部的搜索框直接输入你要设置的关键字直接进入 2.设置主题样式.字体大小 File | settings |Appearance&Behavior|Appearance 如上图中