可以先看数据库1 2了.
对比:
只需要声明一个带接口的接口方法,加上注解,这样就会自动把select的结果放到List<User>当中

入门程序¶
以及lombok
配置¶
在当中配置:
这个也叫做四要素.
结果:
注意配置一下字符集:

编码¶
一般都叫什么什么mapper.然后注解标识一下mapper.这个一般也叫mapper接口.

测试¶
SpringBoot 单元测试注解:
它会在单元测试时,加载springBoot的环境.
也即:
注意,想要正确打印,需要重写toString.
一些配置¶
这样配置后,控制台就有输出了
底层用的也是预编译的sql.另外,在控制台中,向右的是输入给控制台的,向左的是数据库返回的.
对比¶
感觉最重要的就是数据是写在配置文件里的,不需要硬编码.这样以后很便捷的就能跨平台.
其中,数据库连接池类似于线程池,需要时,就从中获取一个连接.
数据库连接池¶
第三个:主要是防止有的客户端拿走了连接之后不归还.防止连接越用越少.
后两个最常用.
hikari又叫追光者
我们其实可以看看源码,会发现这些产品都实现了getConnection接口.
验证默认连接池:
- 如何切换?
这经过如图的两步即可.
增删改查¶
删¶
在实际传给数据库时,会自动把#{id}替换成?
我们知道DML是有返回值的.处理返回值:
另外,注意,如果删除时没有对应的id,那么不会报错,只是会返回"影响的数据数为0"
其实还有刀乐符号
如
但是,这样的场景很少很少.
增¶
会自动把对象对应的字段填进去.
第一个id字段可以随便给,因为我们的sql语句中没有用到id.
这里我们就随便传个null
改¶
传入的user就会替换掉原本id的那个user.
注意,会发现使用#{}之后不再需要单引号了.
另外,测试类里id要给.因为我们sql语句中使用了id,是根据id去更新的,不给肯定不行.
查询¶
当然也可以封装成对象,传递进来.但是实际上,如果参数不多(如上)也可以直接传递进来.
为什么返回值是单个对象?因为理论上,只会查询到一个.当然我们也可以放到集合当中,但是这样集合当中就只有一个元素了.
但是这样写是有问题的:在字节码文件中,形参名字是不会被保留的,也就是说,运行时mybatis并不会知道#{username}当中的username是什么.
因此,如果我们需要在接口参数中传递多个参数,就需要给参数起名字.
注意,这里#{}当中的名字与@param当中的名字保持一致.
但是SpringBoot就好处理了:
注意,这里#{}当中的名字与形参的名字保持一致.
使用阿里云的SpringBoot,或者自己写的代码,这里就不可以省略.
本质:
这个parent当中有个插件:
插件中有这个为true.
tip:查看框架当中的报错时,在控制台里找到最后一个causeby,第一行就是准确结果
XML映射配置¶
我们都是把sql语句写到注解当中的.其实还能写到xml文件当中.
我们在resources中IDEA不让我们创建包,我们只能创建目录.并且由于是目录,我们不能用. 而应该用斜杠
xml文件的结构:
内容:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.example.BlogMapper">
<select id="selectBlog" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>
list<User>,也只需要填User
建议:
辅助配置¶
如果我想在resources目录当中专门放到一个mapper目录中呢?
所谓classpath,就是java和resource编译之后会统一放到一起的那个路径.
(tip:这样我们就知道为什么/java 下的包路径和/resource中的包路径要一致了:因为实际上编译后会放到同一个文件夹中.
如果想看编译后的结果,我们可以看/target下的目录结构)
之后点这个鸟,就能自动在xml文件和对应的接口文件直接相互跳了
这个插件还有个功能:我们先把接口写好,然后出现报错后:
点击这个,就会自动帮我们在xml文件中生成对应的:
