Java--SpringBoot-33-Mybatis-1-入门增删改查

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 什么是 MyBatis? MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。

什么是 MyBatis?

       MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。


       ORM(Object relational mapping)类型框架的数据库操作发展到如今,我觉得就是两种分支,一种是以Hibernate为首的动态生成sql语句,可以少写代码,可移植性高,一种就是以Mybatis为首的纯sql操作,方言支持性差导致移植性差,但是运行效率高,灵活性高。两种各有优势,今天来看下在SpringBoot中集成Mybatis框架。


       创建好一个新项目后,按照以下流程添加代码:


一、pom依赖


<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="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/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.xing</groupId><artifactId>springBootMybatis</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>springBootMybatis</name><description>MybatisprojectforSpringBoot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.5.RELEASE</version><relativePath/></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.15</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

       以上依赖没啥说的,正确导入即可。


二、建立实体,对应表字段


packagecom.xing.entity;
...
/*** 实体*/@DatapublicclassUserEntity {
privateIntegerid;
privateStringuserName;
privateStringpassWord;
privateStringrealName;
getsettoString    ...
}



三、mapper接口


packagecom.xing.mapper;
importcom.xing.entity.UserEntity;
importorg.apache.ibatis.annotations.*;
importorg.springframework.stereotype.Repository;
importjava.util.List;
/*** 面向接口*/@RepositorypublicinterfaceUserMapper {
UserEntitygetOne(intid);
@Select("SELECT * FROM user")
List<UserEntity>getAll();
@Select("SELECT * FROM user WHERE id = #{id}")
@Results({
@Result(property="id",  column="id"),
@Result(property="userName", column="userName")
    })
UserEntitygetOneById(Integerid);
@Insert("INSERT INTO user(id, userName, passWord, realName) VALUES(#{id}, #{userName}, #{passWord}, #{realName})")
voidinsert(UserEntityuser);
@Update("UPDATE user SET id=#{id},userName=#{userName},passWord=#{passWord},realName=#{realName} WHERE id =#{id}")
voidupdate(UserEntityuser);
@Delete("DELETE FROM user WHERE id =#{id}")
voiddelete(Integerid);
}

       此处是新建了一个接口,我们可以使用注解来编写SQL语句,也可以使用xml来映射对应的接口方法,如果不使用注解,比如下面这个方法并没有注解SQL语句,我们把语句写到xml配置中。

UserEntity getOne(int id);

resources包下建UserMapper.xml

<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.xing.mapper.UserMapper"><resultMapid="BaseResultMap"type="com.xing.entity.UserEntity"><resultcolumn="id"jdbcType="INTEGER"property="id"/><resultcolumn="userName"jdbcType="VARCHAR"property="userName"/><resultcolumn="passWord"jdbcType="VARCHAR"property="passWord"/><resultcolumn="realName"jdbcType="VARCHAR"property="realName"/></resultMap><selectid="getOne"resultType="com.xing.entity.UserEntity">select*fromuserwhereid=#{id}
</select></mapper>

可以看到id="getOne" 和getOne(int id) 是一样的,通过映射可以建立关联关系。其他的使用了注解的就不需要了。


四、配置文件也贴一下:

server:
port: 8080spring:
datasource:
username: 用户名password: 密码url: jdbc:mysql://localhost:3306/xinghua?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTCdriver-class-name: com.mysql.cj.jdbc.Drivermybatis:
mapper-locations: classpath:mapping/*Mapper.xmltype-aliases-package: com.xing.entity#showSqllogging:level:com:example:mapper : debug


五、将mapper扫描成组件

packagecom.xing;
importorg.mybatis.spring.annotation.MapperScan;
importorg.springframework.boot.SpringApplication;
importorg.springframework.boot.autoconfigure.SpringBootApplication;
@MapperScan("com.xing.mapper")
@SpringBootApplicationpublicclassApplication {
publicstaticvoidmain(String[] args) {
SpringApplication.run(Application.class, args);
  }
}


这里@MapperScan("com.xing.mapper")注解可以把mapper包下所有的接口扫描到,当然也可以设置多个:

@MapperScan({"com.xing.mapper1","com.xing.mapper2"})

我们也可以直接在Mapper接口类上面添加注解@Mapper,这种方式要求每一个mapper接口类都需要添加此注解,所以还是配置扫描的方式最好。


六、写个controller测试下,也可以写单元测试,我还是习惯接口测试

packagecom.xing.controller;
importcom.xing.entity.UserEntity;
importcom.xing.mapper.UserMapper;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.web.bind.annotation.*;
/*** 控制类*/@RestController@RequestMapping("/user")
publicclassUserController {
finalUserMapperuserMapper;
@AutowiredpublicUserController(UserMapperuserMapper) {
this.userMapper=userMapper;
    }
/*** 根据id获取一个user* @param id id* @return user*/@RequestMapping("/getOneById/{id}")
publicStringgetOneById(@PathVariableintid){
returnuserMapper.getOne(id).toString();
    }
/***  获取全部* @return user list*/@RequestMapping("/getAll")
publicStringgetAll(){
returnuserMapper.getAll().toString();
    }
/*** 新增* @param user user* @return ok*/@PostMapping("/insert")
publicStringinsert(@RequestBodyUserEntityuser){
userMapper.insert(user);
return"ok";
    }
/***  更新* @param user user* @return ok*/@PostMapping("/update")
publicStringupdate(@RequestBodyUserEntityuser){
userMapper.update(user);
return"update ok";
    }
/***  删除* @param id id* @return ok*/@RequestMapping("/delete/{id}")
publicStringdelete(@PathVariableintid){
userMapper.delete(id);
return"ok";
    }
}


