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();
        }
  • 相关阅读:
    POJ 3140 Contestants Division (树dp)
    POJ 3107 Godfather (树重心)
    POJ 1655 Balancing Act (树的重心)
    HDU 3534 Tree (经典树形dp)
    HDU 1561 The more, The Better (树形dp)
    HDU 1011 Starship Troopers (树dp)
    Light oj 1085
    Light oj 1013
    Light oj 1134
    FZU 2224 An exciting GCD problem(GCD种类预处理+树状数组维护)同hdu5869
  • 原文地址:https://www.cnblogs.com/wmskywm/p/13599922.html
Copyright © 2011-2022 走看看