MyBatis(十九):动态SQL()

  本篇文章为你整理了MyBatis(十九):动态SQL()的详细内容,包含有 MyBatis(十九):动态SQL,希望能帮助你了解 MyBatis(十九):动态SQL。

  官方文档给出了这样的说明:

  动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦。

  使用动态 SQL 并非一件易事,但借助可用于任何 SQL 映射语句中的强大的动态 SQL 语言,MyBatis 显著地提升了这一特性的易用性。

  如果你之前用过 JSTL 或任何基于类 XML 语言的文本处理器,你对动态 SQL 元素可能会感觉似曾相识。在 MyBatis 之前的版本中,需要花时间了解大量的元素。借助功能强大的基于 OGNL 的表达式,MyBatis 3 替换了之前的大部分元素,大大精简了元素种类,现在要学习的元素种类比原来的一半还要少。

  if

  choose (when, otherwise)

  trim (where, set)

  foreach

  总而言之,动态SQL就是根据不同的条件生成不同的SQL。

  二、动态SQL的使用

  1.环境搭建

  (1)数据库建立一个blog表

  

CREATE TABLE blog (

 

   `id` VARCHAR(50) NOT NULL COMMENT 博客id,

   `title` VARCHAR(100) NOT NULL COMMENT 博客标题,

   `author` VARCHAR(30) NOT NULL COMMENT 博客作者,

   `create_time` DATETIME NOT NULL COMMENT 创建时间,

   `views` INT(30) NOT NULL COMMENT 浏览量

  ) ENGINE=INNODB DEFAULT CHARSET=utf8

 

  (2)新建一个子maven模块

  (3)建立核心配置文件和资源文件

  mybatis-config.xml

  

 ?xml version="1.0" encoding="UTF-8" ? 

 

   !DOCTYPE configuration

   PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

   "http://mybatis.org/dtd/mybatis-3-config.dtd"

   configuration

   properties resource="db.properties" /

   settings

   setting name="logImpl" value="STDOUT_LOGGING"/

   setting name="mapUnderscoreToCamelCase" value="true"/

   /settings

   environments default="development"

   environment id="development"

   transactionManager type="JDBC"/

   dataSource type="POOLED"

   property name="driver" value="${driver}"/

   property name="url" value="${url}"/

   property name="username" value="${username}"/

   property name="password" value="${password}"/

   /dataSource

   /environment

   /environments

   /configuration

 

  db.properties

  

driver=com.mysql.jdbc.Driver

 

  url=jdbc:mysql://localhost:3306/MyBaties?useSSL=true useUnicode=true characterEncoding=UTF-8

  username=root

  password=123456

 

  (3)建立MyBayisUtil工具类

  这个类用用来获取SqlSessio的。

  

package com.jms.utils;

 

  import org.apache.ibatis.io.Resources;

  import org.apache.ibatis.session.SqlSession;

  import org.apache.ibatis.session.SqlSessionFactory;

  import org.apache.ibatis.session.SqlSessionFactoryBuilder;

  import java.io.IOException;

  import java.io.InputStream;

  //SqlSessionFactory-- SqlSession

  public class MyBatisUtil {

   private static SqlSessionFactory sqlSessionFactory;

   //获取SqlSessionFactory对象

   static {

   try {

   String resource = "mybatis-config.xml";

   InputStream inputStream = Resources.getResourceAsStream(resource);

   sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

   } catch (IOException e) {

   e.printStackTrace();

   //通过SqlSessionFactory获取SqlSession对象,其中包含了面向数据库执行执行SQL命令所需要的方法

   public static SqlSession getSqlSession() {

   return sqlSessionFactory.openSession(true);

  }

 

  (4)建立实体类Blog

  

package com.jms.pojo;

 

  import java.util.Date;

  public class Blog {

   private String id;

   private String title;

   private String author;

   private Date createTime;

   private int views;

   public Blog() {

   public Blog(String id, String title, String author, Date createTime, int views) {

   this.id = id;

   this.title = title;

   this.author = author;

   this.createTime = createTime;

   this.views = views;

   public String getId() {

   return id;

   public void setId(String id) {

   this.id = id;

   public String getTitle() {

   return title;

   public void setTitle(String title) {

   this.title = title;

   public String getAuthor() {

   return author;

   public void setAuthor(String author) {

   this.author = author;

   public Date getCreateTime() {

   return createTime;

   public void setCreateTime(Date createTime) {

   this.createTime = createTime;

   public int getViews() {

   return views;

   public void setViews(int views) {

   this.views = views;

   @Override

   public String toString() {

   return "Blog{" +

   "id=" + id + \ +

   ", title=" + title + \ +

   ", author=" + author + \ +

   ", createTime=" + createTime +

   ", views=" + views +

   };

  }

 

  并且在mybatis-config.xml核心配置文件中设置别名:

  

 typeAliases 

 

   typeAlias type="com.jms.pojo.Blog" alias="Blog"/

   /typeAliases

 

  (5)建立BlogMapper接口和BlogMapper.xml配置文件

  并在其中添加一个插入方法用于测试环境搭建是否成功。

  BlogMapper接口

  

package com.jms.dao;

 

  import com.jms.pojo.Blog;

  public interface BlogMapper {

   void insertBlog(Blog blog);

  }

 

  BlogMapper.xml

  

 ?xml version="1.0" encoding="UTF-8" ? 

 

   !DOCTYPE mapper

   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

   "http://mybatis.org/dtd/mybatis-3-mapper.dtd"

   mapper namespace="com.jms.dao.BlogMapper"

   insert id="insertBlog" parameterType="Blog"

   insert into mybaties.blog

   values (#{id},#{title},#{author},#{createTime},#{views})

   /insert

   /mapper

 

  在核心配置文件mybatis-config.xml中进行mapper映射:

  

 mappers 

 

   mapper resource="com/jms/dao/BlogMapper.xml"/

   /mappers

 

  (6)建立测试类进行测试

  

import com.jms.dao.BlogMapper;

 

  import com.jms.pojo.Blog;

  import com.jms.utils.BuildIdUtil;

  import com.jms.utils.MyBatisUtil;

  import org.apache.ibatis.session.SqlSession;

  import org.junit.Test;

  import java.util.Date;

  public class MapperTest {

   @Test

   public void insertTest() {

   SqlSession sqlSession = MyBatisUtil.getSqlSession();

   BlogMapper blogMapper = sqlSession.getMapper(BlogMapper.class);

   Blog blog = new Blog(BuildIdUtil.buildID(), "learn mybatis day 1", "jms",

   new Date(), 5000);

   blogMapper.insertBlog(blog);

   blog = new Blog(BuildIdUtil.buildID(), "learn mybatis day 2", "jms",

   new Date(), 9999);

   blogMapper.insertBlog(blog);

   blog = new Blog(BuildIdUtil.buildID(), "learn mybatis day 3", "jms",

   new Date(), 1234);

   blogMapper.insertBlog(blog);

   blog = new Blog(BuildIdUtil.buildID(), "learn mybatis day 4", "jms",

   new Date(), 6753);

   blogMapper.insertBlog(blog);

   blog = new Blog(BuildIdUtil.buildID(), "learn mybatis day 5", "jms",

   new Date(), 454);

   blogMapper.insertBlog(blog);
sqlSession.close();

  }

 

  测试结果如下:

  

  

  

  至此环境搭建完毕。

  2.标签的使用我们在后续继续学习。

  

  (本文仅作个人学习记录用,如有纰漏敬请指正)

  

  以上就是MyBatis(十九):动态SQL()的详细内容,想要了解更多 MyBatis(十九):动态SQL的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: