zoukankan      html  css  js  c++  java
  • spring-boot+mybatis开发实战:如何在spring-boot中使用myabtis持久层框架

    前言:

    本项目基于maven构建,使用mybatis-spring-boot作为spring-boot项目的持久层框架

    spring-boot中使用mybatis持久层框架与原spring项目使用方式和注解都不相同,需要依赖mybatis-spring-boot包

    1、引入mybatis和数据库及其他项目依赖

    1.1、引入mybatis依赖

    <!-- mybatis-spring-boot -->
    		<dependency>
    			<groupId>org.mybatis.spring.boot</groupId>
    			<artifactId>mybatis-spring-boot-starter</artifactId>
    			<version>1.1.1</version>
    		</dependency>

    1.2、引入mysql 驱动

    <!-- mysql-->
    		<dependency>
    			<groupId>mysql</groupId>
    			<artifactId>mysql-connector-java</artifactId>
    		</dependency>

    1.3、项目pom.xml一览

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    
    	<modelVersion>4.0.0</modelVersion>
    
    	<groupId>cn.eguid.carDeviceInfoSys</groupId>
    	<artifactId>carSys-web</artifactId>
    	<packaging>war</packaging>
    	<version>1.4.0-SNAPSHOT</version>
    	<name>carSys-web</name>
    
    	<parent>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-parent</artifactId>
    		<version>1.4.0.RELEASE</version>
    	</parent>
    
    	<dependencies>
    		<!-- spring-boot web -->
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    			<!--<exclusions> <exclusion> <groupId>org.springframework.boot</groupId> 
    				<artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> -->
    		</dependency>
    		<!-- spring aop -->
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-aop</artifactId>
    		</dependency>
    		<!-- mysql-->
    		<dependency>
    			<groupId>mysql</groupId>
    			<artifactId>mysql-connector-java</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-jdbc</artifactId>
    		</dependency>
    		<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
    		<dependency>
    			<groupId>redis.clients</groupId>
    			<artifactId>jedis</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    		</dependency>
    		<dependency>
    			<groupId>com.jayway.jsonpath</groupId>
    			<artifactId>json-path</artifactId>
    			<scope>test</scope>
    		</dependency>
    		<!-- mybatis-spring-boot -->
    		<dependency>
    			<groupId>org.mybatis.spring.boot</groupId>
    			<artifactId>mybatis-spring-boot-starter</artifactId>
    			<version>1.1.1</version>
    		</dependency>
    
    		<!-- fastjson -->
    		<dependency>
    			<groupId>com.alibaba</groupId>
    			<artifactId>fastjson</artifactId>
    			<version>1.2.17</version>
    		</dependency>
    		
    		<dependency>
    			<groupId>dom4j</groupId>
    			<artifactId>dom4j</artifactId>
    			<version>1.6.1</version>
    		</dependency>
    
    	</dependencies>
    
    	<profiles>
    		<profile>
    			<id>production</id>
    			<dependencies>
    				<!-- This sample is a test for the autoconfig when commons-pool is *absent*. 
    					In production it would be useful to enable pooling by using this dependency. -->
    				<dependency>
    					<groupId>commons-pool</groupId>
    					<artifactId>commons-pool</artifactId>
    					<type>pom.lastUpdated</type>
    				</dependency>
    			</dependencies>
    		</profile>
    	</profiles>
    
    	<!-- Package as an executable jar -->
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-maven-plugin</artifactId>
    			</plugin>
    		</plugins>
    	</build>
    	<repositories>
    		<repository>
    			<id>spring-releases</id>
    			<url>https://repo.spring.io/libs-release</url>
    		</repository>
    	</repositories>
    	<pluginRepositories>
    		<pluginRepository>
    			<id>spring-releases</id>
    			<url>https://repo.spring.io/libs-release</url>
    		</pluginRepository>
    	</pluginRepositories>
    </project>
    

    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注解声明该接口为mybatis的dao接口
    @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 {
    	/**
    	 * 实现SpringBootServletInitializer可以让spring-boot项目在web容器中运行
    	 */
    	@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


  • 相关阅读:
    增加一个基类没有的方法
    修改或加强基类的属性
    linux rm命令详解
    Apache的配置httpd.conf杂谈
    解决 You don't have permission to access / on this server. 错误的另一方法
    ubuntu下成功配置LAMP 并安装PHPMyadmin
    C#连接SQLite的方法
    内存使用大比拼 之 String – StringBuffer
    非常喜欢Gedit,绝不逊色EditPlus!
    关于内存
  • 原文地址:https://www.cnblogs.com/eguid/p/6821592.html
Copyright © 2011-2022 走看看