资讯专栏INFORMATION COLUMN

7.平凡之路-动态SQL语句

时飞 / 2145人阅读

摘要:附转义字符第二种方法因为这个是格式的,所以不允许出现类似这样的字符,但是都可以使用符号进行说明,将此类符号不进行解析你的可以写成这个文件示例代码

动态SQL语句是核心之一,这里我们通过几个示例来演示

一 多条件查询专题 1.通过恒等式完成动态SQL语句

涉及到if标签


    
        
        
        
        
        
    

    
        user_id,user_name,sex,money,birthday
    

    
        ${alias}.user_id,${alias}.user_name,${alias}.sex,${alias}.money,${alias}.birthday
    

映射文件

    
    
    

Java测试代码

    @Test
    public void IF标签01(){
        SqlSession sqlSession = null;
        try {
            sqlSession = MyBatisUtils.getSqlSession();
            Map query = new HashMap<>();
            query.put("name", "悟");
            query.put("sex", "男");

            List userList =
                    sqlSession.selectList(User.class.getName()+".if01", query);
            System.out.println(userList);


        } finally {
            MyBatisUtils.closeSqlSession(sqlSession);
        }
    }

图解说明

2.where标签和if标签组合

如果发现标签內有内容,那么会在内容的最前面加入关键字 where

如果有内容,会检查内容的最前面是否含有 AND空格 或者 OR空格 ,自动将其抹掉

映射文件

    
    

Java测试代码

    @Test
    public void IF标签02(){
        SqlSession sqlSession = null;
        try {
            sqlSession = MyBatisUtils.getSqlSession();
            Map query = new HashMap<>();
            query.put("name", "悟");
            query.put("sex", "男");

            List userList =
                    sqlSession.selectList(User.class.getName()+".if02", query);
            System.out.println(userList);


        } finally {
            MyBatisUtils.closeSqlSession(sqlSession);
        }
    }

图解说明

3.trim标签和if标签

映射文件

     
    

Java测试代码

    @Test
    public void trim标签(){
        SqlSession sqlSession = null;
        try {
            sqlSession = MyBatisUtils.getSqlSession();
            Map query = new HashMap<>();
            query.put("name", "悟");
            query.put("sex", "男");

            List userList =
                    sqlSession.selectList(User.class.getName()+".if03", query);
            System.out.println(userList);


        } finally {
            MyBatisUtils.closeSqlSession(sqlSession);
        }
    }

图解说明

二 更新操作 1.set标签

当你发现有内容的时候,在内容的最前面加入 set

当你发现有内容的时候,检查内容的最后面是否有逗号"," 如果将其抹掉

映射文件

    
        UPDATE
            oa_user
        
            
                user_name=#{user_name},
            
            
                sex=#{sex},
            
            
                money=#{money},
            
            
                birthday=#{birthday},
            
        
        WHERE
            user_id=#{user_id}
    
    

Java测试代码

    @Test
    public void 更新操作_变更数据库(){
        SqlSession sqlSession = null;
        try {
            sqlSession = MyBatisUtils.getSqlSession();
            //数据
            User user = new User();
            user.setUser_id(3);
            user.setUser_name("天蓬元帅");
            //日期的转换
            String date = "1998-09-09";
            DateFormat df = new SimpleDateFormat("yyyy-MM-dd");

            user.setBirthday(df.parse(date));

            int row =sqlSession.update(User.class.getName()+".update01", user);
            System.out.println(row);

            //事务的提交
            sqlSession.commit();

        }catch (Exception ex) {
            ex.printStackTrace();
        }finally {
            MyBatisUtils.closeSqlSession(sqlSession);
        }
    }

图解说明

2.trim标签完成更新

映射文件

    
        UPDATE
            oa_user
        
            
                user_name=#{user_name},
            
            
                sex=#{sex},
            
            
                money=#{money},
            
            
                birthday=#{birthday},
            
       
        WHERE
            user_id=#{user_id}
    

