前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Boot入门系列(六)Spring Boot整合Mybatis「附详细步骤」

Spring Boot入门系列(六)Spring Boot整合Mybatis「附详细步骤」

作者头像
架构师精进
发布2020-03-19 16:01:58
7300
发布2020-03-19 16:01:58
举报
文章被收录于专栏:公众号文章公众号文章

前面介绍了Spring Boot 中的整合Thymeleaf前端html框架,同时也介绍了Thymeleaf 的用法。

今天主要讲解Springboot整合Mybatis实现一个最基本的增删改查功能。Spring Boot整合Mybatis的方式有两种:一种是注解形式的,也就是没有Mapper.xml文件,还有一种是XML形式的,我推荐的是使用注解形式,为什么呢?因为更加的简介,减少不必要的错误。

一、整合Mybatis

第一步:数据库新建Person表

这个表结构很简单,就是普通的用户表。

代码语言:javascript
复制
CREATE TABLE `sys_user` (  `id` varchar(32) NOT NULL DEFAULT '',  `username` varchar(32) DEFAULT NULL,  `password` varchar(64) DEFAULT NULL,  `nickname` varchar(64) DEFAULT NULL,  `age` int(11) DEFAULT NULL,  `sex` int(11) DEFAULT NULL,  `job` int(11) DEFAULT NULL,  `face_image` varchar(6000) DEFAULT NULL,  `province` varchar(64) DEFAULT NULL,  `city` varchar(64) DEFAULT NULL,  `district` varchar(64) DEFAULT NULL,  `address` varchar(255) DEFAULT NULL,  `auth_salt` varchar(64) DEFAULT NULL,  `last_login_ip` varchar(64) DEFAULT NULL,  `last_login_time` datetime DEFAULT NULL,  `is_delete` int(11) DEFAULT NULL,  `regist_time` datetime DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;

第二步:增加mybatis相关依赖

我们只需要加上pom.xml文件这些依赖即可。

代码语言:javascript
复制
  <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>            <version>5.1.41</version>        </dependency>        <!--mybatis-->        <dependency>            <groupId>org.mybatis.spring.boot</groupId>            <artifactId>mybatis-spring-boot-starter</artifactId>            <version>1.3.1</version>        </dependency>        <!--mapper-->        <dependency>            <groupId>tk.mybatis</groupId>            <artifactId>mapper-spring-boot-starter</artifactId>            <version>1.2.4</version>        </dependency>        <!-- pagehelper -->        <dependency>            <groupId>com.github.pagehelper</groupId>            <artifactId>pagehelper-spring-boot-starter</artifactId>            <version>1.2.3</version>        </dependency>        <!-- druid 数据库连接框架-->        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>druid-spring-boot-starter</artifactId>            <version>1.1.9</version>        </dependency>        <dependency>            <groupId>org.mybatis.generator</groupId>            <artifactId>mybatis-generator-core</artifactId>            <version>1.3.2</version>            <scope>compile</scope>            <optional>true</optional>        </dependency>

第三步:增加统一的mapper接口

代码语言:javascript
复制
在utils包中创建一个统一的mapper接口,

后面所有的mapper类都会继承这个接口

代码语言:javascript
复制
package com.weiz.utils;
import tk.mybatis.mapper.common.Mapper;import tk.mybatis.mapper.common.MySqlMapper;
/** * 继承自己的MyMapper * * @author weiz * @since 2019-09-06 21:53 */public interface MyMapper<T> extends Mapper<T>, MySqlMapper<T> {    //TODO    //FIXME 特别注意,该接口不能被扫描到,否则会出错}
代码语言:javascript
复制
特别注意:该接口不能被扫描到,否则会出错。所以我把这个接口放在了utils包中。

第四步:更改application.properties配置文件

主要是mybatis相关的数据库配置。

代码语言:javascript
复制
############################################################# 数据源相关配置,这里用的是阿里的druid 数据源############################################################spring.datasource.url=jdbc:mysql://localhost:3306/zwz_testspring.datasource.username=rootspring.datasource.password=rootspring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.datasource.druid.initial-size=1spring.datasource.druid.min-idle=1spring.datasource.druid.max-active=20spring.datasource.druid.test-on-borrow=truespring.datasource.druid.stat-view-servlet.allow=true
############################################################# mybatis 相关配置############################################################mybatis.type-aliases-package=com.weiz.pojomybatis.mapper-locations=classpath:mapper/*.xmlmapper.mappers=com.weiz.utils.MyMapper    #这个MyMapper 就是我之前创建的mapper统一接口。后面所有的mapper类都会继承这个接口mapper.not-empty=falsemapper.identity=MYSQL# 分页框架pagehelper.helperDialect=mysqlpagehelper.reasonable=truepagehelper.supportMethodsArguments=truepagehelper.params=count=countSql

这里的配置有点多,不过最基本的配置都在这。

二、代码自动生成工具

Spring Boot有mybatis generator自动生成代码插件,能自动生成pojo实体类、接口、mapper.xml 文件,提高开发效率。这里就不介绍怎么安装使用mybatis generator插件。介绍一个简单的GeneratorDisplay自动生成类。

第五步:创建GeneratorDisplay类

代码语言:javascript
复制
package com.weiz.utils;
import java.io.File;import java.util.ArrayList;import java.util.List;
import org.mybatis.generator.api.MyBatisGenerator;import org.mybatis.generator.config.Configuration;import org.mybatis.generator.config.xml.ConfigurationParser;import org.mybatis.generator.internal.DefaultShellCallback;
public class GeneratorDisplay {
    public void generator() throws Exception{
        List<String> warnings = new ArrayList<String>();        boolean overwrite = true;        //指定 逆向工程配置文件        File configFile = new File("generatorConfig.xml");         ConfigurationParser cp = new ConfigurationParser(warnings);        Configuration config = cp.parseConfiguration(configFile);        DefaultShellCallback callback = new DefaultShellCallback(overwrite);        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,                callback, warnings);        myBatisGenerator.generate(null);
    } 
    public static void main(String[] args) throws Exception {        try {            GeneratorDisplay generatorSqlmap = new GeneratorDisplay();            generatorSqlmap.generator();        } catch (Exception e) {            e.printStackTrace();        }
    }}

这个其实也是调用mybatis generator实现的。跟mybatis generator安装插件是一样的。

第六步:增加generatorConfig.xml配置文件

在resources文件下创建generatorConfig.xml文件,配置如下:

代码语言:javascript
复制
<?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="MysqlContext" targetRuntime="MyBatis3Simple" defaultModelType="flat">        <property name="beginningDelimiter" value="`"/>        <property name="endingDelimiter" value="`"/>
        <plugin type="tk.mybatis.mapper.generator.MapperPlugin">            <property name="mappers" value="com.weiz.utils.MyMapper"/>        </plugin>     <!-- 数据库连接配置-->         <jdbcConnection driverClass="com.mysql.jdbc.Driver"                        connectionURL="jdbc:mysql://localhost:3306/zwz_test"                        userId="root"                        password="root">        </jdbcConnection>
        <!-- 对于生成的pojo所在包 -->        <javaModelGenerator targetPackage="com.weiz.pojo" targetProject="src/main/java"/>
        <!-- 对于生成的mapper所在目录 -->        <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"/>
        <!-- 配置mapper对应的java映射 -->        <javaClientGenerator targetPackage="com.weiz.mapper" targetProject="src/main/java"                             type="XMLMAPPER"/>

        <table tableName="sys_user"></table>
    </context></generatorConfiguration>

注意:利用Mybatis Generator自动生成代码,对于已经存在的文件会存在覆盖和在原有文件上追加的可能性,不宜多次生成。如需重新生成,需要删除已生成的源文件。

第七步:Mybatis Generator自动生成代码

运行GeneratorDisplay 如下图所示,即可自动生成相关的代码。

第八步:在service包下创建UserService及UserServiceImpl接口实现类

1. 在com.weiz.service包中,创建UserService类

代码语言:javascript
复制
package com.weiz.service;
import com.weiz.pojo.SysUser;
import java.util.List;
public interface UserService {
    public void saveUser(SysUser user) throws Exception;
    public void updateUser(SysUser user);
    public void deleteUser(String userId);
    public SysUser queryUserById(String userId);
    public List<SysUser> queryUserList(SysUser user);
    public List<SysUser> queryUserListPaged(SysUser user, Integer page, Integer pageSize);public void saveUserTransactional(SysUser user);}
代码语言:javascript
复制
2. 在com.weiz.service.impl包中,创建UserServiceImpl实现类
代码语言:javascript
复制
package com.weiz.service.impl;
import com.github.pagehelper.PageHelper;import com.weiz.mapper.SysUserMapper;import com.weiz.mapper.SysUserMapperCustom;import com.weiz.pojo.SysUser;import com.weiz.service.UserService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import org.thymeleaf.util.StringUtils;import tk.mybatis.mapper.entity.Example;
import java.util.List;
@Servicepublic class UserServiceImpl implements UserService {
    @Autowired    private SysUserMapper userMapper;
    @Override    public void saveUser(SysUser user) throws Exception {        userMapper.insert(user);    }
    @Override    public void updateUser(SysUser user) {        userMapper.updateByPrimaryKeySelective(user);    }
    @Override    public void deleteUser(String userId) {        userMapper.deleteByPrimaryKey(userId);    }
    @Override    public SysUser queryUserById(String userId) {        return userMapper.selectByPrimaryKey(userId);    }
    @Override    public List<SysUser> queryUserList(SysUser user) {        return null;    }
    @Override    public List<SysUser> queryUserListPaged(SysUser user, Integer page, Integer pageSize) {     // 分页功能实现        PageHelper.startPage(page,pageSize);        Example example = new Example(SysUser.class);        Example.Criteria criteria = example.createCriteria();
        if (!StringUtils.isEmptyOrWhitespace(user.getUsername())) {            criteria.andLike("username", "%" + user.getUsername() + "%");        }
        if (!StringUtils.isEmptyOrWhitespace(user.getNickname())) {            criteria.andLike("nickname", "%" + user.getNickname() + "%");        }
        List<SysUser> userList = userMapper.selectByExample(example);
        return userList;    }
    @Override    public void saveUserTransactional(SysUser user) {
    }}

第九步:编写controller层,增加MybatisController控制器

代码语言:javascript
复制
package com.weiz.controller;
import com.weiz.utils.JSONResult;import com.weiz.pojo.SysUser;import com.weiz.service.UserService;import org.n3r.idworker.Sid;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;
import java.util.Date;import java.util.List;
@RestController@RequestMapping("mybatis")public class MyBatisCRUDController {
    @Autowired    private UserService userService;
    @Autowired    private Sid sid;
    @RequestMapping("/saveUser")    public JSONResult saveUser() throws Exception {     // 自动生成ID,也可以直接用uuid        String userId = sid.nextShort();
        SysUser user = new SysUser();        user.setId(userId);        user.setUsername("spring boot" + new Date());        user.setNickname("spring boot" + new Date());        user.setPassword("abc123");        user.setIsDelete(0);        user.setRegistTime(new Date());
        userService.saveUser(user);
        return JSONResult.ok("保存成功");    }
    @RequestMapping("/updateUser")    public JSONResult updateUser() {
        SysUser user = new SysUser();        user.setId("10011001");        user.setUsername("10011001-updated" + new Date());        user.setNickname("10011001-updated" + new Date());        user.setPassword("10011001-updated");        user.setIsDelete(0);        user.setRegistTime(new Date());
        userService.updateUser(user);
        return JSONResult.ok("保存成功");    }

    @RequestMapping("/deleteUser")    public JSONResult deleteUser(String userId) {
        userService.deleteUser(userId);
        return JSONResult.ok("删除成功");    }
    @RequestMapping("/queryUserById")    public JSONResult queryUserById(String userId) {
        return JSONResult.ok(userService.queryUserById(userId));    }
    @RequestMapping("/queryUserList")    public JSONResult queryUserList() {
        SysUser user = new SysUser();        user.setUsername("spring boot");        user.setNickname("lee");
        List<SysUser> userList = userService.queryUserList(user);
        return JSONResult.ok(userList);    }
    @RequestMapping("/queryUserListPaged")    public JSONResult queryUserListPaged(Integer page) {        if (page == null) {            page = 1;        }
        int pageSize = 10;
        SysUser user = new SysUser();
        List<SysUser> userList = userService.queryUserListPaged(user, page, pageSize);
        return JSONResult.ok(userList);    }
    @RequestMapping("/queryUserByIdCustom")    public JSONResult queryUserByIdCustom(String userId) {
        return JSONResult.ok(userService.queryUserByIdCustom(userId));    }
    @RequestMapping("/saveUserTransactional")    public JSONResult saveUserTransactional() {
        String userId = sid.nextShort();
        SysUser user = new SysUser();        user.setId(userId);        user.setUsername("lee" + new Date());        user.setNickname("lee" + new Date());        user.setPassword("abc123");        user.setIsDelete(0);        user.setRegistTime(new Date());
        userService.saveUserTransactional(user);
        return JSONResult.ok("保存成功");    }

}

第十步:在启动主类添加扫描器

在SpringBootStarterApplication 启动类中增加包扫描器。

代码语言:javascript
复制
@SpringBootApplication//扫描 mybatis mapper 包路径@MapperScan(basePackages = "com.weiz.mapper")     // 这一步别忘了。//扫描 所有需要的包, 包含一些自用的工具类包 所在的路径@ComponentScan(basePackages = {"com.weiz","org.n3r.idworker"})public class SpringBootStarterApplication {
    public static void main(String[] args) {        SpringApplication.run(SpringBootStarterApplication.class, args);    }
}

第十一步:测试

在浏览器输入controller里面定义的路径即可。只要你按照上面的步骤一步一步来,基本上就没问题,是不是特别简单。

最后

以上,就把Spring Boot整合Mybatis及实现增删改查介绍完了,Spring Boot 整合Mybatis 是整个Spring Boot 非常重要的功能,也是非常核心的基础功能,希望大家能够熟练掌握。后面会深入介绍Spring Boot的各个功能和用法。

这个系列课程的完整源码,也会提供给大家。大家关注我的微信公众号(架构师精进),回复:springboot源码。获取这个系列课程的完整源码。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 架构师精进 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、整合Mybatis
  • 二、代码自动生成工具
  • 最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档