超全面的MyBatis框架学习笔记【一次性拿下mybatis】

这篇博客详细介绍了MyBatis框架,包括其在三层架构中的角色、与Spring和MVC的配合,以及MyBatis的重要概念和操作,如Dao代理、参数理解、#和$的区别、结果封装等。此外,还涉及动态SQL、配置文件详解及PageHelper分页插件的使用。
摘要由CSDN通过智能技术生成

目录

第一章 框架的概述

第二章 MyBatis入门

2.1 第一个例子

2.2 概念

2.3 MyBatis的一些重要对象

第三章 MyBatis的Dao代理

3.1 dao代理

3.1.1 mybatis提供代理:

3.1.2 使用mybatis代理要求

3.1.3 mybatis代理实现方式

3.2 理解参数

3.2.1 parameterType

3.2.2 dao接口方法是一个简单类型的参数

3.2.3 dao接口方法有多个简单类型的参数

3.2.4 dao接口方法使用一个对象作为参数

3.2.5 dao接口中多个简单类型的参数,使用位置

3.2.6 dao接口参数是一个Map

3.3 #和$的区别

3.3.1 # 占位符

3.3.2 $ 占位符

3.4 封装MyBatis输出结果

3.4.1 resultType

3.4.2 resultMap

3.5 自定义别名

3.6 列名和java对象属性名称不一样解决方式

3.7 like

第四章 动态sql

4.1 if 标签

4.2 where 标签

4.3 foreach 循环

4.4 sql标签

第五章 MyBatis配置文件

5.1 settings部分

5.2 typeAliase 别名

5.3 配置环境

5.4 使用数据库属性配置文件(*)

5.5 mapper 标签(*)

第六章 PageHelper

1.加入依赖pagehelper依赖

2.在mybatis主配置文件, 加入plugin声明

3.在select语句之前,调用PageHelper.startPage(页码, 每页大小)


第一章 框架的概述

1.三层架构
mvc:web开发中,使用mvc架构模式。 m:数据, v:视图, c:控制器。

​ c控制器: 接收请求,调用service对象,显示请求的处理结果。 当前使用servlet作为控制器

​ v视图: 现在使用jsp, html,css,js。 显示请求的处理结果,把m中数据显示出来。

​ m数据: 来自数据库mysql, 来自文件,来自网络

mvc作用:

​ 1)实现解耦合。

​ 2)让mvc 各负其职。

​ 3)使的系统扩展更好。更容易维护。

三层架构:

1.界面层(视图层):接收用户的请求,调用service, 显示请求的处理结果的。 包含了jsp,html,servlet等对象。 对应的包controller,

2.业务逻辑层:处理业务逻辑, 使用算法处理数据的。 把数据返回给界面层。 对应的是service包,和包中的很多的XXXService类。 例如: StudentService , OrderService, ShopService

3.持久层(数据库访问层):访问数据库,或者读取文件,访问网络。获取数据。 对应的包是dao。 dao包中很多的StudentDao, OrderDao, ShopDao等等。

2. 三层架构请求的处理流程
用户发起请求---->界面层----->业务逻辑层---->持久层---->数据库(mysql)

3. 为什么要使用三层?
1,结构清晰、耦合度低, 各层分工明确
2,可维护性高,可扩展性高
3,有利于标准化
4,开发人员可以只关注整个结构中的其中某一层的功能实现
5,有利于各层逻辑的复用

4. 三层架构模式和框架
每一层对应着一个框架

1)界面层—SpringMVC框架

2)业务层—Spring框架

3)持久层—MyBatis框架

5 .框架
什么是框架(framework)
框架:就是一个软件, 完成了部分的功能。 软件中的类和类之间的方法调用都已经规定好了。 通过这些可以完成某些功能。 框架看做是模版。

框架是可以升级的,改造的。 框架是安全的。

框架是对某一个方面有用的,不是全能的。

6. 框架解决的问题
1)框架能实现技术的整合。

2)提供开发的效率。 降低难度。

7. jdbc访问数据库的优缺点
优点:

直观,好理解
缺点:

创建很多对象 Connection ,Statement, ResultSet
注册驱动
执行sql语句
把ResultSet转为 Student , List集合。
关闭资源
sql语句和业务逻辑代码混在一起
8 MyBatis框架
什么 mybatis: 是一个持久层框架, 原名是ibatis, 2013改名为 MyBatis. MyBatis可以操作数据库,对数据执行增删改查。 看做是高级的jdbc。 解决jdbc的缺点。

mybatis能做什么?

1) 注册驱动 。

2) 创建jdbc中使用的Connection, Statement,ResultSet

3)   执行sql语句, 得到ResultSet

4)   处理ResultSet, 把记录集中的数据转为java对象,  同时还能把java对象放入到List集合。

5)关闭资源

6)实现sql语句和java代码的解耦合。


不怎么理解的可以观看视频自己做笔记学习:

动力节点MyBatis教程实战精讲(适用于SSM框架初学者课程循序渐进,深入浅出)_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV185411s7Ry


第二章 MyBatis入门

2.1 第一个例子

实现步骤:

0.创建student表(id,name,email,age)

1.新建maven项目

2.修改pom.xml

1)加入依赖 mybatis依赖, mysql驱动, junit

2)在加入资源插件

3.创建实体类Student。定义属性, 属性名和列名保持一致

