栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

狂神说Mybatis07:动态SQL

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

狂神说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实现通用即可!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/681617.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号