MyBatis(十九):动态SQL

打印 上一主题 下一主题

主题 927|帖子 927|积分 2781

一、什么是动态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的使用
1.环境搭建
(1)数据库建立一个blog表
  1. CREATE TABLE blog (
  2.   `id` VARCHAR(50) NOT NULL COMMENT '博客id',
  3.   `title` VARCHAR(100) NOT NULL COMMENT '博客标题',
  4.   `author` VARCHAR(30) NOT NULL COMMENT '博客作者',
  5.   `create_time` DATETIME NOT NULL COMMENT '创建时间',
  6.   `views` INT(30) NOT NULL COMMENT '浏览量'
  7. ) ENGINE=INNODB DEFAULT CHARSET=utf8
复制代码
(2)新建一个子maven模块
(3)建立核心配置文件和资源文件
mybatis-config.xml
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3.         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4.         "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6.     <properties resource="db.properties" />
  7.     <settings>
  8.         <setting name="logImpl" value="STDOUT_LOGGING"/>
  9.         <setting name="mapUnderscoreToCamelCase" value="true"/>
  10.     </settings>
  11.     <environments default="development">
  12.         <environment id="development">
  13.             <transactionManager type="JDBC"/>
  14.             <dataSource type="POOLED">
  15.     <typeAliases>
  16.        <typeAlias type="com.jms.pojo.Blog" alias="Blog"/>
  17.     </typeAliases> <property name="driver" value="${driver}"/>
  18.     <typeAliases>
  19.        <typeAlias type="com.jms.pojo.Blog" alias="Blog"/>
  20.     </typeAliases> <property name="url" value="${url}"/>
  21.     <typeAliases>
  22.        <typeAlias type="com.jms.pojo.Blog" alias="Blog"/>
  23.     </typeAliases> <property name="username" value="${username}"/>
  24.     <typeAliases>
  25.        <typeAlias type="com.jms.pojo.Blog" alias="Blog"/>
  26.     </typeAliases> <property name="password" value="${password}"/>
  27.             </dataSource>
  28.         </environment>
  29.     </environments>
  30. </configuration>
复制代码
db.properties
  1. driver=com.mysql.jdbc.Driver
  2. url=jdbc:mysql://localhost:3306/MyBaties?useSSL=true&useUnicode=true&characterEncoding=UTF-8
  3. username=root
  4. password=123456
复制代码
(3)建立MyBayisUtil工具类
这个类用用来获取SqlSessio的。
  1. package com.jms.utils;
  2. import org.apache.ibatis.io.Resources;
  3. import org.apache.ibatis.session.SqlSession;
  4. import org.apache.ibatis.session.SqlSessionFactory;
  5. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. //SqlSessionFactory-->SqlSession
  9. public class MyBatisUtil {
  10.     private static SqlSessionFactory sqlSessionFactory;
  11.     //获取SqlSessionFactory对象
  12.     static {
  13.         try {
  14.             String resource = "mybatis-config.xml";
  15.             InputStream inputStream = Resources.getResourceAsStream(resource);
  16.             sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  17.         } catch (IOException e) {
  18.             e.printStackTrace();
  19.         }
  20.     }
  21.     //通过SqlSessionFactory获取SqlSession对象,其中包含了面向数据库执行执行SQL命令所需要的方法
  22.     public static SqlSession getSqlSession() {
  23.         return sqlSessionFactory.openSession(true);
  24.     }
  25. }
