Mybatis概述:
- Myba是一款优秀的持久层框架
- MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程,减少了代码的冗余,减少程序员的操作。
持久化
即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、XML数据文件中等等。
JDBC就是一种持久化机制。文件IO也是一种持久化机制。
为什么需要持久化服务?
内存断点后数据会丢失,但是有些业务不允许这种情况的存在
比起硬盘,内存过于昂贵,如果有够量的内存,则不需要持久化服务,但是正是因为内存太贵,储存有限,因此需要持久化来缓存
Mybatis的作用
Mybatis帮助程序员将数据存取到数据库里面。
传统的jdbc操作 , 有很多重复代码块 .比如 : 数据取出时的封装 , 数据库的建立连接等等… , 通过框架可以减少重复代码,提高开发效率 .
MyBatis的优点
简单易学:本身就很小且简单。
灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
Mybatis操作数据库的具体实现步骤如下:
- 创建一个数据库表。
- 创建一个Maven项目,并在pom.xml文件中配置相关依赖。
- 创建Mybatis的核心配置文件(mybatis-config.xml),配置数据库连接信息和映射文件路径等。
- 创建与数据库表对应的实体类,用于封装数据库表中的数据。
- 创建数据操作持久层接口,定义数据库操作的方法。
- 创建数据操作持久层接口的实现类,并在实现类中编写SQL语句。
- 创建测试类,测试数据库操作的功能。
Mybatis知识
1.从数据库查询数据时,若返回字段在java实体类中没有该属性,则可以返回map集合
例如:Map<String,Object>
若返回数据为多行数据时,可以使用List<Map<String,Object>>或者加上@Mapkey注解,以一个字段名为大的键,例:@Mapkey("id") {1={uname="hahah",id=1},2={uname="wowowo",id=2}}
2.模糊查询时,like ?
最优: select * from users where uname like "%"#{uname}"%" ("%")双引号
或者:like '%${uname}%' (字符串拼接 ) 或者 like concat ('%' ,#{uname}, '%')
3.使用级联处理多对一的映射关系
多表查询时,返回数据之间具有一对多的关系
例:班级和学生之间一对多 可以在 学生实体类 中添加 班级属性
在ResultMap中绑定 colum="class_id" property="class.classId"
4.一对多查询数据时 在一的实体类中加入 集合属性
1.在ResultMap中使用<collection>标签 property绑定集合属性 ofType="Student"(集合中的类型)
2. <collection property="students" ofType="student">
<result column="studentName" property="studentName"/>
<result column="studentAge" property="studentAge"/>
<result column="classId" property="classId"/>
</collection>
5.分步查询数据
1.写两个查询sql
2.给两个sql绑定联系:
fetchType加载形式:eager(直接加载) lazy(懒加载)
select: 用来设置分步查询的唯一标识(绑定到第二个查询sql)
column:查询的条件 两表之间的关系
<collection property="students" fetchType="eager"
select="com.shutu.Mapper.StudentMapper.getClassAndStudentStepTwo"
column="classId"/>