Java测试代码

    @Test
    public void 更新操作_TRIM标签_变更数据库(){
        SqlSession sqlSession = null;
        try {
            sqlSession = MyBatisUtils.getSqlSession();
            //数据
            User user = new User();
            user.setUser_id(3);
            user.setUser_name("天蓬元帅123");
            //日期的转换
            String date = "1998-10-09";
            DateFormat df = new SimpleDateFormat("yyyy-MM-dd");

            user.setBirthday(df.parse(date));

            int row =sqlSession.update(User.class.getName()+".update02", user);
            System.out.println(row);

            //事务的提交
            sqlSession.commit();

        }catch (Exception ex) {
            ex.printStackTrace();
        }finally {
            MyBatisUtils.closeSqlSession(sqlSession);
        }
    }
三 choose 标签简单使用

映射文件

    

Java测试代码

    @Test
    public void choose标签(){
        SqlSession sqlSession = null;
        try {
            sqlSession = MyBatisUtils.getSqlSession();
            Map query = new HashMap<>();
            query.put("sex", "女123213");

            List userList =
                    sqlSession.selectList(User.class.getName()+".choose01", query);
            System.out.println(userList);


        } finally {
            MyBatisUtils.closeSqlSession(sqlSession);
        }
    }
四 小于号问题

映射文件

    
    

Java测试代码

    @Test
    public void 小于号的解决问题(){
        SqlSession sqlSession = null;
        try {
            sqlSession = MyBatisUtils.getSqlSession();

            List userList =
                    sqlSession.selectList(User.class.getName()+".less01", 1.0*800);
            System.out.println(userList);

            userList =
                    sqlSession.selectList(User.class.getName()+".less02",  1.0*600);
            System.out.println(userList);


        } finally {
            MyBatisUtils.closeSqlSession(sqlSession);
        }
    }

图解说明

请参考附录1说明

五 动态添加语句

映射文件

    
        INSERT INTO oa_user
            
                
                    user_name,
                
                
                    sex,
                
                
                    money,
                
                
                    birthday,
                
            
            
                 
                    #{user_name},
                
                
                   #{sex},
                
                
                   #{money},
                
                
                    #{birthday},
                
            
    

Java测试代码

    @Test
    public void 动态的添加语句(){
        SqlSession sqlSession = null;
        try {
            sqlSession = MyBatisUtils.getSqlSession();
            //数据
            User user = new User();
            user.setUser_name("刘备12333333");
            //日期的转换
            String date = "1998-10-09";
            DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
            user.setBirthday(df.parse(date));

            user.setMoney(1111.11);

            int row =sqlSession.insert(User.class.getName()+".add01", user);
            System.out.println(row);

            //事务的提交
            sqlSession.commit();

            System.out.println(user);

        }catch (Exception ex) {
            ex.printStackTrace();
        }finally {
            MyBatisUtils.closeSqlSession(sqlSession);
        }
    }
六 foreach标签 1.数组方式

映射方式

    
    
        DELETE FROM
            oa_user
        WHERE user_id in 
        
        
            #{shxt}
        
    

Java测试代码

    @Test
    public void 传递数组删除规则(){
        SqlSession sqlSession = null;
        try {
            sqlSession = MyBatisUtils.getSqlSession();
            int row = sqlSession.delete(User.class.getName()+".delete01", new int[]{5,6});
            //事务的提交
            sqlSession.commit();
            System.out.println(row);
        }catch (Exception ex) {
            ex.printStackTrace();
        }finally {
            MyBatisUtils.closeSqlSession(sqlSession);
        }
    }
2.List方式

映射文件

     
    
        DELETE FROM
            oa_user
        WHERE user_id in 
        
            #{shxt}
        
    

