点一下关注吧!!!非常感谢!!持续更新!!!
大数据篇正在更新!https://blog.csdn.net/w776341482/category_12713819.html
目前已经更新到了:
- MyBatis(正在更新)
快速入门
续接上节,完成了基本的 MyBatis 的配置,在不依赖 Spring 的情况下。
这里开始对增删改的内容进行补充。
新增数据
<insert id="insert" parameterType="icu.wzk.model.UserInfo">
INSERT INTO
user_info
VALUES(0, #{username}, #{password}, #{age})
</insert>
添加结果如下图所示:
编写新增代码如下所示:
public class WzkIcu02 {
public static void main(String[] args) throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserInfo userInfo = UserInfo
.builder()
.username("wzk2")
.password("icu2")
.age(25)
.build();
sqlSession.insert("icu.wzk.mapper.UserInfoMapper.insert", userInfo);
sqlSession.commit();
sqlSession.close();
}
}
编写代码如下所示:
执行结果部分日志如下:
24/11/11 15:16:49 DEBUG UserInfoMapper.insert: ==> Preparing: INSERT INTO user_info VALUES(0, ?, ?, ?)
24/11/11 15:16:49 DEBUG UserInfoMapper.insert: ==> Parameters: wzk2(String), icu2(String), 25(Integer)
24/11/11 15:16:49 DEBUG UserInfoMapper.insert: <== Updates: 1
24/11/11 15:16:49 DEBUG jdbc.JdbcTransaction: Committing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@475e586c]
控制台输出结果如下所示:
注意的问题:
- 插入语句使用 INSERT 标签
- 在映射文件中使用 parameterType 属性指定要插入的数据类型
- SQL 语句使用 #{} 来引入实体中的属性值
- 插入操作使用的 API 是 sqlSession.insert(“命名空间.id”,实体对象)
- 插入操作涉及到数据库数据变化,所以要使用 sqlSession 对象显示的提交事务,即 sqlSession.commit()
更新数据
<update id="update" parameterType="icu.wzk.model.UserInfo">
UPDATE
user_info
SET
username=#{username}, password=#{password}, age=#{age}
WHERE
id=#{id}
</update>
编写的情况下如下所示:
public class WzkIcu03 {
public static void main(String[] args) throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserInfo userInfo = UserInfo
.builder()
.id(2L)
.username("wzk2-update")
.password("icu2-update")
.age(25)
.build();
sqlSession.update("icu.wzk.mapper.UserInfoMapper.update", userInfo);
sqlSession.commit();
sqlSession.close();
}
}
编写代码如下所示:
运行之后控制台输出部分日志如下:
24/11/11 15:24:29 DEBUG UserInfoMapper.update: <== Updates: 1
24/11/11 15:24:29 DEBUG jdbc.JdbcTransaction: Committing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@475e586c]
对应的截图如下所示:
注意的问题
- 修改语句需要使用 update 标签
- 操作的是 sqlSession.update(“命名空间.id”,实体对象)
删除数据
<delete id="delete" parameterType="icu.wzk.model.UserInfo">
DELETE FROM
user_info
WHERE
id=#{id}
</delete>
对应的 mapper 截图如下所示:
编写代码:
public class WzkIcu04 {
public static void main(String[] args) throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserInfo userInfo = UserInfo
.builder()
.id(2L)
.build();
sqlSession.update("icu.wzk.mapper.UserInfoMapper.delete", userInfo);
sqlSession.commit();
sqlSession.close();
}
}
执行结果如下所示:
删除的时候需要注意:
- 删除使用 delete
- 操作的是 sqlSession.delete(“命名空间.id”,实体对象)
映射概述
核心概念
MyBatis 的映射主要由 XML 映射文件 和 注解方式 实现,将数据库的表结构映射到 Java 对象上。MyBatis 映射通过 XML 和注解方式提供了灵活的 SQL 控制能力,适合需要手动编写 SQL 的场景。XML 映射文件适合复杂逻辑,而注解方式更适合简单场景。掌握 MyBatis 的映射能力,可以更高效地完成数据持久化操作,同时保持代码的可维护性和可读性。
XML 映射文件
XML 是 MyBatis 映射的核心组件,通常以 .xml 文件形式存在,与映射的 Java 类对应。它包含了 SQL 语句、映射关系以及其他配置。
注解方式
通过 Java 注解的形式,将 SQL 直接嵌入到 Mapper 接口中,适合简单的 CRUD 操作。
核心配置
重要标签
- mapper:顶级标签,声明该文件为 Mapper 文件,namespace 对应 Java 接口的全限定名。
- resultMap:自定义对象与数据库字段的映射关系,支持复杂映射。
- select:定义查询语句,可通过 resultType 或 resultMap 映射结果。
- insert:定义插入语句,使用 #{} 占位符传递参数。
- update:定义更新语句。
- delete:定义删除语句。
常用配置
enviroment
数据库环境配置,支持对环境配置
其中,事务管理器(transactionManager)类型有两种:
- JDBC:使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。
- MANAGED:几乎没做什么操作,它从来不提交或者回滚,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置为 false 来阻止它默认的关闭行为
其中,数据源有三种:
- UNPOOLED:每次请求打开和关闭连接
- POOLED:利用池的概念将 JDBC 连接对象组织起来
- JNDI:实现是为了能在 EJB 或应用服务器这类容器中使用,容器可以几种或者在外部配置数据源,然后防止一个 JNDI 上下文引用。
mapper
作用是加载映射,加载方式有如下几种:
使用相对于类路径的资源应用:
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
使用完全限定资源定位符(URL),例如:
<mapper url="file:///var/mappers/AuthorMapper.xml"/>
使用映射接口实现类的完全限定类名,例如:
<mapper class="org.mybatis.builder.AuthorMapper"/>
将包内的映射接口实现全部注册为映射器,例如:
<package name="org.mybatis.builder"/>