在之前开发的sessionFactory 中 如果字段的名称和数据库中字段名称不一致,是没有办法直接获取到值的,而且一直用map 操作也不是很方便,所以开发一个字段转换的注解进行数据库字段和model 中的字段进行映射。
首先创建一个注解
/**
* 数据库中字段一般和 model
* 字段名称不一样 所以这里定义一个主机来转换名称
* 只需要将名称不一样的注解进行转换即可
* @author : WChen129
* @date : 2018-05-24
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface FieldName {
String value();
}
下面创建一个task 的model
public class Task {
@FieldName(value = "task_id")
private long taskid;
@FieldName(value = "task_name")
private String taskName;
@FieldName(value = "create_time")
private String createTime;
@FieldName(value = "start_time")
private String startTime;
@FieldName(value = "finish_time")
private String finishTime;
@FieldName(value = "task_type")
private String taskType;
@FieldName(value = "task_status")
private String taskStatus;
@FieldName(value = "task_param")
private String taskParam;
public long getTaskid() {
return taskid;
}
public void setTaskid(long taskid) {
this.taskid = taskid;
}
public String getTaskName() {
return taskName;
}
public void setTaskName(String taskName) {
this.taskName = taskName;
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public String getStartTime() {
return startTime;
}
public void setStartTime(String startTime) {
this.startTime = startTime;
}
public String getFinishTime() {
return finishTime;
}
public void setFinishTime(String finishTime) {
this.finishTime = finishTime;
}
public String getTaskType() {
return taskType;
}
public void setTaskType(String taskType) {
this.taskType = taskType;
}
public String getTaskStatus() {
return taskStatus;
}
public void setTaskStatus(String taskStatus) {
this.taskStatus = taskStatus;
}
public String getTaskParam() {
return taskParam;
}
public void setTaskParam(String taskParam) {
this.taskParam = taskParam;
}
@Override
public String toString() {
return "Task{" +
"taskid=" + taskid +
", taskName='" + taskName + '\'' +
", createTime='" + createTime + '\'' +
", startTime='" + startTime + '\'' +
", finishTime='" + finishTime + '\'' +
", taskType='" + taskType + '\'' +
", taskStatus='" + taskStatus + '\'' +
", taskParam='" + taskParam + '\'' +
'}';
}
}
下面将上一遍中介绍的taskdao 重新改造一下
public interface ITaskDAO {
/**
* 根据主键查询任务
* @param taskid 主键
* @return 任务
*/
Task findById(long taskid);
}
public class TaskDAOImpl implements ITaskDAO {
/**
* 根据主键查询任务
* @param taskid 主键
* @return 任务
*/
@Override
public Task findById(long taskid) {
String sql = "select * from task where task_id=?";
Object[] params = new Object[]{taskid};
SessionFactory sessionFactory=SessionFactory.getSessionFactory();
return sessionFactory.queryForObject(sql,params,Task.class);
}
}
下面写一个test 测试一下
public static void main(String[] args) {
SessionFactory sessionFactory=SessionFactory.getSessionFactory();
ITaskDAO taskDAO=new TaskDAOImpl();
Task task=taskDAO.findById(10000001L);
if(task!=null){
System.out.println(task.getTaskName());
}
}
数据结果
test