# 動態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();
}
}
```
結果:

>