后端代码生成工具SDP系列三(写一个带条件的select语句)
准备数据库
接着前一篇文章,我们还是使用sdp_workspace表:
CREATE TABLE sdp_workspace (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(200) NOT NULL,
root_path varchar(100) DEFAULT NULL,
db_host varchar(100) DEFAULT NULL,
db_port int(11) DEFAULT NULL,
db_database varchar(200) DEFAULT NULL,
db_username varchar(45) DEFAULT NULL,
db_password varchar(200) DEFAULT NULL,
db_classname varchar(200) DEFAULT NULL,
remark varchar(200) DEFAULT NULL,
PRIMARY KEY (id),
UNIQUE KEY unique_workspace (name)
);
我们希望通过name(精确查询)和db_host(模糊查询)可以查询sdp_workspace表,例如:
select t.* from sdp_workspace t
where 88=88
and name = 'sdp'
and db_host like '%localhost%'
注意,这里要保证每个查询条件都是单独一行,并且以and开始,不要有括号。所以在where后面加了一个88=88的条件,这样就保证了后面的条件都能以and开始一行。这样的查询已经可以满足多数的单表查询场景了。
另外一个需要注意的是,如果select语句使用了通配符,而不是具体的字段列表,那么即便是单表查询,也需要给表起个别名,这样SDP工具才能自动将表的字段扩展开。如果是select * from这样的写法,Mybatis的xml中是不会扩展的,但是不影响java文件,java文件是可以处理所有的字段信息的。
配置select语句
打开sql页面,点击添加,添加的内容如下图所示:
配置好以后,如下图所示:
第一行就是新增的内容,后面两个是SDP工具根据规则自动创建的两个条件(就是必须以and开始一行的规则)。目前只有在新增SQL时才会自动处理参数,再次编辑是不会重新处理的,如果再新增条件,就需要手工添加,或把之前新增的SQL删除,新建一条,这样就可以再次自动处理参数了。
生成带查询条件的Mybatis文件
选中任一一行后,点击执行。执行后会有成功提示,页面如下图所示:
查看生成的结果
可以看到会多出两个java文件:
然后在Mybatis的xml文件中会多出若干个select语句,其中一个select如下。可以看到通配符被扩展为具体的字段,查询条件被自动替换为参数:
<select id="getWorkspaceList" parameterType="cn.mysdp.biz.domain.SdpWorkspaceForGetWorkspaceList" resultType="cn.mysdp.biz.domain.SdpWorkspaceForGetWorkspaceList">
<![CDATA[
select t.id as id
,t.`name` as `name`
,t.root_path as root_path
,t.db_host as db_host
,t.db_port as db_port
,t.db_database as db_database
,t.db_username as db_username
,t.db_password as db_password
,t.remark as remark
from sdp_workspace t
where 88=88
]]>
<if test="name != null">
and name = #{name}
</if>
<if test="dbHostLike != null">
and db_host like #{dbHostLike}
</if>
<![CDATA[
]]>
</select>
这个select对应的请求和返回对象如下:
package cn.mysdp.biz.domain;
import java.io.Serializable;
import lombok.Getter;
import lombok.Setter;
/**
* @ClassName: SdpWorkspaceForGetWorkspaceList
* @Description: SQLDomainObject
* @Author: SDP
* @Date: 2021-11-06
* @Version: 1.0
* Table: sdp_workspace
* Comment:
*
*/
@Getter
@Setter
public class SdpWorkspaceForGetWorkspaceList implements Serializable {
private static final long serialVersionUID = 9000174441695984L;
private Integer id;
private String name;
private String rootPath;
private String dbHost;
private Integer dbPort;
private String dbDatabase;
private String dbUsername;
private String dbPassword;
private String remark;
private String dbHostLike;
}