Skip to content

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

de7bc5decd0bff240f88c0097f73a30c_MD5

入门程序

a21b47f4ec0936c0ac6db16c904383b0_MD5 2cd53c1d82488b73a7e6834f4be3c30f_MD5 以及lombok

配置

3e647a86da5e0096cc6bda1c4d155c89_MD5 在当中配置: 2823452c1ad53a12d2e825b437b37dbf_MD5 这个也叫做四要素. 结果: db9ec72a821a8f599139eaa6dd3e72b8_MD5 注意配置一下字符集: 54c2d6287d9f97e2e2aff142b27ba86a_MD5

编码

31b0b252210d1404b7ca567894012fd4_MD5 fddc9cc89c54a6a6164859d1913db9ce_MD5 一般都叫什么什么mapper.然后注解标识一下mapper.这个一般也叫mapper接口. 06d8c32bcf7a80c30f679a076eacf392_MD5

测试

SpringBoot 单元测试注解: f4da44d637563173686ebb5cb9326623_MD5 它会在单元测试时,加载springBoot的环境. fe0aa12ddaffefa693acc1b6b82c7981_MD5 039d834d85b5a57faa6895382abca12e_MD5 也即: 1753150ac55ff0e1a99948158ede010a_MD5 注意,想要正确打印,需要重写toString.

一些配置

d5fabea3c3c7b5954771bb761c1e65e1_MD5 1754e031647690aefe56ff88a3190f35_MD5 1f5438b230981fddf2363cbf14d190c9_MD5 这样配置后,控制台就有输出了 8de830ed69624cbf891d9444b5a74c44_MD5 底层用的也是预编译的sql.另外,在控制台中,向右的是输入给控制台的,向左的是数据库返回的.

对比

感觉最重要的就是数据是写在配置文件里的,不需要硬编码.这样以后很便捷的就能跨平台. 4f40afc580a980e4ab65dadec7337dd6_MD5 其中,数据库连接池类似于线程池,需要时,就从中获取一个连接.

数据库连接池

e4846d806b156aa356fc7feff51786ec_MD5 第三个:主要是防止有的客户端拿走了连接之后不归还.防止连接越用越少. 63013657977d301c2e745296db341e23_MD5 后两个最常用. 715d0b8f389551bb1ecd4941e2ea1adf_MD5 hikari又叫追光者 我们其实可以看看源码,会发现这些产品都实现了getConnection接口. 验证默认连接池: 454b882cea1c3edbcfe4a5190baced01_MD5 - 如何切换? dca62f1dd5b2b60a42f179921c5e4a60_MD5 这经过如图的两步即可.

增删改查

43d34335b1a1ad216672b3a05a006b23_MD5 在实际传给数据库时,会自动把#{id}替换成? 141f040f8d8a3b8805493757ca6bbc31_MD5 我们知道DML是有返回值的.处理返回值: e452e18d1500445c038389c0f588fca1_MD5 另外,注意,如果删除时没有对应的id,那么不会报错,只是会返回"影响的数据数为0"

其实还有刀乐符号 e2cce6df2f892b60ab1fda501fcac3e2_MD582d9eec96182353d4924881a05d4c65d_MD5 但是,这样的场景很少很少.

869aaaeeeb0f6949162eba9c079e50d5_MD5 会自动把对象对应的字段填进去. 701d85bee2ab85ff1ee59e719a921dde_MD5 第一个id字段可以随便给,因为我们的sql语句中没有用到id. 这里我们就随便传个null

4200698ebe122f369394d2754c82e484_MD5 传入的user就会替换掉原本id的那个user. 9e1bcb43d5b28c630c36ec81cef4dbad_MD5 注意,会发现使用#{}之后不再需要单引号了. 另外,测试类里id要给.因为我们sql语句中使用了id,是根据id去更新的,不给肯定不行.

查询

879e63a14ef8b6ab7c0412725aade322_MD5 当然也可以封装成对象,传递进来.但是实际上,如果参数不多(如上)也可以直接传递进来. 为什么返回值是单个对象?因为理论上,只会查询到一个.当然我们也可以放到集合当中,但是这样集合当中就只有一个元素了. 但是这样写是有问题的:在字节码文件中,形参名字是不会被保留的,也就是说,运行时mybatis并不会知道#{username}当中的username是什么. 015a89ad2c2e10abf5349cb7e2b5a20e_MD5 因此,如果我们需要在接口参数中传递多个参数,就需要给参数起名字. 03c729926a17543ede54ef6cc631948d_MD5 注意,这里#{}当中的名字与@param当中的名字保持一致. 但是SpringBoot就好处理了: 70783e45d24e242b9c4ef958e6da3212_MD5 注意,这里#{}当中的名字与形参的名字保持一致. 使用阿里云的SpringBoot,或者自己写的代码,这里就不可以省略. 本质: a5e4a23275cd845e896c7238043d6c09_MD5 这个parent当中有个插件: d1cee26127923b45548407dd1a702042_MD5 插件中有这个为true.

tip:查看框架当中的报错时,在控制台里找到最后一个causeby,第一行就是准确结果

XML映射配置

我们都是把sql语句写到注解当中的.其实还能写到xml文件当中. 2974896625af6aa37a2e5865c956e7db_MD5 我们在resources中IDEA不让我们创建包,我们只能创建目录.并且由于是目录,我们不能用. 而应该用斜杠 ce97241667a8d46bcc8eebf216db2b07_MD5 xml文件的结构: fbf561e0067f1e30644777283e338564_MD5 内容:

<?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>
标签名是select/insert/update/delete 要取决于我们的语句. resultType是"单条查询记录往哪封装",也就是说即使是我们之前写的findAll返回list<User>,也只需要填User 建议: 78844cd0c57c7e421dbe476109e8456a_MD5

辅助配置

如果我想在resources目录当中专门放到一个mapper目录中呢? 504573fb01672b407219c585a24913da_MD5 所谓classpath,就是java和resource编译之后会统一放到一起的那个路径. (tip:这样我们就知道为什么/java 下的包路径和/resource中的包路径要一致了:因为实际上编译后会放到同一个文件夹中. 如果想看编译后的结果,我们可以看/target下的目录结构) 085b1f11ce8a7df47f733d434d64f3dd_MD5 之后点这个鸟,就能自动在xml文件和对应的接口文件直接相互跳了 6d64e858357a5978e586eb4a161931f8_MD5 这个插件还有个功能:我们先把接口写好,然后出现报错后: 243bbceba5f38ea4ddae801184822743_MD5 点击这个,就会自动帮我们在xml文件中生成对应的: 4a2693ee659e9a92b4fb41b2948a6a6e_MD5