Mybatis第一天(介绍,使用步骤,核心对象)
mybatis
mybatis是一款优秀的持久层框架,它支持自定义sql,存储过程已经高级映射,也就是说mybatis是用来优化dao层的
一.优点:
- 相比于JDBC连接数据库,代码更加简洁(相当于减少了50%以上的代码量)
- 简单易学
- 支持编写动态sql(可以直接在对应的xml文件使用if等判断来拼接sql)
- 支持对象和数据库的ORM关系映射(ORM:object relation mapping 对象关系映射)
- 将sql语句分离,也就是从程序代码中将sql语句单独分离出来,便于统一管理和重用
二.缺点:
- sql语句的编写工作量比较大
- sql语句过于依赖数据库,导致数据库的移植性比较差
三.mybatis使用步骤:
- 配置mybatis的核心xml文件:通常配置文件名为mybatis-config.xml(类似于database.propertis,在src下面创建包resources,然后放在下面)
- 在mybatis-config.xml配置文件中添加相关配置内容(可以去官网复制实例代码)
- 引入database.propertis数据库连接相关信息文件(也可以不引入直接在mybatis-config.xml中写)
--1 使用<properties resource="database.properties"/>
引入database.properties
--2 使用<properties>
标签,直接将数据库连接信息写到xml
<properties>
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/kgcnews?useUnicode=true&characterEncoding=UTF-8"/>
<property name="user" value="root"/>
<property name="password" value="520115gjl"/>
</properties>
-
创建XXXMapper.xml文件(专门写sql语句的)
注意:
-- 通常每个XXXMapper.xml只对应一个表
-- namespace:命名空间,每个XXXmapper.xml对应一个命名空间(唯一的),namespace是关联同名的接口
-- select标签:对应的是查询的sql语句,id标签:对应的是映射该sql语句的名字(id对应的是接口中的方法名), resultType属性:对应的是返回值类型.(如果此处结果集返回的是一个对象,则会自动将结果集映射到对应的实体类中,映射是通过实体类中的get和set相关方法来实现的,所以要求实体类中必须有set和get方法)
复制官网的代码:
-
引入相关jar包并且写测试类
-- 通过SQLSession核心对象来执行对应的sql语句,并获取返回值
List<User>list=ss.getMapper(UserMapper.class).getAll();
或者int num = ss.getMapper(UserMapper.class).count();
-- selectOne是返回一个结果集
-- selectList是返回多个结果集
-
为了简化测试类中使用selectOne或者selectList(该种方法容易写错,而且还不好入参)
我们通常会创建一个和XXXMapper.xml同名的XXXMapper接口,该接口中的方法名必须和XXXMapper.xml中的id'名一致,而且该接口的路径也需要和XXXMapper.xml在同一个包下面,
正好对应的XXXMapper.xml中的namespace命名空间
mybatis中的三个核心对象
- SqlSession(最重要的,又称一级缓存)
- SqlSessionFactory-->c创建SqlSession
- SqlSessionFactoryBuilder-->创建SqlSessionFactory
${}和#{}的区别
${}是将当中的内容当中的内容当做一个字符串来进行解析的,解析之后,相当于是在原来的sql上面拼接该内容
#{}是将当中的内容当做是占位符中的内容;嗷进行设置的,获取之后,会在该内容上面加上''
sql注入:通过拼写sql内容,让sql语句始终成立 能够查询出内容
#{}可以一定程度上防止sql注入
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?