Spring Boot Mybatis简单使用
Spring Boot Mybatis简单使用
步骤说明
- build.gradle:依赖添加
- application.properties:配置添加
- 代码编写
- 测试
build.gradle:依赖添加
需要添加下面三个依赖:
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.0'
implementation 'mysql:mysql-connector-java'
}
application.properties:配置添加
配置文件的编写需要注意参数的配置,比如SSL那个一般要设置为false,driver-class-name也要注意一下,不要写错了,文件的大致内容如下:
mybatis.type-aliases-package=com.seckill.spring.mapper
spring.datasource.url=jdbc:mysql://10.33.8.189:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
代码编写
在入口函数添加Mapper扫描配置,这样不必在每个Mapper上加上Mapper注解,大致如下:
package com.seckill.spring;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.seckill.spring.mapper")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
编辑商品实体类,大致如下:
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.validation.constraints.Size;
@Entity
public class Goods {
public Goods(int id, String name, int amount) {
this.id = id;
this.name = name;
this.amount = amount;
}
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@Size(min = 1, max = 50)
private String name;
private int amount;
}
编写Mapper接口类,大致内容如下:
import com.seckill.spring.entity.Goods;
import org.apache.ibatis.annotations.*;
import java.util.List;
public interface GoodsMapper {
@Insert("INSERT INTO goods(name, amount) VALUES('${name}', #{amount})")
Integer insertGoods(@Param("name")String name, @Param("amount")Integer amount) throws Exception;
@Select("SELECT * FROM goods")
List<Goods> findAll();
@Select("SELECT * FROM goods WHERE id = #{id}")
Goods findById(@Param("id") Integer id);
@Update("UPDATE goods SET amount = #{goods.amount} WHERE id = #{goods.id}")
Integer updateGoods(@Param("goods") Goods goods) throws Exception;
@Delete("Delete FROM goods")
Integer deleteAll();
}
其中要注意的是$和#的用法,前者用于字符串变量,后者用于整型变量
// This example creates a prepared statement, something like select * from teacher where name = ?;
@Select("Select * from teacher where name = #{name}")
Teacher selectTeachForGivenName(@Param("name") String name);
// This example creates n inlined statement, something like select * from teacher where name = 'someName';
@Select("Select * from teacher where name = '${name}'")
Teacher selectTeachForGivenName(@Param("name") String name);
测试
测试还有些坑,不如类上面的注解应该如代码中的那样才有用,并且有时发现不了测试函数,需要去掉@Test注解,再重新添加后运行。大致打代码如下:
import com.seckill.spring.Application;
import com.seckill.spring.entity.Goods;
import com.seckill.spring.mapper.GoodsMapper;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.List;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(
classes = Application.class,
webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT
)
@DirtiesContext
public class GoodsMapperTest {
@Autowired
private GoodsMapper goodsMapper;
@Test
public void testAll() throws Exception {
goodsMapper.deleteAll();
Assert.assertEquals(0, goodsMapper.findAll().size());
Integer response = goodsMapper.insertGoods("good1", 1000);
Assert.assertEquals(1, response.intValue());
List<Goods> goods = goodsMapper.findAll();
Assert.assertEquals(1, goods.size());
int id = goods.get(0).getId();
Assert.assertNotNull(goodsMapper.findById(id));
Goods newGoods = new Goods(id, "good1", 100);
Assert.assertEquals(1, goodsMapper.updateGoods(newGoods).intValue());
Assert.assertEquals(100, goodsMapper.findById(id).getAmount());
}
}
参考链接
- Spring boot 启动报错-Reason Failed to determine a suitable driver class
- java连接mysql失败Path does not chain with any of the trust anchors
- SpringBoot+Mybatis框架项目的单元测试和集成测试(下)
- Spring Boot(六):如何优雅的使用 Mybatis
Spring Boot Mybatis简单使用的更多相关文章
- 快速搭建一个Spring Boot + MyBatis的开发框架
前言:Spring Boot的自动化配置确实非常强大,为了方便大家把项目迁移到Spring Boot,特意总结了一下如何快速搭建一个Spring Boot + MyBatis的简易文档,下面是简单的步 ...
- Spring Boot + Mybatis + Redis二级缓存开发指南
Spring Boot + Mybatis + Redis二级缓存开发指南 背景 Spring-Boot因其提供了各种开箱即用的插件,使得它成为了当今最为主流的Java Web开发框架之一.Mybat ...
- Spring boot Mybatis 整合(完整版)
个人开源项目 springboot+mybatis+thymeleaf+docker构建的个人站点开源项目(集成了个人主页.个人作品.个人博客) 朋友自制的springboot接口文档组件swagge ...
- Spring Boot项目简单上手+swagger配置+项目发布(可能是史上最详细的)
Spring Boot项目简单上手+swagger配置 1.项目实践 项目结构图 项目整体分为四部分:1.source code 2.sql-mapper 3.application.properti ...
- Spring Boot + MyBatis + Druid + Redis + Thymeleaf 整合小结
Spring Boot + MyBatis + Druid + Redis + Thymeleaf 整合小结 这两天闲着没事想利用**Spring Boot**加上阿里的开源数据连接池**Druid* ...
- Spring boot Mybatis整合构建Rest服务(超细版)
Springboot+ Mybatis+MySql整合构建Rest服务(涵盖增.删.改.查) 1.概要 1.1 为什么要使用Spring boot? 1.1.1 简单方便.配置少.整合了大多数框架 ...
- Spring boot Mybatis 整合(注解版)
之前写过一篇关于springboot 与 mybatis整合的博文,使用了一段时间spring-data-jpa,发现那种方式真的是太爽了,mybatis的xml的映射配置总觉得有点麻烦.接口定义和映 ...
- (45). Spring Boot MyBatis连接Mysql数据库【从零开始学Spring Boot】
大家在开发的时候,会喜欢jdbcTemplate操作数据库,有喜欢JPA操作数据库的,有喜欢MyBatis操作数据库的,对于这些我个人觉得哪个使用顺手就使用哪个就好了,并没有一定要使用哪个,个人在实际 ...
- Spring Boot MyBatis 数据库集群访问实现
Spring Boot MyBatis 数据库集群访问实现 本示例主要介绍了Spring Boot程序方式实现数据库集群访问,读库轮询方式实现负载均衡.阅读本示例前,建议你有AOP编程基础.mybat ...
随机推荐
- OI界的事
随时更新: 目前在中大型考试上已经因为freopen相关的锅导致此题爆零共有: 5次.并且因此参加不了提高组(菜到无人反驳) 本人:学oi半年的练习生)蒟蒻 ,擅长水红题,橙题,博客,以及电子方面. ...
- vue-cli3.0 环境变量与模式
vue-cli3.0移除了配置文件目录: config和build文件夹.可以说是非常的精简了,那移除了配置文件目录后如何自定义配置环境变量和模式呢? 为什么需要配置环境变量和模式呢? 所有方法肯定是 ...
- 微信小程序开发框架 Wepy 的使用
一.github地址:https://github.com/Tencent/wepy 按照 README.md 的步骤进行操作: 1.在“介绍”中获得 wepy 的开发资源汇总:https://git ...
- tensorflow.python.framework.errors_impl.PermissionDeniedError: /data; Permission denied
在linux系统中,tensorflow跑mnist数据集出现错误,本应该自动下载的数据集 将mnist自动下载的路径,由/data/mnist之前的/删掉即可.改为data/mnist.
- centos 7 + Net Core 3.0 + Docker 配置说明(不含https)
1.新建Core3.0项目 1.1 使用visual studio 2019 创建一个名为core3.web.httpapi 的"ASP.NET Core Web应用程序" 1.2 ...
- Microsoft Enterprise Library 5.0 系列教程(四) Logging Application Block
Download dll: http://www.microsoft.com/en-us/download/confirmation.aspx?id=15104 http://www.cnblogs. ...
- noi 统计前k大的数
描述 给定一个数组,统计前k大的数并且把这k个数从大到小输出. 输入 第一行包含一个整数n,表示数组的大小.n < 100000. 第二行包含n个整数,表示数组的元素,整数之间以一个空格分开.每 ...
- 为orangepi zero编译安装nginx记录
使用的系统是armbian 1.下载nginx源代码 wget http://nginx.org/download/nginx-1.17.0.tar.gz 2.解压nginx源代码 tar xvzf ...
- Mac下Tomcat安装&配置&80默认端口设置
序言: 在学习Tomcat时, 部署虚拟服务主机时,遇到了无响应的情况.原以为是应为Tomcat默认端口8080在调整至(进行端口转发设置)默认端口80会和Mac自带Apache起冲突.但是也有同学使 ...
- Navicat Premium 12破解版激活(全新注册机)
使用打包下载就可以了 打包下载:(注册机有5.0和5.1用哪个看心情,我用的5.1) 连接:https://pan.baidu.com/s/1ARjFa2vEYxe9sljbrZR8fQ 提取码:lx ...