spring-boot-route(八)整合mybatis操作数据库
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。
通过注解完成数据操作
第一步:引入mysql依赖和mybatis依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>LATEST</version>
</dependency>
第二步:新建学生表及对应的实体类
CREATE TABLE `student` (
`student_id` int(30) NOT NULL AUTO_INCREMENT,
`age` int(1) DEFAULT NULL COMMENT '年龄',
`name` varchar(45) DEFAULT NULL COMMENT '姓名',
`sex` int(1) DEFAULT NULL COMMENT '性别:1:男,2:女,0:未知',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`status` int(1) DEFAULT NULL COMMENT '状态:1:正常,-1:删除',
PRIMARY KEY (`student_id`)
) ENGINE=InnoDB AUTO_INCREMENT=617354 DEFAULT CHARSET=utf8mb4 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC COMMENT='学生表'
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student implements Serializable {
private static final long serialVersionUID = 6712540741269055064L;
private Integer studentId;
private Integer age;
private String name;
private Integer sex;
private Date createTime;
private Integer status;
}
第三步:配置数据库连接信息
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/simple_fast
username: root
password: root
增删改查
@Mapper
public interface StudentMapper {
@Select("select * from student where student_id = #{studentId}")
Student findById(@Param("studentId") Integer studentId);
@Insert("insert into student(age,name) values(#{age},#{name})")
int addStudent(@Param("name") String name,@Param("age") Integer age);
@Update("update student set name = #{name} where student_id = #{studentId}")
int updateStudent(@Param("studentId") Integer studentId,@Param("name") String name);
@Delete("delete from student where student_id = #{studentId}")
int deleteStudent(@Param("studentId") Integer studentId);
}
上面演示的传参方式是通过单个参数传递的,如果想通过Map或实体类传参数,就不需要使用@Param来绑定参数了,将map中的key或者实体类中的属性与sql中的参数值对应上就可以了。
通过XML配置完成数据操作
@Mapper和@MapperScan
@Mapper加在数据层接口上,将其注册到ioc容器上,@MapperScan加在启动类上,需要指定扫描的数据层接口包。如下:
@Mapper
public interface StudentMapper {}
@SpringBootApplication
@MapperScan("com.javatrip.mybatis.mapper")
public class MybatisApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisApplication.class, args);
}
}
两个注解的作用一样,在开发中为了方便,通常我们会使用@MapperScan。
指定mapper.xml的位置
mybatis:
mapper-locations: classpath:mybatis/*.xml
开启数据实体映射驼峰命名
mybatis:
configuration:
map-underscore-to-camel-case: true
编写xml和与之对应的mapper接口
<?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.javatrip.mybatis.mapper.StudentXMapper">
<select id="findById" resultType="com.javatrip.mybatis.entity.Student">
select * from student where student_id = #{studentId}
</select>
<insert id="addStudent" parameterType="com.javatrip.mybatis.entity.Student">
insert into student(name,age) values(#{name},#{age})
</insert>
<update id="updateStudent" parameterType="com.javatrip.mybatis.entity.Student">
update student set name = #{name} where student_id = #{studentId}
</update>
<delete id="deleteStudent" parameterType="Integer">
delete from student where student_id = #{studentId}
</delete>
</mapper>
@Mapper
public interface StudentXMapper {
Student findById(@Param("studentId") Integer studentId);
int addStudent(Student student);
int updateStudent(@Param("studentId") Integer studentId,@Param("name") String name);
int deleteStudent(@Param("studentId") Integer studentId);
}
编写测试类
@SpringBootTest
class MybatisApplicationTests {
@Autowired
StudentMapper mapper;
@Autowired
StudentXMapper xMapper;
@Test
void testMapper() {
Student student = mapper.findById(10);
mapper.addStudent("Java旅途",19);
mapper.deleteStudent(31);
mapper.updateStudent(10,"Java旅途");
}
@Test
void contextLoads() {
Student student = xMapper.findById(10);
Student studentDo = new Student();
studentDo.setAge(18);
studentDo.setName("Java旅途呀");
xMapper.addStudent(studentDo);
xMapper.deleteStudent(32);
xMapper.updateStudent(31,"Java旅途");
}
}
这里有几个需要注意的点:mapper标签中namespace属性对应的是mapper接口;select标签的id对应mapper接口中的方法名字;select标签的resultType对应查询的实体类,使用全路径。
此是spring-boot-route系列的第八篇文章,这个系列的文章都比较简单,主要目的就是为了帮助初次接触Spring Boot 的同学有一个系统的认识。本文已收录至我的github,欢迎各位小伙伴star!
github:https://github.com/binzh303/spring-boot-route
点关注、不迷路
如果觉得文章不错,欢迎关注、点赞、收藏,你们的支持是我创作的动力,感谢大家。
如果文章写的有问题,请不要吝啬,欢迎留言指出,我会及时核查修改。
如果你还想更加深入的了解我,可以微信搜索「Java旅途」进行关注。回复「1024」即可获得学习视频及精美电子书。每天7:30准时推送技术文章,让你的上班路不在孤独,而且每月还有送书活动,助你提升硬实力!
spring-boot-route(八)整合mybatis操作数据库的更多相关文章
- Spring Boot (八)MyBatis + Docker + MongoDB 4.x
一.MongoDB简介 1.1 MongoDB介绍 MongoDB是一个强大.灵活,且易于扩展的通用型数据库.MongoDB是C++编写的文档型数据库,有着丰富的关系型数据库的功能,并在4.0之后添加 ...
- SpringBoot 源码解析 (九)----- Spring Boot的核心能力 - 整合Mybatis
本篇我们在SpringBoot中整合Mybatis这个orm框架,毕竟分析一下其自动配置的源码,我们先来回顾一下以前Spring中是如何整合Mybatis的,大家可以看看我这篇文章Mybaits 源码 ...
- Spring Boot 框架下使用MyBatis访问数据库之基于XML配置的方式
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML ...
- spring boot 1.4 整合 mybatis druid
http://www.jianshu.com/p/cef49ad91ba9spring boot 1.4 整合 mybatis druid
- Spring Boot 2.x整合mybatis及druid数据源及逆向工程
1逆向工程 1)db.properties #============================# #===== Database sttings =====# #=============== ...
- SpringBoot 整合Mybatis操作数据库
1.引入依赖: <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId> ...
- Java Spring Boot VS .NetCore (四)数据库操作 Spring Data JPA vs EFCore
Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...
- kotlin + springboot整合mybatis操作mysql数据库及单元测试
项目mybatis操作数据库参考: http://how2j.cn/k/springboot/springboot-mybatis/1649.html?p=78908 junit对controller ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_3-1.整合Mybatis访问数据库和阿里巴巴数据源
笔记 1.整合Mybatis访问数据库和阿里巴巴数据源 简介:整合mysql 加入mybatis依赖,和加入alibaba druid数据源 1.加入依赖(可以用 http://start.s ...
随机推荐
- 23种设计模式 - 状态变化(Memento备忘录 - State)
其他设计模式 23种设计模式(C++) 每一种都有对应理解的相关代码示例 → Git原码 ⌨ 状态变化 在组件构建过程中,某些对象的状态经常面临变化,如何对这些变化进行有效的管理?同时又维持高层模块的 ...
- nginx配置过程中出现的问题
在安装nginx时我们先创建用户useradd -s /sbin/nologin -M nginx 不然会报nginx: [emerg] getpwnam("nginx") fai ...
- URL的字符编码
摘要: 在通过URL访问HTTP SERVER的时候,通常会产生trace callback的异常,返回505的错误," VERSION IS NOT SUPPORTED ?" , ...
- 【小白学PyTorch】4 构建模型三要素与权重初始化
文章目录: 目录 1 模型三要素 2 参数初始化 3 完整运行代码 4 尺寸计算与参数计算 1 模型三要素 三要素其实很简单 必须要继承nn.Module这个类,要让PyTorch知道这个类是一个Mo ...
- 修改linux操作系统的时间可以使用date指令 运维系统工程师必会技术
修改linux的时间可以使用date指令 修改日期: 时间设定成2009年5月10日的命令如下: date -s 05/10/2009 修改时间: 将系统时间设定成上午10点18分0秒的命令如下. d ...
- 虚拟机安装:VirtualBox上安装Ubuntu
在Win10 中使用VirtualBox安装Ubuntu 本教程将指引读者在Windows10操作系统下使用开源虚拟机软件VirtualBox安装Ubuntu,读者也可以使用其他虚拟机VMware W ...
- leetcode-双指针遍历
编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 char[] 的形式给出.不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的额外空间解决这一问题.你可以假设 ...
- node-vuecli 脚手架安装
1. vuecli 简介 Vue CLI 致力于将 Vue 生态中的工具基础标准化 Vue CLI 是一个基于 vue.js 进行快速开发的完整系统,是一个全局安装的 npm包,基于webpack构建 ...
- Playbook使用,编写YAML
YAML是什么? YAML是一个可读性高.用来表达数据序列的格式语言 YAML:YAML Ain't a Markup Language YAML以数据为中心,重点描述数据的关系和结构 YAML的格式 ...
- Spring AOP-用代理代替繁琐逻辑
Spring AOP 基础概念 AOP 是一种面向切面的编程思想,通俗来讲,这里假如我们有多个方法. @Component public class Demo { public void say1() ...