农业信息化系统量地任务管理:实体类设计、数据库映射和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实现,来构建农业信息化系统中的量地任务管理功能。代码示例仅供参考,实际应用中需要根据具体需求进行调整。

**注:**以上代码仅为示例代码,具体实现可能还需要根据实际情况进行调整。

农业信息化系统量地任务管理:实体类设计、数据库映射和MyBatis实现

原文地址: https://www.cveoy.top/t/topic/nqdl 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录