一、什麼是動態SQL 官方文檔給出了這樣的說明: 動態 SQL 是 MyBatis 的強大特性之一。如果你使用過 JDBC 或其它類似的框架,你應該能理解根據不同條件拼接 SQL 語句有多痛苦,例如拼接時要確保不能忘記添加必要的空格,還要註意去掉列表最後一個列名的逗號。利用動態 SQL,可以徹底擺脫 ...
一、什麼是動態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表
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); } }
測試結果如下:
至此環境搭建完畢。
2.標簽的使用我們在後續繼續學習。
(本文僅作個人學習記錄用,如有紕漏敬請指正)