# 動態SQL環境搭建 ###### tags: `Mybatis-動態SQL` ## 什麼是動態SQL 動態SQL就是指根據不同的條件生成不同的SQL語句 動態 SQL 是 MyBatis 的強大特性之一。如果你使用過 JDBC 或其它類似的框架,你應該能理解根據不同條件拼接 SQL 語句有多痛苦,例如拼接時要確保不能忘記添加必要的空格,還要注意去掉列表最後一個列名的逗號。利用動態 SQL,可以徹底擺脫這種痛苦。 ```xml= if choose (when, otherwise) trim (where, set) foreach ``` ## 搭建環境 ```sql= 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 ``` 創建一個基礎工程 1.導包 2.編寫配置文件 3.編寫實體類 ```java= @Data public class Blog { private int id; private String title; private String author; private Date createTime; private int views; } ``` 4.編寫實體類對應的Mapper接口和Mapper.xml文件 ```java= public interface BlogMapper { //插入數據 int addBlog(Blog blog); } ``` mapUnderscoreToCamelCase: 是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。 ```xml= <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.kuang.dao.BlogMapper"> <insert id="addBlog" parameterType="blog"> insert into mybatis.blog(id,title,author,create_time,views) values (#{id},#{title},#{author},#{createTime},#{views}); </insert> </mapper> ``` 工具類 ```java= @SuppressWarnings("all") //抑制警告 public class IDUtils { public static String getId(){ return UUID.randomUUID().toString().replaceAll("-",""); } @Test public void test(){ System.out.println(IDUtils.getId()); } } ``` 5.測試類 ```java= public class MyTest { @Test public void addBlog(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); BlogMapper blogMapper = sqlSession.getMapper(BlogMapper.class); Blog blog = new Blog(); blog.setId(IDUtils.getId()); blog.setAuthor("houdongun"); blog.setCreateTime(new Date()); blog.setViews(999); blog.setTitle("first"); blogMapper.addBlog(blog); blog.setId(IDUtils.getId()); blog.setTitle("second"); blogMapper.addBlog(blog); blog.setId(IDUtils.getId()); blog.setTitle("third"); blogMapper.addBlog(blog); blog.setId(IDUtils.getId()); blog.setTitle("forth"); blogMapper.addBlog(blog); sqlSession.close(); } } ``` 結果: ![](https://i.imgur.com/rcU7ijj.png) >