本文主要内容:
- 自动生成代码(新)
- 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语句常用方法进行总结,因为开发中经常使用,即使简单也值得记录。