农业信息化系统量地任务管理:实体类设计、数据库映射和MyBatis实现
农业信息化系统量地任务管理:实体类设计、数据库映射和MyBatis实现
本文将介绍如何设计实体类、数据库映射和MyBatis实现,以构建一个农业信息化系统中的量地任务管理功能。该系统允许用户发布量地任务,每个任务包含多个需要测量的土地地块。
1. 需求描述
假设在某农业信息化系统中,用户可以发布一个量地任务,一个量地任务中可包括多个需要测量的地块,比如,发布一个测量石家庄栾城区XX村的耕种土地,这个任务下,需要测量3个位置的地块,如村东XX地块,村西XX地块,村北XX地块。
2. 实体类设计
根据以上描述,我们需要设计两个实体类:地块实体类和任务实体类。
2.1 地块实体类
public class Land {
private int id; // 地块id
private String name; // 地块名称
private String location; // 地块位置
// getter、setter方法
}
2.2 任务实体类
public class Task {
private int id; // 任务id
private String name; // 任务名称
private List<Land> lands; // 任务包含的地块列表
// getter、setter方法
}
3. 映射关系设计
任务和地块是多对多的关系,需要设计一个中间表来映射两者之间的关系。
3.1 任务表(task)
CREATE TABLE `task` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3.2 地块表(land)
CREATE TABLE `land` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`location` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3.3 任务地块映射表(task_land)
CREATE TABLE `task_land` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`task_id` int(11) NOT NULL,
`land_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `fk_task_land_task_id` (`task_id`),
KEY `fk_task_land_land_id` (`land_id`),
CONSTRAINT `fk_task_land_land_id` FOREIGN KEY (`land_id`) REFERENCES `land` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_task_land_task_id` FOREIGN KEY (`task_id`) REFERENCES `task` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
4. MyBatis映射文件配置
4.1 地块映射文件(LandMapper.xml)
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE mapper PUBLIC '-//mybatis.org//DTD Mapper 3.0//EN' 'http://mybatis.org/dtd/mybatis-3-mapper.dtd'>
<mapper namespace='com.example.mapper.LandMapper'>
<!-- 新增地块信息 -->
<insert id='addLand' parameterType='com.example.entity.Land'>
INSERT INTO land (name, location)
VALUES (#{name}, #{location})
</insert>
<!-- 修改地块信息 -->
<update id='updateLand' parameterType='com.example.entity.Land'>
UPDATE land SET name = #{name}, location = #{location}
WHERE id = #{id}
</update>
<!-- 删除地块信息 -->
<delete id='deleteLand' parameterType='int'>
DELETE FROM land WHERE id = #{id}
</delete>
<!-- 通过地块名称模糊查询 -->
<select id='getLandsByName' parameterType='String' resultType='com.example.entity.Land'>
SELECT * FROM land WHERE name LIKE CONCAT('%', #{name}, '%') ORDER BY id DESC
</select>
<!-- 查询地块总数 -->
<select id='getLandCount' resultType='int'>
SELECT COUNT(*) FROM land
</select>
<!-- 分页查询地块信息 -->
<select id='getLandsByPage' parameterType='map' resultType='com.example.entity.Land'>
SELECT * FROM land ORDER BY id DESC LIMIT #{start}, #{pageSize}
</select>
</mapper>
4.2 任务映射文件(TaskMapper.xml)
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE mapper PUBLIC '-//mybatis.org//DTD Mapper 3.0//EN' 'http://mybatis.org/dtd/mybatis-3-mapper.dtd'>
<mapper namespace='com.example.mapper.TaskMapper'>
<!-- 新增任务信息 -->
<insert id='addTask' parameterType='com.example.entity.Task'>
INSERT INTO task (name) VALUES (#{name})
</insert>
<!-- 删除任务信息 -->
<delete id='deleteTask' parameterType='int'>
DELETE FROM task WHERE id = #{id}
</delete>
<!-- 查询任务下所有地块信息 -->
<select id='getLandsByTaskId' parameterType='int' resultType='com.example.entity.Land'>
SELECT l.* FROM land l
INNER JOIN task_land tl ON l.id = tl.land_id
WHERE tl.task_id = #{taskId}
</select>
<!-- 查询地块所属任务信息 -->
<select id='getTaskByLandId' parameterType='int' resultType='com.example.entity.Task'>
SELECT t.* FROM task t
INNER JOIN task_land tl ON t.id = tl.task_id
WHERE tl.land_id = #{landId}
</select>
</mapper>
5. DAO接口设计
5.1 地块DAO接口
public interface LandMapper {
void addLand(Land land); // 新增地块信息
void updateLand(Land land); // 修改地块信息
void deleteLand(int id); // 删除地块信息
List<Land> getLandsByName(String name); // 通过地块名称模糊查询
int getLandCount(); // 查询地块总数
List<Land> getLandsByPage(Map<String, Object> params); // 分页查询地块信息
}
5.2 任务DAO接口
public interface TaskMapper {
void addTask(Task task); // 新增任务信息
void deleteTask(int id); // 删除任务信息
List<Land> getLandsByTaskId(int taskId); // 查询任务下所有地块信息
Task getTaskByLandId(int landId); // 查询地块所属任务信息
}
6. service层设计
6.1 地块service
@Service
public class LandService {
@Autowired
private LandMapper landMapper;
// 新增地块信息
public void addLand(Land land) {
landMapper.addLand(land);
}
// 修改地块信息
public void updateLand(Land land) {
landMapper.updateLand(land);
}
// 删除地块信息
public void deleteLand(int id) {
landMapper.deleteLand(id);
}
// 通过地块名称模糊查询
public List<Land> getLandsByName(String name) {
return landMapper.getLandsByName(name);
}
// 分页查询地块信息
public PageInfo<Land> getLandsByPage(int pageNum, int pageSize) {
int start = (pageNum - 1) * pageSize;
Map<String, Object> params = new HashMap<>();
params.put('start', start);
params.put('pageSize', pageSize);
List<Land> lands = landMapper.getLandsByPage(params);
int count = landMapper.getLandCount();
PageInfo<Land> pageInfo = new PageInfo<>(lands);
pageInfo.setTotal(count);
pageInfo.setPageNum(pageNum);
pageInfo.setPageSize(pageSize);
return pageInfo;
}
}
6.2 任务service
@Service
public class TaskService {
@Autowired
private TaskMapper taskMapper;
// 新增任务信息
public void addTask(Task task) {
taskMapper.addTask(task);
for (Land land : task.getLands()) {
taskMapper.addTaskLand(task.getId(), land.getId()); // 插入任务地块映射表
}
}
// 删除任务信息
public void deleteTask(int id) {
taskMapper.deleteTask(id);
}
// 查询任务下所有地块信息
public List<Land> getLandsByTaskId(int taskId) {
return taskMapper.getLandsByTaskId(taskId);
}
// 查询地块所属任务信息
public Task getTaskByLandId(int landId) {
return taskMapper.getTaskByLandId(landId);
}
}
7. 控制层设计
7.1 地块控制器
@RestController
@RequestMapping('/land')
public class LandController {
@Autowired
private LandService landService;
// 新增地块信息
@PostMapping('/add')
public String addLand(Land land) {
landService.addLand(land);
return 'success';
}
// 修改地块信息
@PostMapping('/update')
public String updateLand(Land land) {
landService.updateLand(land);
return 'success';
}
// 删除地块信息
@GetMapping('/delete/{id}')
public String deleteLand(@PathVariable('id') int id) {
landService.deleteLand(id);
return 'success';
}
// 通过地块名称模糊查询并分页
@GetMapping('/list')
public PageInfo<Land> getLandsByName(@RequestParam('name') String name, @RequestParam('pageNum') int pageNum, @RequestParam('pageSize') int pageSize) {
return landService.getLandsByPage(name, pageNum, pageSize);
}
}
7.2 任务控制器
@RestController
@RequestMapping('/task')
public class TaskController {
@Autowired
private TaskService taskService;
// 新增任务信息
@PostMapping('/add')
public String addTask(Task task) {
taskService.addTask(task);
return 'success';
}
// 删除任务信息
@GetMapping('/delete/{id}')
public String deleteTask(@PathVariable('id') int id) {
taskService.deleteTask(id);
return 'success';
}
// 查询任务下所有地块信息
@GetMapping('/lands/{taskId}')
public List<Land> getLandsByTaskId(@PathVariable('taskId') int taskId) {
return taskService.getLandsByTaskId(taskId);
}
// 查询地块所属任务信息
@GetMapping('/land/{landId}')
public Task getTaskByLandId(@PathVariable('landId') int landId) {
return taskService.getTaskByLandId(landId);
}
}
8. 总结
本文详细介绍了如何使用实体类设计、数据库映射和MyBatis实现,来构建农业信息化系统中的量地任务管理功能。代码示例仅供参考,实际应用中需要根据具体需求进行调整。
**注:**以上代码仅为示例代码,具体实现可能还需要根据实际情况进行调整。
原文地址: https://www.cveoy.top/t/topic/nqdl 著作权归作者所有。请勿转载和采集!