狂神说Mybatis07:动态SQL

狂神说Mybatis07:动态SQL,第1张

狂神说Mybatis07:动态SQL 动态SQL

什么是动态SQL:动态SQL就是指根据不同的条件生成不同的SQL语句

利用动态SQL这一特性可以彻底摆脱这种痛苦

动态SQL元素和JSTL或基于类似XML的文本处理器相似。在MyBatis之前的版本中,有很多元素需要花时间了解。MyBatis 3大大精简了元素种类,现在只需学习原来一半的元素便可。MyBatis采用功能强大的基于OGNL的表达式来淘汰其它大部分元素。

  • if
  • choose (when, otherwise)
  • trim (where, set)
  • foreach
搭建环境
CREATE TABLE `blog`(

`id` VARCHAR(50) NOT NULL COMMENT '博客id',
`title` VARCHAR(100) NOT NULL COMMENT '博客标题',
`author` VARCHAR(100) NOT NULL COMMENT '博客作者',
`create_time` DATETIME NOT NULL COMMENT '创建时间',
`views` INT(30) NOT NULL COMMENT '浏览量'
)ENGINE=INNODB DEFAULT CHARSET=utf8

1、创建一个基础maven子工程mybatis-08

2、导入Lombok包

3、编写配置文件(拷贝前面的配置文件和工具类)

4、编写实体类

@Data
public class Blog {

    private String id;
    private String title;
    private String author;
    private Date createTime;//属性名和字段名不一致
    private int views;
}

5、工具类设置添加ID为随机

@SuppressWarnings("all")//抑制警告
public class IDutils {

    public static String getId() {
        return UUID.randomUUID().toString().replaceAll("-","");
    }

  @Test
    public void test(){
         System.out.println(IDutils.getId());
         System.out.println(IDutils.getId());
         System.out.println(IDutils.getId());
     }

6、开启驼峰命名自动映射

 

        
 

7、测试添加数据



    insert  into mybatis.blog(id,title,author,create_time,views)
    values (#{id},#{title},#{author},#{createTime},#{views});

  @Test
    public void test() {
//        System.out.println(IDutils.getId());
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);

        Blog blog = new Blog();
        blog.setId(IDutils.getId());
        blog.setTitle("Mybatis");
        blog.setAuthor("神");
        blog.setCreateTime(new Date());
        blog.setViews(9999);

        mapper.addBlog(blog);

        blog.setId(IDutils.getId());
        blog.setTitle("Java");
        mapper.addBlog(blog);

        blog.setId(IDutils.getId());
        blog.setTitle("Spring");
        mapper.addBlog(blog);

        blog.setId(IDutils.getId());
        blog.setTitle("微服务");
        mapper.addBlog(blog);

        sqlSession.close();
    }

8、编写实体类对应Mapper接口和Mapper.XML文件

1、IF
public interface BlogMapper {

    //插入数据
    int addBlog(Blog blog);

    //查询博客
    List queryBlogIF(Map map);
}
  
        select * from blog
        
           
               
                   title =#{title}
               
               
                   and author =#{author}
               
               
                   and views=#{views}
               
           
        
    
3、trim (where,set)
 select * from blog 
        
            
                and title =#{title}
            
            
                and author =#{author}
            
        
 
        update blog
        
            
                 title =#{title},
            
            
                 author =#{author}
            
        
        where id=#{id}
    

所谓的动态SQL,本质还是SQL语句,只是我们可以在SQL层面,去执行一个逻辑代码

SQL片段

有的时候,我们可能会将一些公共的部分抽取出来,方便复用!

1、使用SQL标签抽取公共的部分

 
        
          title =#{title}
        
        
            author =#{author}
        
 

2、在需要使用的地方使用Include标签引用即可

 

动态SQL就是在拼接SQL语句,我们只要保证SQL的正确性,按照SQL的格式,去排列组合就可以了

建议:

现在Mysql中写出完整的SQL,再对应的去修改成为我们的动态SQL实现通用即可!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5682194.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存