Java测试代码

    @Test
    public void 传递集合删除规则(){
        SqlSession sqlSession = null;
        try {
            sqlSession = MyBatisUtils.getSqlSession();
            List tempList = new ArrayList<>();
            tempList.add(8);
            tempList.add(9);
            int row = sqlSession.delete(User.class.getName()+".delete02", tempList);
            //事务的提交
            sqlSession.commit();
            System.out.println(row);
        }catch (Exception ex) {
            ex.printStackTrace();
        }finally {
            MyBatisUtils.closeSqlSession(sqlSession);
        }
    }
3.Map方式

映射方式

    
        DELETE FROM
            oa_user
        WHERE user_id in 
        
            #{shxt}
        
    

Java测试代码

    @Test
    public void 传递Map删除规则(){
        SqlSession sqlSession = null;
        try {
            sqlSession = MyBatisUtils.getSqlSession();
            List tempList = new ArrayList<>();
            tempList.add(7);
            tempList.add(10);

            Map map = new HashMap();
            map.put("id_array", tempList);

            int row = sqlSession.delete(User.class.getName()+".delete03", map);
            //事务的提交
            sqlSession.commit();
            System.out.println(row);
        }catch (Exception ex) {
            ex.printStackTrace();
        }finally {
            MyBatisUtils.closeSqlSession(sqlSession);
        }
    }

图解方式

4.批量添加

映射文件

    
        INSERT INTO
        oa_user
        VALUES
        
        (#{user.user_name},#{user.sex},#{user.money})
        
    
附录1 : MyBatis在xml文件中处理大于号小于号的方法 第一种方法:

用了转义字符把>和<替换掉,然后就没有问题了。

SELECT * FROM test WHERE 1 = 1 AND start_date  <= CURRENT_DATE AND end_date >= CURRENT_DATE

附:XML转义字符

第二种方法

因为这个是xml格式的,所以不允许出现类似“>”这样的字符,但是都可以使用符号进行说明,将此类符号不进行解析
你的可以写成这个:
mapper文件示例代码

  

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/70347.html

相关文章

  • 6.平凡之路-单条件模糊查询

    摘要:并且如果使用那么必须要指明值使用简单的数据类型不好使使用接口代理模式的注解也可以 属于MyBatis的核心之一,这里面的坑比较多,大家多多看看吧 一 模糊查询的三种方式介绍 我会使用resultMap处理结果集数据 1.死数据的模糊查询 映射文件 SELECT * FROM...

    tuantuan 评论0 收藏0
  • 3.平凡之路-传统模式添加操作

    摘要:回顾上节课我们完成了的环境搭建核心配置文件映射文件的执行过程如何执行定制的语句我们测试的是死的数据那么下面我们使用容器传递动态的数据添加操作传递数据专题通过传递数据映射文件代码传递参数数据的类型或者提供额内置类型映射中的获取对应的值 回顾: 上节课我们完成了MyBatis的环境搭建核心配置文件映射文件API的执行过程如何执行定制的SQL语句 我们测试的是死的数据,那么下面我们使用容器传...

    cucumber 评论0 收藏0
  • 5.平凡之路-查询结果集简单处理

    摘要:说在前面的话命名空间暂时约定持久化类实体的类名的全路径一简单查询结果集处理查询结果集处理为类型字段作为中的值映射文件命名空间唯一的不能重复结果集处理后变成类型当你传递的是一个简单的数据类型的形参的时候那么你的值 说在前面的话 : 命名空间暂时约定-持久化类(实体Bean)的类名的全路径 com.shxt.model.Skill 一 简单查询结果集处理 1.查询结果集处理为Map类型 ...

    lowett 评论0 收藏0
  • 4.平凡之路-封装帮助类和加载属性文件

    摘要:文件知识点修饰类不能被基础修饰方法不能被重写修改变量常量不允许进行实例化静态代码块只是加载一次加载核心配置文件失败图解说明加载属性文件新建的根目录下修改核心配置文件加载属性文件配置数据库的环境事务管理器保证数据的完整性 MyBatisUtils.java 文件 /** * 知识点: * final 修饰类 : 不能被基础 * 修饰方法 : 不能被重写 * 修改变量 : 常量 ...

    snifes 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<