Spring boot整合mybatis实现过程图解
作者:岁月染过的梦 发布时间:2023-01-15 09:31:05
标签:spring,boot,整合,mybatis
导入mybatis jar包
右键pom.xml
模拟springboot底层实现类
1.
定义接口
@Mapper
public interface GoodsDao {
/**
* 基于商品id删除商品
* @param id 商品id
* @return 删除行数
* 数据层方法对象的sql映射
*/
@Delete("delete from tb_goods where id=#{id}")
//当传入的参数只有一个且不是数组时
//#{id}这个地方的变量可以不是传入的参数名(自己随意)
int deleteById(Integer id);
}
测试
@SpringBootTest
public class TestGoods {
@Autowired
private GoodsDao gd;
@Test
void TestGoods() {
int i =gd.deleteById(10);
System.out.println(i);
}
}
2.
自己实现
接口方法
@Mapper
public interface GoodsDao {
/**
* 基于商品id删除商品
* @param id 商品id
* @return 删除行数
* 数据层方法对象的sql映射
*/
@Delete("delete from tb_goods where id=#{id}")
int deleteById(Integer id);
}
@Component
public class GoodsDaoImpl {
@Autowired
private SqlSession sqlSession;
public int deleteById(Integer id) {
return sqlSession.delete("com.cy.demo.goods.dao.GoodsDao.deleteById", id);
//sqlSession.delete("com.cy.demo.goods.dao.deleteById",id)
}
}
@SpringBootTest
public class GoodsDaoImpTest {
@Autowired
private GoodsDaoImpl gdi;
@Test
void testdelete() {
int i = gdi.deleteById(9);
System.out.println(i);
}
}
直接导mapper文件找对应的元素
3.
当sql语句比较复杂时使用映射文件
接口:
/**
*GoodsDao.java
* ids可以接受多个参数
* 在mapper文件中直接使用array来接受,
* @param ids
* @return
*/
int deleteObject(/*@Param("ids")*/Integer...ids);
//当mybatis过低时需要加上@Param("ids")才能识别
不加@Param("ids")报错
使用xml映射
获取xml头文件(去官网)
<?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.cy.demo.goods.dao.GoodsDao">
<delete id="deleteObject">
delete from tb_goods
<where>
<if test="ids!=null and ids.length>0">
id in
<foreach collection="ids" open="(" close=")" separator=","
item="i">
#{i}
</foreach>
</if>
or 1=2
</where>
</delete>
</mapper>
配置:
测试:
@Autowired
private GoodsDao gd;
@Test
void deleteObject() {
int rows=gd.deleteObject(1,2,3);
System.out.println(row);
}
当我们在执行此方法时,其实现类内部会检测接口方法上是否有定义sql映射
假如没有,然后基于接口类全名找到对应的映射文件(mapper映射文件的id),然后在基于方法名
再找到对应映射文件的元素,进而获取sql映射
错误解决:
binding异常还有可能时参数异常,还有可能是配置文件有问题
来源:https://www.cnblogs.com/syrgdm/p/13414448.html
0
投稿
猜你喜欢
- Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。本篇不涉及其原理,只用代码构建项目简单试用一下其回滚
- 依赖添加<dependency> <groupId>org.springframework.boot&l
- Java的IO是一个大知识点,如果把它的知识点拆开来说的话估计能说一个星期,关于IO的体系可以看看下面这张图,接下来我们从一段代码开始聊吧,
- 使用JAVA工程管理越来越多的jar包,担心导错了,多导了,漏导了怎么办?换一个IDE项目后项目会不会出一堆BUG,看的头皮发麻?自己写的代
- 它所表示的是“这部分是无法修改的”。不想被改变的原因有两个:效率、设计。使用到final的有三种情况:数据、方法、类。一、 final数据有
- Mybatis所需要的jar包:需要引用两个jar包,一个是mybatis,另一个是MySQL-connector-Java,如果是mave
- 前言公司最近在开发中遇到一个问题,在弄帖子的发布与回复问题,然后再iOS端和Android端添加表情的时候都会出错Caused by: ja
- 1. 服务端配置java启动命令增加以下参数即可:-Dcom.sun.management.jmxremote \-Dcom.sun.man
- SpringBoot使用protobuf格式的接口建立SpringBoot项目,pom.xml内容如下:<?xml version=&
- 最近看Android FrameWork层代码,看到了ThreadLocal这个类,有点儿陌生,就翻了各种相关博客一一拜读;自己随后又研究了
- 基本原理:利用URLConnection获取要下载文件的长度、头部等相关信息,并设置响应的头部信息。并且通过URLConnection获取输
- 1. 引入静态资源:th:href或th:scr+@{/从static目录开始}<html lang="en" x
- 如下所示:package com.unionx.wanxue; import java.util.Map; import java.util
- List集合相信大家在开发过程中几乎都会用到。有时候难免会遇到集合里的数据是重复的,需要进行去除。然而,去重方式有好几种方式,你用的是哪种方
- 一:前言最近老师布置了给多级菜单的作业,感觉蛮有意思的,可以提升自己的逻辑!下面我写个简易版的多级菜单,本人还是菜鸟,欢迎各位给予宝贵的建议
- Zookeeper和Eureka哪个更好?1、CAP理论一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求C:数据一致性
- 一、微服务结构微服务这种方案需要技术框架来落地,全球的互联网公司都在积极尝试自己的微服务落地技术。在国内最知名的就是SpringCloud和
- 由于CPU的计算频率非常高,每秒计算数十亿次,因此可以将CPU的时间从毫秒的维度进行分段,每一小段叫作一个CPU时间片。目前操作系统中主流的
- 一、实验目的1. 掌握输入输出流的总体结构;2. 掌握流的概念;3. 掌握FileInputStream类、FileOutputStream
- 一. spring配置文件:application.xml<?xml version="1.0" encoding