前言:
本项目基于maven构建,使用mybatis-spring-boot作为spring-boot项目的持久层框架
spring-boot中使用mybatis持久层框架与原spring项目使用方式和注解都不相同,需要依赖mybatis-spring-boot包
1、引入mybatis和数据库及其他项目依赖
1.1、引入mybatis依赖
-
- <dependency>
- <groupId>org.mybatis.spring.boot</groupId>
- <artifactId>mybatis-spring-boot-starter</artifactId>
- <version>1.1.1</version>
- </dependency>
1.2、引入mysql 驱动
-
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- </dependency>
1.3、项目pom.xml一览
2、配置数据库连接参数、设置mybatis的mappers所在包以及spring-boot服务参数配置
在项目根目录下创建一个application.properties,该文件用于定义spring-boot的相关参数及数据库参数,以及配置mybatis的mappers扫描路径
如果是maven项目,application.properties放在src/main/resource/目录下
配置如下:
spring.datasource.url=jdbc:MySQL://127.0.0.1:3306/test
spring.datasource.username=root
spring.datasource.password=eguid
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.max-idle=5
spring.datasource.max-wait=10000
spring.datasource.min-idle=1
spring.datasource.initial-size=3
server.port=8088
server.session.timeout=10
server.tomcat.max-threads=800
server.tomcat.uri-encoding=UTF-8
mybatis.mapperLocations=classpath:cn/eguid/carSysWEB/mappers/*.xml
3、mybatis的dao接口及mapper.xml实现
3.1、定义mybatis的dao接口
该接口与mybatis-spring方式不同,需要加上一个@Mapper注解
@Mapper注解用于声明该接口为mybatis的dao接口
- package cn.eguid.carSysWeb.dao;
-
- import java.util.List;
-
- import org.apache.ibatis.annotations.Mapper;
- import org.apache.ibatis.annotations.Param;
-
- import cn.eguid.carSysWeb.entity.DepInfo;
-
- @Mapper
- public interface GetInfoDao {
-
- public List<DepInfo> getRootInfo();
-
- public List<DepInfo> getDepInfo(@Param(value = "parentCoding") String org_parent_coding);
-
- public List<DepInfo> getDepInfoById(@Param(value="dep_id") String dep_id);
- }
3.2、dao接口对应的mapper.xml
mapper.xml与原mybatis写法相同
- <!DOCTYPE mapper
- PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-
- <mapper namespace="cn.eguid.carSysWeb.dao.GetInfoDao">
- <resultMap type="cn.eguid.carSysWeb.entity.DepInfo" id="depMap">
- <id column="org_coding" property="dep_id"/>
- <result column="org_name" property="dep_name"/>
- <result column="org_parent_coding" property="dep_parent_coding"/>
- <result column="last_time" property="last_time"/>
- </resultMap>
- <select id="getRootInfo" resultMap="depMap">
- select * from car_organization where org_parent_coding is null
- </select>
- <select id="getDepInfo" parameterType="string" resultMap="depMap">
- SELECT * FROM car_organization where org_parent_coding=#{parentCoding,jdbcType=VARCHAR}
- </select>
- <select id="getDepInfoById" parameterType="string" resultMap="depMap">
- SELECT * FROM car_organization where org_coding=#{dep_id}
- </select>
- </mapper>
补充:
做完以上步骤,就可以在service中直接通过spring的IOC注解注入mybatis的dao实现,我这里的dao接口是GetInfoDao,所以是注入‘getInfoDao’就可以正确引用该持久层;
注意:必须在spring-boot的入口类中开启@ComponentScan注解才能扫描到项目中所有注解
- package cn.eguid.carSysWeb;
-
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.boot.builder.SpringApplicationBuilder;
-
- import org.springframework.context.annotation.ComponentScan;
-
- @SpringBootApplication
-
- @ComponentScan
- public class Application extends org.springframework.boot.web.support.SpringBootServletInitializer {
-
-
-
- @Override
- protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
- builder.sources(this.getClass());
- return super.configure(builder);
- }
-
- public static void main(String[] args) {
- SpringApplication.run(Application.class, args);
- }
- }
5、总结:
1、spring-boot项目中使用mabatis需要依赖mybatis-spring-boot
2、需要在application.xml中定义数据库连接参数以及mybatis的mappers文件扫描路径
3、mybatis的dao接口需要加上@Mapper注解才能被spring-boot正确扫描到
4、spring-boot开启注解扫描的注解是@ComponentScan
6.让外部Tomcat运行Spring Boot项目
只需要在原项目上做两件事
1、在pom.xml中排除org.springframework.boot的内置tomcat容器
<!-- spring-boot web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 排除内置容器,排除内置容器导出成war包可以让外部容器运行spring-boot项目-->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
2、spring-boot入口实现SpringBootServletInitializer接口
补充:SpringBootServletInitializer接口依赖javax.servlet包,需要在pom.xml中引入该包
spring-boot入口类必须实现SpringBootServletInitializer接口的configure方法才能让外部容器运行spring-boot项目
注意:SpringBootServletInitializer接口需要依赖 javax.servlet
- package cn.eguid.Run;
-
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.boot.builder.SpringApplicationBuilder;
- import org.springframework.boot.web.support.SpringBootServletInitializer;
- import org.springframework.context.annotation.ComponentScan;
-
- import cc.eguid.livepush.PushManager;
- import cc.eguid.livepush.PushManagerImpl;
- import cn.eguid.livePushServer.redisManager.RedisMQHandler;
-
- @SpringBootApplication
-
- @ComponentScan
- public class Application extends SpringBootServletInitializer {
-
-
-
- @Override
- protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
- builder.sources(this.getClass());
- return super.configure(builder);
- }
-
- public static void main(String[] args) {
- SpringApplication.run(Application.class, args);
-
- }
- }