博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot 实战 (十三) | 整合 MyBatis (XML 版)
阅读量:5939 次
发布时间:2019-06-19

本文共 10441 字,大约阅读时间需要 34 分钟。

微信公众号:一个优秀的废人
如有问题或建议,请后台留言,我会尽力解决你的问题。

前言

如题,今天介绍 SpringBoot 与 Mybatis 的整合以及 Mybatis 的使用,之前介绍过了 SpringBoot 整合MyBatis 注解版的使用,上一篇介绍过 MyBatis 的理论,今天这篇就不介绍 MyBatis 的理论了,有兴趣的跳转阅读:

准备工作

  • SpringBoot 2.1.3
  • IDEA
  • JDK 8

创建表

CREATE TABLE `student`  (  `id` int(32) NOT NULL AUTO_INCREMENT,  `student_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '学号',  `name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '姓名',  `age` int(11) NULL DEFAULT NULL COMMENT '年龄',  `city` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '所在城市',  `dormitory` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '宿舍',  `major` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '专业',  PRIMARY KEY (`id`) USING BTREE)ENGINE=INNODB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8;

引入依赖

org.springframework.boot
spring-boot-starter-jdbc
org.springframework.boot
spring-boot-starter-web
org.mybatis.spring.boot
mybatis-spring-boot-starter
2.0.0
com.alibaba
druid
1.1.14
mysql
mysql-connector-java
5.1.47
runtime
com.github.pagehelper
pagehelper-spring-boot-starter
1.2.5
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
org.mybatis.generator
mybatis-generator-maven-plugin
1.3.2
${basedir}/src/main/resources/generator/generatorConfig.xml
true
true

代码解释很详细了,但这里提一嘴,mybatis generator 插件用于自动生成代码,pagehelper 插件用于物理分页。

项目配置

server:  port: 8080spring:    datasource:        name: test        url: jdbc:mysql://127.0.0.1:3306/test        username: root        password: 123456        #druid相关配置        type: com.alibaba.druid.pool.DruidDataSource        driver-class-name: com.mysql.jdbc.Driver        filters: stat        maxActive: 20        initialSize: 1        maxWait: 60000        minIdle: 1        timeBetweenEvictionRunsMillis: 60000        minEvictableIdleTimeMillis: 300000        validationQuery: select 'x'        testWhileIdle: true        testOnBorrow: false        testOnReturn: false        poolPreparedStatements: true        maxOpenPreparedStatements: 20## 该配置节点为独立的节点,有很多同学容易将这个配置放在spring的节点下,导致配置无法被识别mybatis:  mapper-locations: classpath:mapping/*.xml  #注意:一定要对应mapper映射xml文件的所在路径  type-aliases-package: com.nasus.mybatisxml.model  # 注意:对应实体类的路径#pagehelper分页插件pagehelper:    helperDialect: mysql    reasonable: true    supportMethodsArguments: true    params: count=countSql

mybatis generator 配置文件

这里要注意,配置 pom.xml 中 generator 插件所对应的配置文件时,在 Pom.xml 加入这一句,说明 generator 插件所对应的配置文件所对应的配置文件路径。这里已经在 Pom 中配置了,请见上面的 Pom 配置。

${basedir}/src/main/resources/generator/generatorConfig.xml

generatorConfig.xml :

代码注释很详细,不多说。

生成代码过程

第一步:选择编辑配置

添加配置

第二步:选择添加 Maven 配置

选择 Maven

第三步:添加命令 mybatis-generator:generate -e 点击确定

添加命令

第四步:运行该配置,生成代码

特别注意!!!同一张表一定不要运行多次,因为 mapper 的映射文件中会生成多次的代码,导致报错,切记。如要运行多次,请把上次生成的 mapper 映射文件代码删除再运行。

运行该配置

第五步:检查生成结果

生成的代码

遇到的问题

请参照别人写好的遇到问题的解决方法,其中我就遇到数据库时区不对以及只生成 Insert 方法这两个问题。都是看以下这篇文章解决的:

生成的代码

1、实体类:Student.java