七、测试效果

新增:

http://127.0.0.1:8080/user/insert{
"id":3,
"userName":"苍老师",
"passWord":"69",
"realName":"苍井空"}

image.png

更新下user

image.png

查一下:

image.png

删一下:

http://127.0.0.1:8080/user/delete/222


总结:

       SpringBoot中集成Mybatis并使用简单的增删改查。


源码:

      https://github.com/debugxingHua/SpringBootSome.git


END

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3天前
|
Java 数据库连接 测试技术
MyBatis-Plus入门
MyBatis-Plus入门
|
3天前
|
算法 Java C++
刷题两个月,从入门到字节跳动offer丨GitHub标星16k+,美团Java面试题
刷题两个月,从入门到字节跳动offer丨GitHub标星16k+,美团Java面试题
|
3天前
|
算法 Java Python
保姆级Java入门练习教程,附代码讲解,小白零基础入门必备
保姆级Java入门练习教程,附代码讲解,小白零基础入门必备
|
4天前
|
SQL Java 数据库连接
【JavaEE】懒人的福音-MyBatis框架—[单表]增删改查等常规操作(下)
【JavaEE】懒人的福音-MyBatis框架—[单表]增删改查等常规操作
7 0
|
4天前
|
SQL 前端开发 Java
【JavaEE】懒人的福音-MyBatis框架—[单表]增删改查等常规操作(上)
【JavaEE】懒人的福音-MyBatis框架—[单表]增删改查等常规操作
8 0
|
4天前
|
SQL Java 关系型数据库
零基础轻松入门Java数据库连接(JDBC)
零基础轻松入门Java数据库连接(JDBC)
13 0
|
4天前
|
存储 安全 算法
Java一分钟之-Java集合框架入门:List接口与ArrayList
【5月更文挑战第10天】本文介绍了Java集合框架中的`List`接口和`ArrayList`实现类。`List`是有序集合,支持元素重复并能按索引访问。核心方法包括添加、删除、获取和设置元素。`ArrayList`基于动态数组,提供高效随机访问和自动扩容,但非线程安全。文章讨论了三个常见问题:索引越界、遍历时修改集合和并发修改,并给出避免策略。通过示例代码展示了基本操作和安全遍历删除。理解并正确使用`List`和`ArrayList`能提升程序效率和稳定性。
11 0
|
4天前
|
Java API 开发工具
java与Android开发入门指南
java与Android开发入门指南
16 0
|
4天前
|
Java
Java一分钟之-类与对象:面向对象编程入门
【5月更文挑战第8天】本文为Java面向对象编程的入门指南,介绍了类与对象的基础概念、常见问题及规避策略。文章通过代码示例展示了如何定义类,包括访问修饰符的适当使用、构造器的设计以及方法的封装。同时,讨论了对象创建与使用时可能遇到的内存泄漏、空指针异常和数据不一致等问题,并提供了相应的解决建议。学习OOP需注重理论与实践相结合,不断编写和优化代码。
30 1
|
4天前
|
Java 编译器 对象存储
java一分钟之Java入门:认识JDK与JVM
【5月更文挑战第7天】本文介绍了Java编程的基础——JDK和JVM。JDK是包含编译器、运行时环境、类库等的开发工具包,而JVM是Java平台的核心,负责执行字节码并实现跨平台运行。常见问题包括版本不匹配、环境变量配置错误、内存溢出和线程死锁。解决办法包括选择合适JDK版本、正确配置环境变量、调整JVM内存参数和避免线程死锁。通过代码示例展示了JVM内存管理和基本Java程序结构,帮助初学者更好地理解JDK和JVM在Java编程中的作用。
22 0