版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_36146275/article/details/79275976
上一篇讲述了什么是Spring Boot、如何创建Sping Boot项目以及如何通过配置修改端口号;
本篇将讲述Spring Boot与Mybatis的整合过程。
一、添加mybatis以及mysql数据库驱动的依赖
在pom.xml文件添加如下内容:
<!--mysql数据库连接驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--mybatis支持SpringBoot包-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
二、配置mysql数据源和mybatis映射mapper文件路径
mybatis映射mapper文件路径默认在resources目录下,因此配置的classpath:mappers/*.xml,
意思就是【resources/mappers】下的所有xml文件
三、编写接口访问数据库
3.1接口目录结构
3.2 controller层:注解@RestController已经组合了SpringMVC的@Controller注解,使之成为控制器
package com.xft.xftbase.actor.controller;
import com.xft.xftbase.actor.domain.ActorVO;
import com.xft.xftbase.actor.service.ActorService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* 系统角色控制器
* @author lgy
* @date 2018/02/07
*/
@RestController
public class ActorController {
@Autowired
ActorService actorService;
/**
* 角色列表
* @author lgy
* @date 2018/02/07
* @return String
*/
@RequestMapping(value = "/index")
@ResponseBody
List<ActorVO> index(){
return actorService.findUser();
}
}
3.3 entity实体类,根据数据表字段生成
package com.xft.xftbase.actor.domain;
import java.sql.Timestamp;
/**
* @description Actor数据表实体类
* @author lgy
* @date 2018/02/07
*/
public class ActorVO {
private Long actor_id;
private String first_name;
private String last_name;
private java.sql.Timestamp last_update;
public Long getActor_id() {
return actor_id;
}
public void setActor_id(Long actor_id) {
this.actor_id = actor_id;
}
public String getFirst_name() {
return first_name;
}
public void setFirst_name(String first_name) {
this.first_name = first_name;
}
public String getLast_name() {
return last_name;
}
public void setLast_name(String last_name) {
this.last_name = last_name;
}
public Timestamp getLast_update() {
return last_update;
}
public void setLast_update(Timestamp last_update) {
this.last_update = last_update;
}
@Override
public String toString() {
return "ActorVO{" +
"actor_id=" + actor_id +
", first_name='" + first_name + '\'' +
", last_name='" + last_name + '\'' +
", last_update=" + last_update +
'}';
}
}
3.4 dao层:持久化数据到DB
使用注解@Mapper使之成为数据持久层,
如果不添加@Component注解,发布工程时会报此错误:【Consider defining a bean of type 'xxx' in your configuration.】意思是此类未交给Spring容器进行管理,而在程序中又通过@Autowired等方式自动注入,然鹅Spring容器中找不到此类就抛异常了。
package com.xft.xftbase.actor.mapper;
import com.xft.xftbase.actor.domain.ActorVO;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
/**
* 系统角色dao层
* @author lgy
* @date 2018/02/07
*/
@Mapper
@Component(value = "actorMapper")
public interface ActorMapper {
/**
* 查询系统所有角色
* @author lgy
* @date 2018/02/07
* @return List
*/
List<ActorVO> findUser();
}
3.5 service层:定义业务逻辑层的相关接口
业务逻辑层接口:
package com.xft.xftbase.actor.service;
import com.xft.xftbase.actor.domain.ActorVO;
import java.util.List;
/**
* 系统角色相关接口
* @author lgy
* @date 2018/02/07
*/
public interface ActorService {
/**
* 查询系统所有角色
* @author lgy
* @date 2018/02/07
* @return String
*/
List<ActorVO> findUser();
}
实现接口:
package com.xft.xftbase.actor.service.serviceImpl;
import com.xft.xftbase.actor.domain.ActorVO;
import com.xft.xftbase.actor.mapper.ActorMapper;
import com.xft.xftbase.actor.service.ActorService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
/**
* 系统角色业务逻辑层
* @author lgy
* @date 2018/02/07
*/
@Component
public class ActorServiceImpl implements ActorService{
@Autowired
ActorMapper actorMapper1;
@Override
public List<ActorVO> findUser() {
return actorMapper1.findUser();
}
}
四、SpringBoot程序发布入口
在@SpringBootApplication类中获取数据源、db操作对象、事务管理器,并通过@Bean交给Spring管理
package com.xft.xftbase;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;
/**
* springboot工程发布入口
*
* @author lgy
* @date 2018/02/08
*/
@SpringBootApplication
public class XftBaseApplication {
public static void main(String[] args) {
SpringApplication.run(XftBaseApplication.class, args);
}
/**
* 获取数据源
* @return
*/
@Bean
@ConfigurationProperties(prefix="spring.datasource")
public DataSource dataSource() {
return new org.apache.tomcat.jdbc.pool.DataSource();
}
/**
* 获取DB操作对象
* @return
* @throws Exception
*/
@Bean
public SqlSessionFactory sqlSessionFactoryBean() throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource());
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
//映射文件是resource/mapper/目录下所有.xml文件
sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:/mappers/*.xml"));
return sqlSessionFactoryBean.getObject();
}
/**
* 获取mybatis事务管理器
* @return
*/
@Bean
public PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource());
}
}
五、验证结果
结果显示,成功将数据库中的actor表的数据读取