详细代码设计使用Java mybatis 以及pg
时间: 2023-08-14 13:05:05 浏览: 100
好的,以下是代码设计的步骤:
1. 创建数据库表
首先需要创建一个数据库表,用于存储任务的完成情况。可以按照以下格式创建:
```
CREATE TABLE task_completion(
id SERIAL PRIMARY KEY,
task_name VARCHAR(50) NOT NULL,
completion_date DATE NOT NULL,
is_completed BOOLEAN NOT NULL
);
```
2. 配置MyBatis
在使用MyBatis之前,需要先配置MyBatis。可以在项目的配置文件中配置MyBatis,比如在application.properties中添加如下配置:
```
mybatis.mapper-locations=classpath*:mapper/*.xml
mybatis.type-aliases-package=com.example.model
```
其中,mapper-locations表示映射文件的位置,type-aliases-package表示实体类所在的包。
3. 创建实体类
创建一个实体类TaskCompletion,用于表示任务的完成情况。可以按照以下格式创建:
```
public class TaskCompletion {
private Integer id;
private String taskName;
private LocalDate completionDate;
private Boolean isCompleted;
// getter和setter方法省略
}
```
4. 创建Mapper接口
创建一个Mapper接口TaskCompletionMapper,用于定义数据库操作方法。可以按照以下格式创建:
```
@Mapper
public interface TaskCompletionMapper {
void insert(TaskCompletion taskCompletion);
List<TaskCompletion> selectByDate(LocalDate date);
}
```
其中,insert方法用于插入一条任务完成情况记录,selectByDate方法用于查询某一天的任务完成情况。
5. 创建Mapper XML文件
创建一个Mapper XML文件TaskCompletionMapper.xml,用于定义SQL语句。可以按照以下格式创建:
```
<mapper namespace="com.example.mapper.TaskCompletionMapper">
<insert id="insert" parameterType="com.example.model.TaskCompletion">
INSERT INTO task_completion(task_name, completion_date, is_completed)
VALUES(#{taskName}, #{completionDate}, #{isCompleted})
</insert>
<select id="selectByDate" parameterType="java.time.LocalDate" resultType="com.example.model.TaskCompletion">
SELECT id, task_name, completion_date, is_completed
FROM task_completion
WHERE completion_date = #{date}
</select>
</mapper>
```
其中,insert语句用于插入一条任务完成情况记录,selectByDate语句用于查询某一天的任务完成情况。
6. 编写代码
编写代码实现任务完成情况的统计。可以按照以下格式编写:
```
@Autowired
private TaskCompletionMapper taskCompletionMapper;
public void calculateScore(LocalDate start, LocalDate end) {
Map<String, Integer> countMap = new HashMap<>();
List<TaskCompletion> completionList = taskCompletionMapper.selectByDate(start);
for (TaskCompletion completion : completionList) {
String taskName = completion.getTaskName();
boolean isCompleted = completion.getIsCompleted();
if (!isCompleted) {
countMap.put(taskName, countMap.getOrDefault(taskName, 0) + 1);
if (countMap.getOrDefault(taskName, 0) == 3) {
// 扣分
}
} else {
countMap.put(taskName, 0);
}
}
}
```
其中,TaskCompletionMapper是自动生成的Mapper接口,可以使用@Autowired注解注入到代码中。calculateScore方法用于统计任务完成情况,并扣分。
阅读全文