动态SQL、缓存)
一、动态SQL概述:动态SQL指的是根据不同的查询条件 , 生成不同的Sql语句.官网描述: MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦。例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。 虽然在以前使用动态 SQL 并非一件易事,但正是 MyBatis 提供了可以被用在任意 SQL 映射语句中的强大的动态 SQL 语言得以改进这种情形。 动态 SQL 元素和 JSTL 或基于类似 XML 的文本处理器相似。在 MyBatis 之前的版本中,有很多元素需要花时间了解。MyBatis 3 大大精简了元素种类,现在只需学习原来一半的元素便可。MyBatis 采用功能强大的基于 OGNL 的表达式来淘汰其它大部分元素。 ------------------------------- - if - choose (when, otherwise) - trim (where, set) - foreach -------------------------------我们之前写的 SQL 语句都比较简单,如果有比较复杂的业务,我们需要写复杂的 SQL 语句,往往需要拼接,而拼接 SQL ,稍微不注意,由于引号,空格等缺失可能都会导致错误。那么怎么去解决这个问题呢?这就要使用 mybatis 动态SQL,通过 if, choose, when, otherwise, trim, where, set, foreach等标签,可组合成非常灵活的SQL语句,从而在提高 SQL 语句的准确性的同时,也大大提高了开发人员的效率。搭建环境新建一个数据库表:blog字段:id,title,author,create_time,viewsCREATETABLE`blog`(`id`varchar(50)NOTNULLCOMMENT'博客id',`title`varchar(100)NOTNULLCOMMENT'博客标题',`author`varchar(30)NOTNULLCOMMENT'博客作者',`create_time`datetimeNOTNULLCOMMENT'创建时间',`views`int(30)NOTNULLCOMMENT'浏览量')ENGINE=InnoDBDEFAULTCHARSET=utf81、创建Mybatis基础工程2、IDutil工具类publicclassIDUtil{publicstaticStringgenId(){returnUUID.randomUUID().toString().replaceAll("-","");}}3、实体类编写 【注意set方法作用】importjava.util.Date;publicclassBlog{privateStringid;privateStringtitle;privateStringauthor;privateDatecreateTime;privateintviews;//set,get....}4、编写Mapper接口及xml文件publicinterfaceBlogMapper{}?xml version="1.0"encoding="UTF-8"?!DOCTYPEmapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"mapper namespace="com.sj.mapper.BlogMapper"/mapper5、mybatis核心配置文件,下划线驼峰自动转换settingssettingname="mapUnderscoreToCamelCase"value="true"/settingname="logImpl"value="STDOUT_LOGGING"//settings!--注册Mapper.xml--mappersmapperresource="mapper/BlogMapper.xml"//mappers6、插入初始数据编写接口//新增一个博客intaddBlog(Blogblog);sql配置文件insertid="addBlog"parameterType="blog"insert into blog (id, title, author, create_time, views) values (#{id},#{title},#{author},#{createTime},#{views});/insert初始化博客方法@TestpublicvoidaddInitBlog(){SqlSessionsession=MybatisUtils.getSession();BlogMappermapper=session.getMapper(BlogMapper.class);Blogblog=newBlog();blog.setId(IDUtil.genId());blog.setTitle("Mybatis如此简单");blog.setAuthor("sj");blog.setCreateTime(newDate());blog.setViews(9999);mapper.addBlog(blog);blog.setId(IDUtil.genId());blog.setTitle("Java如此简单");mapper.addBlog(blog);blog.setId(IDUtil.genId());blog.setTitle("Spring如此简单");mapper.addBlog(blog);blog.setId(IDUtil.genId());blog.setTitle("微服务如此简单");mapper.addBlog(blog);session.close();}初始化数据完毕!if 语句需求:根据作者名字和博客名字来查询博客!如果作者名字为空,那么只根据博客名字查询,反之,则根据作者名来查询1、编写接口类//需求1ListBlog