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();
        }
  • 相关阅读:
    Hystrix解析(三)
    Hystrix解析(二)
    在阿里云开发平台编写第一个 HelloWorld 程序
    Jenkins与Docker的自动化CI/CD实战
    网页计数器例子
    ServletContext 对象
    Session
    Cookie
    Request 对象作用域
    转发,重定向(包括请求中文乱码解决)
  • 原文地址:https://www.cnblogs.com/wmskywm/p/13599922.html
Copyright © 2011-2022 走看看