开发工具
IDEA2019.1.1
JDK1.8
SpringBoot2.1.6
(此处省略软件安装步骤以及项目创建)
依赖jar包
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
数据库准备
连接Mysql数据库,数据库名称为:sparkProgress,测试用的数据表名为:Task.
表结构如下:
CREATE TABLE `session_detail` (
`task_id` int(11) NOT NULL,
`user_id` int(11) DEFAULT NULL,
`session_id` varchar(255) DEFAULT NULL,
`page_id` int(11) DEFAULT NULL,
`action_time` varchar(255) DEFAULT NULL,
`search_keyword` varchar(255) DEFAULT NULL,
`click_category_id` int(11) DEFAULT NULL,
`click_product_id` int(11) DEFAULT NULL,
`order_category_ids` varchar(255) DEFAULT NULL,
`order_product_ids` varchar(255) DEFAULT NULL,
`pay_category_ids` varchar(255) DEFAULT NULL,
`pay_product_ids` varchar(255) DEFAULT NULL,
PRIMARY KEY (`task_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
执行sql:
select * from task;
查询出数据:
配置文件准备
在这里进行配置的文件为application.properties。如果在项目创建时,没有生成这个文件,可以通过后期手动生成。
配置文件配置内容如下:
#配置数据源
spring.datasource.url=jdbc:mysql://IP地址:端口号/sparkProgress?useUnicode=true&characterEncoding=utf8
spring.datasource.username=用户名
spring.datasource.password=密码
spring.datasource.driver-class-name=com.mysql.jdbc.Driver(连接驱动)
代码准备
创建实体类Task
public class Task implements Serializable {
private Long task_id;
private String task_name;
private String create_time;
private String start_time;
private String finish_time;
private String task_type;
private String task_status;
private String task_param;
(此处省略get和set方法,以及构造方法)
}
import com.zpy.Controller.Task;
import com.zpy.Mapper.TaskMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class TaskService {
@Autowired
private TaskMapper taskMapper;
public Task selectMapper(String taskName){
System.out.println("传入参数:"+taskName);
return taskMapper.findTaskOne(taskName);
}
}
创建对应Mapper类。
import com.zpy.Controller.Task;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
@Mapper
public interface TaskMapper {
@Select(value = "select * from task where task_name=#{task_name}")
Task findTaskOne(@Param("task_name") String task_name);
}
创建Service类
import com.zpy.Controller.Task;
import com.zpy.Mapper.TaskMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class TaskService {
@Autowired
private TaskMapper taskMapper;
public Task selectMapper(String taskName){
System.out.println("传入参数:"+taskName);
return taskMapper.findTaskOne(taskName);
}
}
创建Controller类
import com.zpy.Service.TaskService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/demo")
public class TaskController {
@Autowired
private TaskService taskService;
@RequestMapping("/query")
public Task testQuery(){
Task task= taskService.selectMapper("测试");
return task;
}
}
执行效果
具体说明
使用@Select注解对SQL进行查询操作,是Mybatis中一种快速、简便的查询方式,不需要再额外编写Mapper文件,节省了开发时间。不足之处在于,它不支持负责的sql查询,如果涉及到多表联查,那么就需要进行Mapper文件配置。
遇到的问题
在对springboot和mybatis整合的过程中,出现问题,传入的参数正确,引入依赖的jar包正确并无版本冲突。查询出的结果报空指针异常。
原因存在以下几个方面:
1.创建实体类时,请注意实体类中的成员变量的名称和表中字段名称保持一致,get和set方法必须存在;
2.如果创建的实体类中变量名和字段名称不一致,请注意修改SQL,将SQL修改为:
select task_id as taskId,task_name as taskName,create_time as createTime,start_time as startTime,finish_time as finishTime,task_type as taskType,task_status as taskStatus,task_param as taskParam from task where task_name=#{task_name};
即将SQL中字段名通过别名的方式和实体类中变量名称保持一致。