复制代码
(4)建立实体类Blog
  1. package com.jms.pojo;
  2. import java.util.Date;
  3. public class Blog {
  4.     private String id;
  5.     private String title;
  6.     private String author;
  7.     private Date createTime;
  8.     private int views;
  9.     public Blog() {
  10.     }
  11.     public Blog(String id, String title, String author, Date createTime, int views) {
  12.         this.id = id;
  13.         this.title = title;
  14.         this.author = author;
  15.         this.createTime = createTime;
  16.         this.views = views;
  17.     }
  18.     public String getId() {
  19.         return id;
  20.     }
  21.     public void setId(String id) {
  22.         this.id = id;
  23.     }
  24.     public String getTitle() {
  25.         return title;
  26.     }
  27.     public void setTitle(String title) {
  28.         this.title = title;
  29.     }
  30.     public String getAuthor() {
  31.         return author;
  32.     }
  33.     public void setAuthor(String author) {
  34.         this.author = author;
  35.     }
  36.     public Date getCreateTime() {
  37.         return createTime;
  38.     }
  39.     public void setCreateTime(Date createTime) {
  40.         this.createTime = createTime;
  41.     }
  42.     public int getViews() {
  43.         return views;
  44.     }
  45.     public void setViews(int views) {
  46.         this.views = views;
  47.     }
  48.     @Override
  49.     public String toString() {
  50.         return "Blog{" +
  51.     <typeAliases>
  52.        <typeAlias type="com.jms.pojo.Blog" alias="Blog"/>
  53.     </typeAliases> "id='" + id + '\'' +
  54.     <typeAliases>
  55.        <typeAlias type="com.jms.pojo.Blog" alias="Blog"/>
  56.     </typeAliases> ", title='" + title + '\'' +
  57.     <typeAliases>
  58.        <typeAlias type="com.jms.pojo.Blog" alias="Blog"/>
  59.     </typeAliases> ", author='" + author + '\'' +
  60.     <typeAliases>
  61.        <typeAlias type="com.jms.pojo.Blog" alias="Blog"/>
  62.     </typeAliases> ", createTime=" + createTime +
  63.     <typeAliases>
  64.        <typeAlias type="com.jms.pojo.Blog" alias="Blog"/>
  65.     </typeAliases> ", views=" + views +
  66.     <typeAliases>
  67.        <typeAlias type="com.jms.pojo.Blog" alias="Blog"/>
  68.     </typeAliases> '}';
  69.     }
  70. }
复制代码
并且在mybatis-config.xml核心配置文件中设置别名:
  1.     <typeAliases>
  2.        <typeAlias type="com.jms.pojo.Blog" alias="Blog"/>
  3.     </typeAliases>
复制代码
(5)建立BlogMapper接口和BlogMapper.xml配置文件
并在其中添加一个插入方法用于测试环境搭建是否成功。
BlogMapper接口
  1. package com.jms.dao;
  2. import com.jms.pojo.Blog;
  3. public interface BlogMapper {
  4.     void insertBlog(Blog blog);
  5. }
复制代码
BlogMapper.xml
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3.         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4.         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.jms.dao.BlogMapper">
  6.     <insert id="insertBlog" parameterType="Blog">
  7.         insert into mybaties.blog
  8.         values (#{id},#{title},#{author},#{createTime},#{views})
  9.     </insert>
  10. </mapper>
复制代码
在核心配置文件mybatis-config.xml中进行mapper映射:
  1.     <typeAliases>
  2.        <typeAlias type="com.jms.pojo.Blog" alias="Blog"/>
  3.     </typeAliases>
复制代码
(6)建立测试类进行测试
  1. 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",    <typeAliases>
  2.        <typeAlias type="com.jms.pojo.Blog" alias="Blog"/>
  3.     </typeAliases> new Date(), 5000);        blogMapper.insertBlog(blog);        blog = new Blog(BuildIdUtil.buildID(), "learn mybatis day 2", "jms",    <typeAliases>
  4.        <typeAlias type="com.jms.pojo.Blog" alias="Blog"/>
  5.     </typeAliases> new Date(), 9999);        blogMapper.insertBlog(blog);        blog = new Blog(BuildIdUtil.buildID(), "learn mybatis day 3", "jms",    <typeAliases>
  6.        <typeAlias type="com.jms.pojo.Blog" alias="Blog"/>
  7.     </typeAliases> new Date(), 1234);        blogMapper.insertBlog(blog);        blog = new Blog(BuildIdUtil.buildID(), "learn mybatis day 4", "jms",    <typeAliases>
  8.        <typeAlias type="com.jms.pojo.Blog" alias="Blog"/>
  9.     </typeAliases> new Date(), 6753);        blogMapper.insertBlog(blog);        blog = new Blog(BuildIdUtil.buildID(), "learn mybatis day 5", "jms",    <typeAliases>
  10.        <typeAlias type="com.jms.pojo.Blog" alias="Blog"/>
  11.     </typeAliases> new Date(), 454);        blogMapper.insertBlog(blog);    }}
复制代码
测试结果如下:

 
 
 
 至此环境搭建完毕。
2.标签的使用我们在后续继续学习。
 
(本文仅作个人学习记录用,如有纰漏敬请指正)
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

络腮胡菲菲

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表