spring boot和mybatis整合模板

本文详细介绍如何在SpringBoot项目中整合MyBatis,包括配置generatorConfig.xml自动生成代码、pom.xml依赖设置、application.properties配置及各组件实现。

目录

 

1.新建模块或项目

 2.修改pom.xml

2.1在标签中添加如下内容:至于为什么因为后面generatorConfig.xml文件会用到${entity.target.dir}和${dao.resources.dir}

2.2在标签中添加如下内容

3.在src/main/resources文件中添加generatorConfig.xml文件

4.application.properties文件配置

5.controller,service,serviceimpl,DeptMapper,Mapper.xml以及主类如下

5.1DeptController.java

5.2DeptService

5.3DeptServiceImpl

5.4主类(记得添加mapperScan注解)

5.5DeptMapper

5.6DeptMapper.xml

6.测试

7.总结

7.1项目搭建思路和步骤:

7.2注意:

7.3spring boot如何找到各种类和接口


1.新建模块或项目

选择依赖:

1.Web  -->spring web starter

2.SQL  -->Mysql Driver,JDBC API,Mybatis framework

如下图:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<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>2.1.0</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

 2.修改pom.xml

2.1在<properties>标签中添加如下内容:至于为什么因为后面generatorConfig.xml文件会用到${entity.target.dir}和${dao.resources.dir}

<entity.target.dir>src/main/java/</entity.target.dir>
<dao.resources.dir>src/main/resources/</dao.resources.dir>

2.2在<plugins>标签中添加如下内容

<plugin>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-maven-plugin</artifactId>
    <version>1.3.6</version>
    <configuration>
        <!-- 是否覆盖,true表示会替换生成的JAVA文件,false则不覆盖 -->
        <overwrite>true</overwrite>
    </configuration>
    <dependencies>
        <!--mysql驱动包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.45</version>
        </dependency>
    </dependencies>
</plugin>

3.在src/main/resources文件中添加generatorConfig.xml文件

一共有五处需要修改,我都标出来了

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <context id="DB2Tables" targetRuntime="MyBatis3" defaultModelType="flat">
        <plugin type="org.mybatis.generator.plugins.RenameExampleClassPlugin">
            <property name="searchString" value="[e|E]xample$" />
            <property name="replaceString" value="Criteria" />
        </plugin>

        <commentGenerator>
            <property name="suppressDate" value="true" />
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>

        <!--*******************1.连接数据库,需要修改************************-->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/test" userId="root"
                        password="666666">
        </jdbcConnection>

        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>
        
        <!--*******************2.需要修改targetPackage实体所在包************************-->
        <javaModelGenerator targetPackage="com.mqb.providerdept.entity"
                            targetProject="${entity.target.dir}">
            <property name="enableSubPackages" value="true" />
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <!--*******************3.需要修改targetPackage为mapper.xml生成位置************************-->
        <sqlMapGenerator  targetPackage="mapper"
                          targetProject="${dao.resources.dir}" >
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>

        <!--*******************4.需要修改targetPackage为mapper接口的包************************-->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.mqb.providerdept.mapper"
                             targetProject="${entity.target.dir}">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>
        
        <!--*******************5.需要修改表名和对应类名************************-->
        <table tableName="dept" domainObjectName="Dept" enableCountByExample="false"
               enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>

    </context>
</generatorConfiguration>

我的工程结构(注意:截图是最终结构,可以按照这个结构来构建):

数据库表设计:

CREATE TABLE `dept` (
  `dept_id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(10) NOT NULL,
  `db_source` varchar(30) NOT NULL,
  PRIMARY KEY (`dept_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8

接下来我们配置完pom.xml后打开maven project。可以看到多了一个插件,点击即可逆向生产相应代码

一共生成三类文件 :entity,mapper接口和mapper.xml文件,如下:

4.application.properties文件配置

server.port=80

##mybatis路径配置。注意config-locations路径之间用/
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=classpath:com.mqb.providerdept.entity

##数据源配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=666666

logging.level.com.example.mapper=debug

5.controller,service,serviceimpl,DeptMapper,Mapper.xml以及主类如下

5.1DeptController.java

package com.mqb.providerdept.controller;

import com.mqb.providerdept.entity.Dept;
import com.mqb.providerdept.service.DeptService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;

@Controller
public class DeptController {

    private static final Logger log = LoggerFactory.getLogger(DeptController.class);

    @Resource
    private DeptService deptService;

    @RequestMapping("/getDept/{id}")
    @ResponseBody
    public Dept getDept(@PathVariable("id") Long deptId){
        System.out.println(deptId);
        return deptService.getDeptById(deptId);
    }

}

5.2DeptService

package com.mqb.providerdept.service;

import com.mqb.providerdept.entity.Dept;

public interface DeptService {
    public Dept getDeptById(Long deptId);
}

5.3DeptServiceImpl

package com.mqb.providerdept.service.impl;

import com.mqb.providerdept.entity.Dept;
import com.mqb.providerdept.mapper.DeptMapper;
import com.mqb.providerdept.service.DeptService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;

@Service
public class DeptServiceImpl implements DeptService{

    @Resource
    private DeptMapper deptMapper;

    @Override
    public Dept getDeptById(Long deptId) {
        System.out.println(deptId);
        Dept dept = new Dept();
        dept=deptMapper.selectByPrimaryKey(deptId);
        System.out.println(dept);
        return dept;
    }
}

5.4主类(记得添加mapperScan注解)

@SpringBootApplication
@MapperScan("com.mqb.providerdept.mapper")
public class SpringCloudProviderDeptApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringCloudProviderDeptApplication.class, args);
	}

}

