通用CRUD

说明

本文档基于在 快速开始 中创建的项目。演示如何创建一个通用增删改查功能。

引入依赖

pom.xml 中添加依赖
pom.xml
1
<!--通用CRUD-->
2
<dependency>
3
<groupId>org.hswebframework.web</groupId>
4
<artifactId>hsweb-commons-dao-mybatis</artifactId>
5
<version>${hsweb.framework.version}</version>
6
</dependency>
7
<dependency>
8
<groupId>org.hswebframework.web</groupId>
9
<artifactId>hsweb-commons-service-simple</artifactId>
10
<version>${hsweb.framework.version}</version>
11
</dependency>
12
<dependency>
13
<groupId>org.hswebframework.web</groupId>
14
<artifactId>hsweb-commons-controller</artifactId>
15
<version>${hsweb.framework.version}</version>
16
</dependency>
17
Copied!

创建数据库表

1
create table tb_test(
2
id varchar(32) primary key,
3
name varchar(32) not null,
4
status tinyint,
5
comment text
6
)
Copied!
除了手动创建表,还可以使用 数据库版本控制 进行表结构维护。

创建实体类

创建实体类 com.mycompany.entity.TestEntity
实体类可通过继承:org.hswebframework.web.commons.entity.SimpleGenericEntity<主键类型>.来使用通用的crud功能.
TestEntity.java
1
@Getter //如果报错请安装lombok插件
2
@Setter
3
public class TestEntity extends SimpleGenericEntity<String> {
4
private String name;
5
6
private Byte status;
7
8
private String comment;
9
}
Copied!

创建Dao接口

dao接口可通过继承:org.hswebframework.web.dao.CrudDao<实体类,主键类型>.来使用通用的crud功能.
com.mycompany.dao.TestDao
1
public interface TestDao extends CrudDao<TestEntity,String> {
2
3
}
Copied!

Mybatis Mapper Xml

创建myabtis mapper,在resources目录上创建:com/mycompany/dao/mybatis/TestMapper.xml,
注意: 目录分割使用/而不是.
com/mycompany/dao/mybatis/TestMapper.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
<mapper namespace="com.mycompany.dao.TestDao">
6
<resultMap id="TestEntityResultMap" type="com.mycompany.entity.TestEntity">
7
<!--如果没有使用JPA注解,必须在此明确定义字段映射关系-->
8
<id property="id" column="id" javaType="String" jdbcType="VARCHAR"/>
9
<result property="name" column="name" javaType="String" jdbcType="VARCHAR"/>
10
<result property="status" column="status" javaType="Byte" jdbcType="TINYINT"/>
11
<result property="comment" column="comment" javaType="String" jdbcType="CLOB"/>
12
</resultMap>
13
14
<!--用于动态生成sql所需的配置-->
15
<sql id="config">
16
<bind name="resultMapId" value="'TestEntityResultMap'"/>
17
<bind name="tableName" value="'tb_test'"/>
18
</sql>
19
20
<insert id="insert" parameterType="com.mycompany.entity.TestEntity" >
21
<include refid="config"/>
22
<include refid="BasicMapper.buildInsertSql"/>
23
</insert>
24
25
<delete id="deleteByPk" parameterType="String">
26
delete from tb_test where id =#{id}
27
</delete>
28
29
<delete id="delete" parameterType="org.hswebframework.web.commons.entity.Entity">
30
<include refid="config"/>
31
<include refid="BasicMapper.buildDeleteSql"/>
32
</delete>
33
34
<update id="update" parameterType="org.hswebframework.web.commons.entity.Entity">
35
<include refid="config"/>
36
<include refid="BasicMapper.buildUpdateSql"/>
37
</update>
38
39
<select id="query" parameterType="org.hswebframework.web.commons.entity.Entity" resultMap="TestEntityResultMap">
40
<include refid="config"/>
41
<include refid="BasicMapper.buildSelectSql"/>
42
</select>
43
44
<select id="count" parameterType="org.hswebframework.web.commons.entity.Entity" resultType="int">
45
<include refid="config"/>
46
<include refid="BasicMapper.buildTotalSql"/>
47
</select>
48
</mapper>
Copied!

配置Application

一、编辑application.yml
application.yml
1
mybatis:
2
mapper-locations: classpath:com/mycompany/dao/mybatis/**/*.xml
Copied!
二、 在MyProjectApplication上添加注解:@MapperScan(basePackages = "com.mycompany.dao", markerInterface = org.hswebframework.web.dao.Dao.class)

创建Service

Service接口

service接口可通过继承:org.hswebframework.web.service.CrudService<实体类,主键类型>.来使用通用的crud功能.
com.mycompany.service.TestService
1
public interface TestService extends CrudService<TestEntity,String> {
2
}
Copied!

实现类

实现类可通过继承: org.hswebframework.web.service.GenericEntityService<实体类,主键类型>.来使用通用crud功能.
com.mycompany.service.impl.TestServiceImpl
1
@Service
2
public class TestServiceImpl extends GenericEntityService<TestEntity,String>
3
implements TestService {
4
5
@Autowired
6
private TestDao testDao;
7
8
@Override
9
protected IDGenerator<String> getIDGenerator() {
10
return IDGenerator.MD5;
11
}
12
13
@Override
14
public TestDao getDao() {
15
return testDao;
16
}
17
}
Copied!
并不是所有功能都是CRUD,也不是所有功能都需要接口+实现类的方式,请根据情况选择合适的方式。

创建Controller

controller 可通过实现接口: org.hswebframework.web.controller.SimpleGenericEntityController<实体类,主键类型,org.hswebframework.web.commons.entity.param.QueryParamEntity>
com.mycompany.controller.TestController
1
@RestController
2
@RequestMapping("/test")
3
public class TestController implements SimpleGenericEntityController<TestEntity, String, QueryParamEntity> {
4
5
@Autowired
6
TestService testService;
7
8
@Override
9
public CrudService<TestEntity, String> getService() {
10
return testService;
11
}
12
}
Copied!
并不是所有的controller都需要使用完整的CRUD功能, 请根据实际情况选择合适的方式.

启动服务

执行启动类 TestApplication ,服务启动完成后使用Idea自带的Test Restful Web Servcice 进行测试。
一个简单的增删改查功能就创建完成了。
接下来你可以试试
Last modified 2yr ago