一个简单的SpringBoot整合Mybatis项目
2017-10-11 13:42
851 查看
1. 构建基本SpringBoot依赖
1.1 设置SpringBoot父依赖
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version> </parent>
1.2 整合web功能
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
2. 启动并测试SpringMVC
SpringBoot项目一般会有*application的入口类,入口类中有main方法,这是这个SpringBoot项目的入口方法。编写一个入口类
@Controller @SpringBootApplication @Configuration public class HelloApplication { @RequestMapping("hello") @ResponseBody public String hello(){ return "hello world!"; } public static void main(String[] args) { SpringApplication.run(HelloApplication.class, args); } }
@SpringBootApplication 这个是SpringBoot的核心注解,开启自动配置
@Configuration 声明这是一个配置类
@Controller 声明这同时是一个控制器
main 这是项目的入口
运行后可以打开http://localhost:8088/hello得到测试正确的结果如下
这个时候如果没有配置内置的Tomcat端口号可能会有端口冲突的问题,此时可以使用全局配置文件的方式去修改服务器端口号。SpringBoot使用一个规定命名的全局配置文件application.properties文件或者application.yml文件,这个文件通常放在resources下或者/config下。我这里采用application.yml的方式
server: port: 8088
3. SpringBoot整合Mybatis
SpringBoot为我们提供了简化企业级开发绝大多数场景的starter pom,只要使用了应用场景所需的starter pom,相关的技术配4000
置就会消除,就可以得到SpringBoot为我们提供的自动配置的Bean。
这里我使用了SpringBoot对JDBC数据库的支持,以及Mybatis提供的第三方的SpringBoot对Mybatis的支持。我写入了如下的依赖,其中SpringBoot官方提供的starter pom不需要提供版本号,版本问题由父依赖去管理。这里的MySQL驱动版本要指定为5.1.6,用默认的会出错。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency>
为了给mybatis提供数据源DataSource,这里采用全局配置文件的方式去设置驱动以及url等。在全局配置文件application.yml中添加如下的代码
spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:jdbc:mysql:///cloud_note?userUnicode=true&characterEncoding=utf8 username: root password: 860065
测试通过后下面开始设置Mybatis和SpringBoot整合,在这里分为两步去整合:
第一步:创建一个Mybatis的配置类,方便控制Mybatis的各种控制
@Configuration public class MyBatisConfig { @Bean @ConditionalOnMissingBean //当容器里没有指定的Bean的情况下创建该对象 public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource) { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); // 设置数据源 sqlSessionFactoryBean.setDataSource(dataSource); ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); // 设置映射文件 Resource[] mapperResources = null; try { mapperResources = resolver.getResources("classpath:mapper/*.xml"); } catch (IOException e) { e.printStackTrace(); } sqlSessionFactoryBean.setMapperLocations(mapperResources); // 设置mybatis的主配置文件 Resource mybatisConfigXml = resolver.getResource("classpath:mybatis/mybatis-config.xml"); sqlSessionFactoryBean.setConfigLocation(mybatisConfigXml); return sqlSessionFactoryBean; } }
第二步:创建Mapper接口的扫描类,MapperScannerConfig,为mapper 产生bean 放进ioc 容器内。
@Configuration @AutoConfigureAfter(MyBatisConfig.class) //保证在MyBatisConfig实例化之后再实例化该类 public class MapperScannerConfig { // mapper接口的扫描器 @Bean public MapperScannerConfigurer mapperScannerConfigurer() { MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer(); mapperScannerConfigurer.setBasePackage("co.meihuo.dao"); return mapperScannerConfigurer; } }
MySQL文件
SET FOREIGN_KEY_CHECKS=0; DROP database IF EXISTS `user_base`; create database user_base; use user_base; DROP TABLE IF EXISTS `cn_user`; create table `cn_user` ( `cn_id` VARCHAR(100) PRIMARY KEY, `cn_username` VARCHAR(100), `cn_password` VARCHAR(100), `cn_age` INT(2) )ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `cn_user` values ('1','Test','123456',26); INSERT INTO `cn_user` values ('2','Test2','888888',22);
4. 实体类
public class User implements Serializable{ private String cn_id; private String cn_username; private String cn_password; private Integer cn_age; public String getCn_id() { return cn_id; } public void setCn_id(String cn_id) { this.cn_id = cn_id; } public String getCn_username() { return cn_username; } public void setCn_username(String cn_username) { this.cn_username = cn_username; } public String getCn_password() { return cn_password; } public void setCn_password(String cn_password) { this.cn_password = cn_password; } public Integer getCn_age() { return cn_age; } public void setCn_age(Integer cn_age) { this.cn_age = cn_age; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((cn_id == null) ? 0 : cn_id.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; User other = (User) obj; if (cn_id == null) { if (other.cn_id != null) return false; } else if (!cn_id.equals(other.cn_id)) return false; return true; } @Override public String toString() { return "User [cn_id=" + cn_id + ", cn_username=" + cn_username + ", cn_password=" + cn_password + ", cn_age=" + cn_age + "]"; } }
5. 持久层
写一个简单的求用户数量的查询语句,用mybatis自动生成相应的Mapper放在容器中共业务层调用。UserMapper代码如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"> <mapper namespace="co.meihuo.dao.UserDAO"> <select id="count" resultType="int"> select count(*) from cn_user </select> </mapper>
对应的DAO:
public interface UserDAO { public int count(); }
6. 业务层
这是一个实验项目,不做复杂的业务逻辑,没有对结果封装成一个JSON对象发回浏览器,而是将查询的结果直接显示在浏览器上。业务层接口
public interface UserService { public Integer getCount(); }
业务层实现类,这里用依赖注入的方式将mybatis生成的Bean注入到业务层实现类中
@Service("userService") public class UserServiceImpl implements UserService{ @Resource private UserDAO userDAO; public Integer getCount() { return userDAO.count(); } }
7. 运行
运行入口方法在浏览器中访问http://localhost:8088/count,可以得到目前数据库中客户的数量
我在这个简单的SpringBoot整合Mybatis项目中,遇到了几个问题这里着重说一下:
1. SpringBoot内置的Tomcat的端口号可能会跟Oracle冲突
2. 需要清楚mybatis的三个文件:mybatis-config.xml 用来配置mybatis,这个文件里面的内容可以通过java配置的方式去实现。*Mapper.xml文件,这个是映射文件不用说。DAO不用说。SpringBoot整合Mybatis的时候最好通过两个Java配置去完成,一个是MybatisConfig这个用来配置Mybatis,一个是MapperScannerConfig,用来配置Mapper扫描。
3. 注意要把SpringBoot中推荐整合的MySQL驱动版本更换为5.1.6否则会有一些问题。
相关文章推荐
- springboot整合mybatis一个简单的demo
- SpringBoot+mybatis+gradle的多模块项目整合
- Springboot整合dubbo构建maven多模块项目(四) - 集成mybatis
- CK1956-2017年最新项目实战Spring Boot视频微服务整合Mybatis
- Springboot 多模块 整合 Mybatis maven项目
- Maven项目中,关于Spring Boot 整合MyBatis时,Service层无法找到mapper接口的问题解决
- SpringBoot+Maven项目实战(6):整合Log4j和Aop,实现简单的日志记录
- 通过springboot+mybatis+mysql+freemarker创建一个java web项目
- Spring boot 搭建一个简单的 Java EE 项目
- Maven构建一个最简单的Spring Boot + Spring MVC项目
- Web项目下整合springBoot+springMVC+mybatis+boot内嵌tomcat以及所需jar包
- spring_boot整合mybatis项目启动时报错
- springboot+springmvc+mybatis项目整合
- eclipse搭建简单springboot-mybatis项目实现页面简单跳转
- Java爬虫初体验:简单抓取IT之家热评(整合Spring Boot+Elasticsearch+Redis+Mybatis)
- maven项目 spring-boot 整合 mybatis 实现查询功能demo
- springboot+mybatis+springmvc+mysql简单项目
- spring boot mybatis 整合shiro简单实现登陆权限管理
- Spring Boot 入门 (一)——建一个最简单的springboot项目