package com.nasus.mybatisxml.model;public class Student {    private Long id;    private Integer age;    private String city;    private String dormitory;    private String major;    private String name;    private Long studentId;   // 省略 get 和 set 方法}

2、mapper 接口:StudentMapper.java

package com.nasus.mybatisxml.mapper;import com.nasus.mybatisxml.model.Student;import java.util.List;import org.apache.ibatis.annotations.Mapper;@Mapperpublic interface StudentMapper {    int deleteByPrimaryKey(Long id);    int insert(Student record);    int insertSelective(Student record);    Student selectByPrimaryKey(Long id);    // 我添加的方法,相应的要在映射文件中添加此方法    List
selectStudents(); int updateByPrimaryKeySelective(Student record); int updateByPrimaryKey(Student record);}

3、映射文件:StudentMapper.xml

id, age, city, dormitory, major, name, student_id
delete from student where id = #{id,jdbcType=BIGINT}
insert into student (id, age, city, dormitory, major, name, student_id) values (#{id,jdbcType=BIGINT}, #{age,jdbcType=INTEGER}, #{city,jdbcType=VARCHAR}, #{dormitory,jdbcType=VARCHAR}, #{major,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{studentId,jdbcType=BIGINT})
insert into student
id,
age,
city,
dormitory,
major,
name,
student_id,
#{id,jdbcType=BIGINT},
#{age,jdbcType=INTEGER},
#{city,jdbcType=VARCHAR},
#{dormitory,jdbcType=VARCHAR},
#{major,jdbcType=VARCHAR},
#{name,jdbcType=VARCHAR},
#{studentId,jdbcType=BIGINT},
update student
age = #{age,jdbcType=INTEGER},
city = #{city,jdbcType=VARCHAR},
dormitory = #{dormitory,jdbcType=VARCHAR},
major = #{major,jdbcType=VARCHAR},
name = #{name,jdbcType=VARCHAR},
student_id = #{studentId,jdbcType=BIGINT},
where id = #{id,jdbcType=BIGINT}
update student set age = #{age,jdbcType=INTEGER}, city = #{city,jdbcType=VARCHAR}, dormitory = #{dormitory,jdbcType=VARCHAR}, major = #{major,jdbcType=VARCHAR}, name = #{name,jdbcType=VARCHAR}, student_id = #{studentId,jdbcType=BIGINT} where id = #{id,jdbcType=BIGINT}

serviec 层

1、接口:

public interface StudentService {    int addStudent(Student student);    Student findStudentById(Long id);    PageInfo
findAllStudent(int pageNum, int pageSize);}

2、实现类

@Servicepublic class StudentServiceImpl implements StudentService{    //会报错,不影响    @Resource    private StudentMapper studentMapper;    /**     * 添加学生信息     * @param student     * @return     */    @Override    public int addStudent(Student student) {        return studentMapper.insert(student);    }    /**     * 根据 id 查询学生信息     * @param id     * @return     */    @Override    public Student findStudentById(Long id) {        return studentMapper.selectByPrimaryKey(id);    }    /**     * 查询所有学生信息并分页     * @param pageNum     * @param pageSize     * @return     */    @Override    public PageInfo
findAllStudent(int pageNum, int pageSize) { //将参数传给这个方法就可以实现物理分页了,非常简单。 PageHelper.startPage(pageNum, pageSize); List
studentList = studentMapper.selectStudents(); PageInfo result = new PageInfo(studentList); return result; }}

controller 层

@RestController@RequestMapping("/student")public class StudentController {    @Autowired    private StudentService studentService;    @GetMapping("/{id}")    public Student findStidentById(@PathVariable("id") Long id){        return studentService.findStudentById(id);    }    @PostMapping("/add")    public int insertStudent(@RequestBody Student student){        return studentService.addStudent(student);    }    @GetMapping("/list")    public PageInfo
findStudentList(@RequestParam(name = "pageNum", required = false, defaultValue = "1") int pageNum, @RequestParam(name = "pageSize", required = false, defaultValue = "10") int pageSize){ return studentService.findAllStudent(pageNum,pageSize); }}

启动类

@SpringBootApplication@MapperScan("com.nasus.mybatisxml.mapper") // 扫描 mapper 接口,必须加上public class MybatisxmlApplication {    public static void main(String[] args) {        SpringApplication.run(MybatisxmlApplication.class, args);    }}

提一嘴,@MapperScan("com.nasus.mybatisxml.mappe") 这个注解非常的关键,这个对应了项目中 mapper(dao) 所对应的包路径,必须加上,否则会导致异常。

Postman 测试

1、插入方法:

插入方法结果

2、根据 id 查询方法:

根据 id 查询结果

3、分页查询方法:

分页查询结果

源码下载

帮忙点个 star 可好?

后语

如果本文对你哪怕有一丁点帮助,请帮忙点好看。你的好看是我坚持写作的动力。

另外,关注之后在发送 1024 可领取免费学习资料。资料内容详情请看这篇旧文:

一个优秀的废人

转载地址:http://sdqtx.baihongyu.com/

你可能感兴趣的文章
006-spring cloud gateway-GatewayAutoConfiguration核心配置-GatewayProperties初始化加载、Route初始化加载...
查看>>
WPF中如何将ListViewItem双击事件绑定到Command
查看>>
《聚散两依依》
查看>>
小tips:你不知道的 npm init
查看>>
Mac笔记本中是用Idea开发工具在Java项目中调用python脚本遇到的环境变量问题解决...
查看>>
Jmeter也能IP欺骗!
查看>>
Rust 阴阳谜题,及纯基于代码的分析与化简
查看>>
ASP.NET Core的身份认证框架IdentityServer4(4)- 支持的规范
查看>>
(原創) array可以使用reference方式傳進function嗎? (C/C++)
查看>>
170多个Ionic Framework学习资源(转载)
查看>>
Azure:不能把同一个certificate同时用于Azure Management和RDP
查看>>
Directx11教程(15) D3D11管线(4)
查看>>
Microsoft Excel软件打开文件出现文件的格式与文件扩展名指定格式不一致?
查看>>
ios ble 参考
查看>>
[转]Pass a ViewBag instance to a HiddenFor field in Razor
查看>>
linux中注册系统服务—service命令的原理通俗
查看>>
基于托管C++的增删改查及异步回调小程序
查看>>
Oracle DBMS_STATS 包 和 Analyze 命令的区别
查看>>
给Visual Studio 2010中文版添加Windows Phone 7模板
查看>>
linux下基本命令
查看>>