码迷,mamicode.com
首页 > 其他好文 > 详细

mybatis快速入门(四)

时间:2017-09-26 00:06:54      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:代码实现   变化   day   用户   ram   直接   对象   upd   out   

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快速入门(四)

标签:代码实现   变化   day   用户   ram   直接   对象   upd   out   

原文地址:http://www.cnblogs.com/duchaochen/p/7594391.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!