MyBatis的 SQL 语句构建、分页、日志
半塘 2024/1/12 MyBatis框架
# 1、SQL 语句构建
在 Java 代码中动态生成 SQL 代码,是很头疼的一件事。比如如下:
String sql = "SELECT P.ID, P.USERNAME, P.PASSWORD, P.FULL_NAME, "
"P.LAST_NAME,P.CREATED_ON, P.UPDATED_ON " +
"FROM PERSON P, ACCOUNT A " +
"INNER JOIN DEPARTMENT D on D.ID = P.DEPARTMENT_ID " +
"INNER JOIN COMPANY C on D.COMPANY_ID = C.ID " +
"WHERE (P.ID = A.ID AND P.FIRST_NAME like ?) " +
"OR (P.LAST_NAME like ?) " +
"GROUP BY P.ID " +
"HAVING (P.LAST_NAME like ?) " +
"OR (P.FIRST_NAME like ?) " +
"ORDER BY P.ID, P.FULL_NAME";
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
对于可读性和维护性上来说都是很差的。
MyBatis 提供了条件构造器,可以简化 SQL 代码的动态编写。
@Test
public void testSQL(){
String sqlStr = new SQL().SELECT("username,sex").FROM("user").WHERE("id=#{id}").toString();
log.info("sqlStr ==> "+sqlStr);
}
// 输出结果:SELECT username,sex FROM user WHERE (id=#{id})
1
2
3
4
5
6
7
2
3
4
5
6
7
所有方法可参考:SQL 语句构建器 (opens new window),当然在开发中我们会更常用MyBatisPlus中的CRUD 接口和条件构造器。
# 2、分页插件
- 新增分页依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.2.0</version>
</dependency>
1
2
3
4
5
2
3
4
5
- mybatis-config.xml中配置分页插件
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!--分页参数合理化,不可能达到一个不正确的页码,如-1,超过总页数,查询最后一页-->
<property name="reasonable" value="true"/>
</plugin>
</plugins>
1
2
3
4
5
6
2
3
4
5
6
- 测试使用
//调用查询方法
@Test
public void testGetUserList(){
//第一个参数传入:第几页,第二个参数传入:每页多少条数据
PageHelper.startPage(1,5);
List<UserPO> userList = userService.queryUserList();;
//创建PageInfo对象,传进去结果,和每页多少条数据
PageInfo info = new PageInfo(userList,5);
// 通过调用info对象里面的方法 就能得到所有的分页信息,分页总页数,总记录数
// info.getList();方法就是得到查询到的分页数据,返回一个list集合
System.out.printf("用户信息: "+info.getList());
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 3、日志
使用log4j日志,方便我们查看sql语句。
- 新增日志依赖
<!-- 添加slf4j日志api,该日志之前已经增加-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.20</version>
</dependency>
<!-- log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- slf4j-log4j12 日志适配器 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- resources下增加log4j.properties配置
log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p %d %C: %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
随便执行一个查询,看看日志。