您的位置:首页 > 编程语言 > Java开发

一个简单的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否则会有一些问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: