本文主要內容:
- 自動生成代碼(新)
- Wrapper的使用
本文在SpringBoot項目中MybatisPlus的使用一文基礎上修改,升級爲springboot的2.1.0.RELEASE版本。
一、自動生成代碼
1、mysql數據庫
在SpringBoot項目中MybatisPlus的使用中已經有了詳細的說明,但是在springboot的2.1.0.RELEASE版本下會報錯,需要修改以下內容:
- pom文件中mysql依賴:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
- 修改CodeGenerator中數據源配置(主要是驅動名稱變化):
// 數據源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/frog?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=GMT");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("123456");
2、orcale數據庫
orcale的驅動一直下載不下載,於是從其他渠道複製了一個jar包,需要安裝到本地maven倉庫。
- 複製jar包到本機,爲了方便我直接放在maven\bin目錄下:
- 在bin目錄下打開cmd,執行安裝命令:
mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc7 -Dversion=12.1.0.1 -Dpackaging=jar -Dfile=ojdbc7-12.1.0.1.jar
- 打開maven本地倉庫查看已經完成:
- 在pom文件中引入:
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc7</artifactId>
<version>12.1.0.1</version>
</dependency>
- 修改CodeGenerator中數據源配置:
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:oracle:thin:@localhost:1521/frog");
dsc.setDriverName("oracle.jdbc.OracleDriver");
dsc.setUsername("frog");
dsc.setPassword("frog123456");
二、Wrapper的使用(v3.0.1以上)
熟練的使用Wrapper能夠減少xml中簡單sql語句的重複編寫,很大程度上節約了開發時間。例如:
1、全表掃描(參數爲null):
@Autowired
private FrogMapper frogMapper;
public void test() {
Integer count = frogMapper.selectCount(null);
}
SELECT COUNT(1) FROM frog
2、WHERE條件:
QueryWrapper<Frog> wrapper = new QueryWrapper<>();
wrapper.eq("id", 1);
wrapper.ge("size", 5.1);
Integer count = frogMapper.selectCount(wrapper);
Preparing: SELECT COUNT(1) FROM frog WHERE id = ? AND size >= ?
Parameters: 1(Integer), 5.1(Double)
下面羅列了常用的where條件(源碼中都有註釋,可以下載查看):
方法 | 含義 | sql |
---|---|---|
eq | 等於 | = |
ne | 不等於 | <> |
gt | 大於 | > |
lt | 小於 | < |
ge | 大於等於 | >= |
le | 小於等於 | <= |
between | BETWEEN 值1 AND 值2 | BETWEEN … AND … |
like | LIKE ‘%值%’ | LIKE |
likeLeft | LIKE ‘%值’ | LIKE ‘%…’ |
isNull | 字段 IS NULL | IS NULL |
in | 字段 IN (value.get(0), value.get(1), …) | IN (a,b,…) |
orderBy | 排序:ORDER BY 字段, … | order by |
groupBy | 分組:GROUP BY 字段, … | group by |
having | HAVING ( sql語句 ) | having |
3、AND 和 OR
按以上方式組成where條件語句默認都是and邏輯關係,如果是以下條件關係就需要稍作改動。
- SQL 1:
Preparing: SELECT COUNT(1) FROM frog WHERE id = ? OR size >= ? AND name LIKE ?
Parameters: 1(Integer), 5.1(Double), a%(String)
QueryWrapper<Frog> wrapper = new QueryWrapper<>();
wrapper.eq("id", 1);
wrapper.or();
wrapper.ge("size", 5.1);
wrapper.likeRight("name", "a");
Integer count = frogMapper.selectCount(wrapper);
- SQL 2:
Preparing: SELECT COUNT(1) FROM frog WHERE id = ? OR ( size >= ? AND name LIKE ? ) AND name LIKE ?
Parameters: 1(Integer), 5.1(Double), b%(String), a%(String)
QueryWrapper<Frog> wrapper = new QueryWrapper<>();
wrapper.eq("id", 1);
wrapper.or(t -> t.ge("size", 5.1).likeRight("name","b"));
wrapper.likeRight("name", "a");
Integer count = frogMapper.selectCount(wrapper);
4、使用apply構造複雜SQL
複雜sql可以使用apply方法拼接,但是不推薦這麼寫,最好還是寫在xml更容易閱讀,另外還是sql注入的風險。
QueryWrapper<Frog> wrapper = new QueryWrapper<>();
wrapper.in("color", "red","blue","yellow");
wrapper.apply("size = (select max(size) from frog group by color)");
Integer count = frogMapper.selectCount(wrapper);
Preparing: SELECT COUNT(1) FROM frog WHERE color IN (?,?,?) AND size = (select max(size) from frog group by color)
Parameters: red(String), blue(String), yellow(String)
5、lambda表達式寫法
QueryWrapper<Frog> wrapper = new QueryWrapper<>();
wrapper.lambda().eq(Frog::getColor, "green")
.ge(Frog::getSize, 5.2);
Integer count = frogMapper.selectCount(wrapper);
SELECT COUNT(1) FROM frog WHERE color = ? AND size >= ?
Parameters: green(String), 5.2(Double)
三、總結
本篇主要對mybatisplus代碼生成功能中mysql和orcale數據源配置的完善,以及使用wrapper構建簡單sql語句常用方法進行總結,因爲開發中經常使用,即使簡單也值得記錄。