zoukankan      html  css  js  c++  java
  • mybatis之动态sql

    现mybatis数据库中存在user表:

    现实现需求:查询某个用户根据用户名(username)、或性别(sex)、密码(pswd)

    用普通sql语句:

    selece * from user where 要查询的字段 = 查询的依据

    使用mybatis动态查询,传递什么字段与值就查询什么字段下的数据:

    javabean:User

    @Data
    public class User {
        private String username;
        private String pswd;
        private String sex;
    }

    UserMapper接口:

    List<User> getUserByParams(Map<String,Object> map);

    UserMapper.xml文件:

    <select id="getUserByParams" resultType="user">
        select * from user
        <where>
            <if test="null != username">
                username = #{username}
            </if>
            <if test="null != pswd">
                and pswd = #{pswd}
            </if>
            <if test="null != sex">
                and sex = #{sex}
            </if>
        </where>
    </select>

    第二种方式:

    <select id="getUserByParams" resultType="User">
            select * from user
            <where>
                <choose>
                    <when test="null != username">
                        username = #{username}
                    </when>
                    <when test="null != pswd">
                        pswd = #{pswd}
                    </when>
                    <otherwise>
                        sex = #{sex}
                    </otherwise>
                </choose>
            </where>
        </select>

    区别是:第一种相当于if语句,第二种相当于switch语句

    测试的java代码:

     public void test(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("username","小李子");
        map.put("sex","女");
        List<User> users = userMapper.getUserByParams(map);
        for (User user : users) {
            System.out.println(user);
        }
        sqlSession.close();
    }

    修改的操作:

     UserMapper接口

    int update(Map<String,Object> map);

    UserMapper.xml文件:

    <update id="update">
            update user
            <set>
                <if test="null != sex">
                    username = #{sex}
                </if>
                <if test="null != pswd">
                    pswd = #{pswd}
                </if>
            </set>
            <where>
                username = #{username}
            </where>
        </update>

    测试的java代码:

    public void test(){
            SqlSession sqlSession = MybatisUtils.getSqlSession();
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            Map<String,Object> map = new HashMap<String,Object>();
            map.put("username","张三");
            map.put("sex","男");
            int row = userMapper.update(map);
            sqlSession.commit();
            sqlSession.close();
        }

    动态sql之foreach:

    UserMapper接口:

    List<User> getUserByUsernames(Map<String,Object> map);

    UserMapper.xml:

    <select id="getUserByUsernames" resultType="user">
            select * from user
            <where>
                <foreach collection="usernames" item="username" open=" " close=" " separator="or">
                    username = #{username}
                </foreach>
            </where>
        </select>

    测试的java代码:

    public void test(){
            SqlSession sqlSession = MybatisUtils.getSqlSession();
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            Map<String,Object> map = new HashMap<String,Object>();
            ArrayList<String> usernames = new ArrayList<String>();
            usernames.add("小李子");
            usernames.add("晓晓");
            map.put("usernames",usernames);
            List<User> users = userMapper.getUserByUsernames(map);
            for (User user : users) {
                System.out.println(user);
            }
            sqlSession.close();
        }
  • 相关阅读:
    树莓派linux驱动学习之hello world
    android通过服务实现消息推送
    [转载] iOS开发分辨率那点事
    《裸辞的程序猿漂流记十四》——升级站点
    typedef 总结
    苹果 App Store 申请和管理相关知识
    判断系统是12小时制还是24小时制
    解决 UIView 设置背景为UIImage图片变型问题[XXX setBackgroundColor:[UIColor colorWithPatternImage:XXX]];
    免费iOS第三方推送工具Urban Airship使用教程
    sizeWithFont:方法使用明细
  • 原文地址:https://www.cnblogs.com/wmskywm/p/13599922.html
Copyright © 2011-2022 走看看