4.创建Dao接口, 定义操作数据库的方法。

5.创建xml文件(mapper文件), 写sql语句。

mybatis框架推荐是把sql语句和java代码分开

mapper文件:定义和dao接口在同一目录, 一个表一个mapper文件。

6.创建mybatis的主配置文件(xml文件):有一个, 放在resources目录下

1)定义创建连接实例的数据源(DataSource)对象

2)   指定其他mapper文件的位置

7.创建测试的内容。

使用main方法,测试mybatis访问数据库

也可以使用junit 访问数据库

2.2 概念

1.自动提交:当你的 sql语句执行完毕后, 提交事务。 数据库更新操作之间保存到数据

2.手动(手工)提交事务:在你需要提交事务的位置, 执行方法,提交事务或者回顾事务。

2.3 MyBatis的一些重要对象

1) Resources : mybatis框架中的对象, 一个作用读取 主配置信息。

InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");

2)SqlSessionFactoryBuilder:负责创建SqlSessionFactory对象

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);

3)SqlSessionFactory: 重要对象

SqlSessionFactory是重量级对象:创建此对象需要使用更多的资源和时间。 在项目中有一个就可以了。

SqlSessionFactory接口:作用是SqlSession的工厂, 就是创建SqlSession对象。

DefaultSqlSessionFactory实现类
 

public class DefaultSqlSessionFactory implements SqlSessionFactory { } 

SqlSessionFactory接口中的方法

openSession(): 获取一个默认的SqlSession对象, 默认是需要手工提交事务的。

openSession(boolean): boolean参数表示是否自动提交事务。

​ true: 创建一个自动提交事务的SqlSession

​ false: 等同于没有参数的openSession

4、SqlSession对象
SqlSession对象是通过SqlSessionFactory获取的。 SqlSession本身是接口

DefaultSqlSession: 实现类

public class DefaultSqlSession implements SqlSession { }

SqlSession作用是提供了大量的执行sql语句的方法:

selectOne:执行sql语句,最多得到一行记录,多余1行是错误。
selectList:执行sql语句,返回多行数据
selectMap:执行sql语句的,得到一个Map结果
insert:执行insert语句
update:执行update语句
delete:执行delete语句
commit:提交事务
rollback:回顾事务

注意SqlSession对象不是线程安全的, 使用的步骤:

①:在方法的内部,执行sql语句之前,先获取SqlSession对象

②:调用SqlSession的方法,执行sql语句

③:关闭SqlSession对象,执行SqlSession.close()

第三章 MyBatis的Dao代理

3.1 dao代理

3.1.1 mybatis提供代理:

mybatis创建Dao接口的实现类对象, 完成对sql语句的执行。 mybatis创建一个对象代替你的 dao实现类功能。

3.1.2 使用mybatis代理要求

1)mapper文件中的namespace 一定dao接口的全限定名称

2)mapper文件中 标签的id是dao接口方法名称

3.1.3 mybatis代理实现方式

使用SqlSession对象的方法 getMapper(dao.class)

例如: 现在有 StudentDao接口。

SqlSession session  = MyBatisUtils.getSqlSession();
StudentDao dao  = session.getMapper(StudentDao.class);
Student student = dao.selectById(1001);


//上面代码中
StudentDao dao  = session.getMapper(StudentDao.class);
等同于
StudentDao dao  = new StudentDaoImpl();

3.2 理解参数

理解参数是: 通过java程序把数据传入到mapper文件中的sql语句。 参数主要是指dao接口方法的形参

3.2.1 parameterType

parameterType:表示参数的类型, 指定dao方法的形参数据类型。 这个形参的数据类型是给mybatis使用。 mybatis在给sql语句的参数赋值时使用。 PreparedStatement.setXXX( 位置, 值)
 

第一个用法: java类型的全限定类型名称   parameterType="java.lang.Integer"
第二个用法: mybatis定义的java类型的别名  parameterType="int"

parameterType:mybatis通过反射机制可以获取 dao接口方法参数的类型, 可以不写

<select id="selectById"  parameterType="integer"
                 resultType="com.bjpowernode.domain.Student">
   select id,name,email,age from student where id=#{studentId}
</select>

3.2.2 dao接口方法是一个简单类型的参数

//dao接口的方法形参是一个简单类型的
//简单类型: java基本数据类型和String
Student selectByEmail(String email);
<!--   dao接口是一个简单类型的参数   mapper文件,获取这个参数值,使用#{任意字符}--><select id="selectByEmail" resultType="com.bjpowernode.domain.Student">    select id,name,email,age from student where email=#{studentEmail}</select>

3.2.3 dao接口方法有多个简单类型的参数

@Param: 命名参数, 在方法的形参前面使用的, 定义参数名。 这个名称可以用在mapper文件中。

dao接口,方法的定义

/*  多个简单类型的参数  使用@Param命名参数, 注解是mybatis提供的  位置:在形参定义的前面  属性:value 自定义的参数名称 */List<Student> selectByNameOrAge(@Param("myname") String name,                                @Param("myage") Integer age);

mapper文件

<!--   多个简单类型的参数.   当使用了@Param命名后,例如@Param("myname").   在mapper中,使用#{命名的参数}, 例如 #{myname}--><select id="selectByNameOrAge" resultType="com.bjpowernode.domain.Student">    select id,name,email,age from student where name=#{myname} or age=#{myage}</select>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值