增删改查

说明

hsweb实现了Dao,Service,Controller层的通用增删改查,以及灵活的动态条件以及API,可在不修改mybatis mapper.xml的情况下实现动态添加sql条件。所有参数都使用了参数化预编译,没有sql注入风险。
约定:
  1. 1.
    列必须明确定义,可通过mapper.xml 中的resultMap或者JPA注解进行定义。
  2. 2.
    查询条件的值为空(null或者空字符串)或者列未定义时,条件将被忽略。
  3. 3.
    新增或者修改的值为null时或列未定义时,列将被忽略。
  4. 4.
    不能执行无条件的 修改,删除操作。

Dao层

UserMapper.xml
1
<?xml version="1.0" encoding="UTF-8" ?>
2
<!DOCTYPE mapper
3
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
4
"http://www.mybatis.org/dtd/mybatis-3-mapper.dtd">
5
6
<mapper namespace="org.hswebframework.web.dao.authorization.UserDao">
7
<resultMap id="UserResultMap" type="org.hswebframework.web.entity.authorization.UserEntity">
8
<!--如果没有使用JPA注解,必须在此明确定义字段映射关系-->
9
<id property="id" column="u_id" javaType="string" jdbcType="VARCHAR"/>
10
<result property="name" column="name" javaType="string" jdbcType="VARCHAR"/>
11
<result property="username" column="username" javaType="string" jdbcType="VARCHAR"/>
12
<result property="password" column="password" javaType="String" jdbcType="VARCHAR"/>
13
<result property="salt" column="salt" javaType="String" jdbcType="VARCHAR"/>
14
<result property="status" column="status" javaType="Byte" jdbcType="NUMERIC"/>
15
<result property="createTime" column="create_time" javaType="Long" jdbcType="NUMERIC"/>
16
<result property="creatorId" column="creator_id" javaType="String" jdbcType="VARCHAR"/>
17
</resultMap>
18
19
<!--用于动态生成sql所需的配置-->
20
<sql id="config">
21
<bind name="resultMapId" value="'UserResultMap'"/> <!--注意这里的单引号: 'UserResultMap'-->
22
<bind name="tableName" value="'s_user'"/> <!--注意这里的单引号: 's_user' -->
23
</sql>
24
25
<select id="query" parameterType="org.hswebframework.web.commons.entity.Entity" resultMap="UserResultMap">
26
<include refid="config"/>
27
<include refid="BasicMapper.buildSelectSql"/>
28
</select>
29
30
</mapper>
Copied!

Service层

1
//select id,name from table where name = ? limit 0,1
2
createQuery()
3
.select("id","name")
4
.where("name",name)
5
.single();
6
7
//select * from table where name = ? and (age>? or age <=?)
8
createQuery()
9
.where("name",name)
10
.nest()
11
.gt("age",10).or().lte("age",90)
12
.end()
13
//当type==1时,才拼接 and status=?
14
.when(type==1,query-> query.and("status","success"))
15
.listNoPaging();
Copied!
1
//update table set name=? where user = ?
2
User user = ....;
3
4
createUpdate()
5
.set(user::getName)
6
.where(user::getId)
7
.exec();
Copied!

Controller层

1
@GetMapping
2
public ResponseMessage<PagerResult<Order>> queryOrder(QueryParamEntity param){
3
4
String userId = ....;//当前登录用户ID
5
6
//where creatorId = ? and ( 前端传入的参数 )
7
return ok(param.toNestQuery(query->query.and("creatorId",userId))
8
.execute(service::selectPager));
9
10
}
Copied!

开始使用

Last modified 2yr ago