5.5DeptMapper

package com.mqb.providerdept.mapper;

import com.mqb.providerdept.entity.Dept;
import org.apache.ibatis.annotations.Select;

public interface DeptMapper {
    int deleteByPrimaryKey(Long deptId);

    int insert(Dept record);

    int insertSelective(Dept record);
    
    Dept selectByPrimaryKey(Long deptId);

    int updateByPrimaryKeySelective(Dept record);

    int updateByPrimaryKey(Dept record);
}

5.6DeptMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mqb.providerdept.mapper.DeptMapper">
  <resultMap id="BaseResultMap" type="com.mqb.providerdept.entity.Dept">
    <id column="dept_id" jdbcType="BIGINT" property="deptId" />
    <result column="name" jdbcType="VARCHAR" property="name" />
    <result column="db_source" jdbcType="VARCHAR" property="dbSource" />
  </resultMap>
  <sql id="Base_Column_List">
    dept_id, name, db_source
  </sql>
  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
    select 
    <include refid="Base_Column_List" />
    from dept
    where dept_id = #{deptId,jdbcType=BIGINT}
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
    delete from dept
    where dept_id = #{deptId,jdbcType=BIGINT}
  </delete>
  <insert id="insert" parameterType="com.mqb.providerdept.entity.Dept">
    insert into dept (dept_id, name, db_source
      )
    values (#{deptId,jdbcType=BIGINT}, #{name,jdbcType=VARCHAR}, #{dbSource,jdbcType=VARCHAR}
      )
  </insert>
  <insert id="insertSelective" parameterType="com.mqb.providerdept.entity.Dept">
    insert into dept
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="deptId != null">
        dept_id,
      </if>
      <if test="name != null">
        name,
      </if>
      <if test="dbSource != null">
        db_source,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
      <if test="deptId != null">
        #{deptId,jdbcType=BIGINT},
      </if>
      <if test="name != null">
        #{name,jdbcType=VARCHAR},
      </if>
      <if test="dbSource != null">
        #{dbSource,jdbcType=VARCHAR},
      </if>
    </trim>
  </insert>
  <update id="updateByPrimaryKeySelective" parameterType="com.mqb.providerdept.entity.Dept">
    update dept
    <set>
      <if test="name != null">
        name = #{name,jdbcType=VARCHAR},
      </if>
      <if test="dbSource != null">
        db_source = #{dbSource,jdbcType=VARCHAR},
      </if>
    </set>
    where dept_id = #{deptId,jdbcType=BIGINT}
  </update>
  <update id="updateByPrimaryKey" parameterType="com.mqb.providerdept.entity.Dept">
    update dept
    set name = #{name,jdbcType=VARCHAR},
      db_source = #{dbSource,jdbcType=VARCHAR}
    where dept_id = #{deptId,jdbcType=BIGINT}
  </update>
</mapper>

6.测试

浏览器输入:localhost:80/getDept/1

7.总结

7.1项目搭建思路和步骤:

1.配置好generatorConfig.xml文件和设计数据库

2.maven project--generator生成entity,mapper接口,mapper.xml文件。

3.配置application.properties文件:端口,mybatis相关配置,数据源配置

4.controller,service,serviceImpl和主类添加@MapperScan()注解

7.2注意:

和mapper有关的配置一共有三个

1.主类的@MapperScan()注解

2.application.properties中mybatis.mapper-locations配置

3.mapper.xml中namespace标签

容易搞混的是1和3。1是所有mapper接口所在的包,而3中namespace是指这个mapper.xml对应的mapper接口,是一个类的全路径。所以这三者不一样,缺一不可。

7.3spring boot如何找到各种类和接口

controller:类:@controller注解。方法:@RequestMapping注解(经常和@ResponseBody搭配)。

service接口:被serviceImpl实现。

serviceImpl:类:@Service注解。在controller中使用@Autowired或@Resource注解注入该类的对象。

mapper接口:通过主类的@MapperScan注解定位。在serviceImpl中也是使用@Autowired或@Resource注解注入对象。

mapper.xml:application.propertie的mybatis.mapper-locations配置确定了所有mapper.xml的范围,接下来在这个范围中查找namespace匹配mapper接口全路径的mapper.xml并执行相应的sql语句。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值