• 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();
        }
  • 相关阅读:
    es6.8集群部署(ssl认证)+nfs备份(生产)
    spool
    dataguard unname
    zabbix监控mysql主从同步可用性
    企业微信发送消息
    安装ruby
    binlog2sql
    xtrabackup备份异地恢复+binlog日志应用
    5.7.29重新部署主从
    centos7 图形界面启动
  • 原文地址:https://www.cnblogs.com/wmskywm/p/13599922.html
Copyright © 2020-2023  润新知