文章目录
- 一、框架概述
- 二、 Mybatis框架的快速入门
- 1.传统dao的使用例子
- 1. 新建student表
- 2. 在maven的pom.xml中加入Mybatis的坐标、mysql驱动的坐标和build中的一个Maven插件
- 3. 创建实体类Student
- 4. 创建dao接口,定义操作数据库的方法
- 5. 创建SQL映射文件(可以有多个)
- 6. Mybatis的主配置文件(只有一个)
- 7. 创建接口的实现类(用了工具类)
- 8. 然后在主方法中调用即可
- 9. 如果我们要加入一个添加方法
- 2.封装一个工具类
- 3.Mybatis类中主要类的介绍
- 三、 动态代理的使用例子(以后主要使用)
- 1.原理
- 2.实现方法
- 3.深入理解参数
- 4.MyBatis封装jdbc的原理
- 四、 封装MyBatis输出结果
- 五、模糊查询
- 六、动态SQL
- 七、主配置文件
- 八、PageHelper组件实现分页查询
一、框架概述
1.软件开发常用结构
2.框架是什么
3.使用JDBC的缺陷
4.MyBatis框架概述
二、 Mybatis框架的快速入门
1.传统dao的使用例子
1. 新建student表
2. 在maven的pom.xml中加入Mybatis的坐标、mysql驱动的坐标和build中的一个Maven插件
插件的作用介绍:
3. 创建实体类Student
4. 创建dao接口,定义操作数据库的方法
5. 创建SQL映射文件(可以有多个)
写SQL语句的文件,Mybatis会执行这些SQL,
这样的好处是Sql语句和原先的代码分开了,修改Sql语句不会影响到原先代码的执行
把SQL语句查询到的id,name,email,age,依次赋值给Student类中定义的变量
6. Mybatis的主配置文件(只有一个)
主要定义了数据库的配置信息,连接数据,确定SQL映射文件的位置
插入setting,这样在做查询,删除,更新,添加的时候能在控制台看见sql语句和参数了
显示如下:这是查询
7. 创建接口的实现类(用了工具类)
创建SqlSession去访问了数据库,接着在主方法中调用即可
8. 然后在主方法中调用即可
9. 如果我们要加入一个添加方法
在StudentDao中加上方法
在StudentDao.xml中加入
在impl下添加一个方法
2.封装一个工具类
原始代码
SQLSession创建,并访问数据库的代码
Mybatis类中的代码重复太多,我们需要封装一下
使用工具类后的代码
3.Mybatis类中主要类的介绍
三、 动态代理的使用例子(以后主要使用)
1.原理
我们以后主要就是写dao接口方法和对应的sql映射文件即可
Mybatis的动态代理:
动态代理的话就不用写dao接口的实现类了,通过getMapper()方法自动在内部创建实现类,并且在实现类中自动调用SqlSession的方法来执行sql语句
2.实现方法
前提是Pom.xml中已经配置好了,Mybatis的主配置文件也配置好了
第一步:只需要在接口中写上方法即可,不用写实现类,然后在StudentDao.xml中添加上方法
第二步:主方法中,通过getMapper()获取StudentDao接口的对象即可
传统方法是在dao接口实现类中进行数据库操作,再用主方法进行调用,传参并输出
动态代理方法是,直接在主方法中进行自动的实现类创建和传参并输出
3.深入理解参数
1.parameterType介绍
2.传入一个参数
3.传入多个参数(使用@Param)
接口中
SQL映射文件中
主方法中
4.传入多个参数(使用对象)用的最多
因为一个项目中肯定有一个对象
Java对象
接口中
Sql映射文件中
主方法中
5.#和$的使用
能使用#就使用#
1.#:占位符介绍
2.#和$的对比
3.#和$的区别
4.MyBatis封装jdbc的原理
MyBatis帮你连接数据库,帮你执行sql语句,最后按你接口中定义的返回值把输出结果给你,你只需要写sql语句和处理返回的结果即可
四、 封装MyBatis输出结果
1.resultType
resultType和接口方法的返回值是保持一致的
建议使用返回值是对象的
1.返回值是简单类型的
2.返回值是对象的
3.返回值是Map的
缺点是只能返回一行数据
如果sql语句是where id>#{stuid},那么结果就会报错,因为查询结果不只一行
接口中
Sql映射文件中
4.resultType赋值的特点
Sql语句中的列名必须和Student中的属性名一样,才能把列名的值赋给对应的属性名
如果不一致,那么就无法赋值
比如:我们改变了id和name的属性名
而SQL语句中的名字没变
结果改变名字的就没有赋到值
2.定义自定义类型的别名
不建议使用别名,建议使用全限定名称
1.第一种方式,
在Mybatis主配置文件中
在sql映射文件中
2.第二种方式,(使用居多)
在Mybatis主配置文件中
Sql映射文件中,直接用对象的类名
3.resultMap
4.resultType列名和属性名不一致的问题
resultType必须指定sql的列名和对象的属性名,名称一致,如果不一致但是还想保证赋值成功,就得用resultMap来做结果映射
Student对象属性名
列名 id和name不一致
结果赋值失败
1.方法一:使用resultMap指定属性名
在SQL映射文件中,resultMap指定列名赋给哪个属性名
2.方法二:给列名起别名
resultType的默认原则是:同名的列赋值给同名的属性
那么我们就把不同名的列名改成和属性名一致就行
五、模糊查询
1.第一种 java代码中指定link的内容(推荐)
接口方法
SQL映射文件
主方法中
2.第二种,在mapper文件中拼接Link的内容
接口方法
SQL映射文件中
主方法中
六、动态SQL
1.动态SQL之< if >
对于该标签的执行,当 test 的值为 true 时,会将其包含的 SQL 片断拼接到其所在的 SQL 语句中。
语法:< if test=”条件”> sql 语句的部分< /if>
2.动态SQL之< where >
Where能解决if中存在的问题
用来包含多个< if>的,当多个if有一个成立的, < where>会自动增加一个where关键字,并去掉 if中多余的 and ,or等。
测试例子:
当第一个条件不成立,第二个条件成立时,where会自动添加上,并且会去掉if中多余的or,and
3.动态SQL之< foreach>主要用在in语句中
原始手动写法
select * from student where id in (1001,1002,1003)
< foreach> 循环java中的数组,list集合的。 主要用在sql的in语句中。会自动帮你进行字符串的拼接
1.第一种:集合中的成员是个简单的类型
接口方法中
Sql映射文件中
主方法中
2.第二种:集合中的成员是个对象
接口中
SQL映射中
主方法中
4.动态SQL之代码片段
定义Sql片段
使用Sql片段
七、主配置文件
1.主配置文件下的标签介绍
< transactionManager>
< dataSource>
2.数据库的属性配置文件
把数据库连接信息放到一个单独的文件中。 和mybatis主配置文件分开。
目的是便于修改,保存,处理多个数据库的信息。
这是在主配置文件中,原来我们把连接数据库的信息写在这,现在应该写在一个配置文件中
1.具体操作:
第一步:在resources包下创建一个配置属性文件,在里面写上数据库的连接信息,格式是Key-value
都是自定义的
第二步:在主配置文件中使用指定配置文件的位置
通过${}引入配置属性文件中的key,这样以后只需要改配置属性文件的内容即可,便于维护
3.主配置文件中标签
1.第一种方式:指定多个mapper文件
2.第二种方式:使用包名(推荐)
八、PageHelper组件实现分页查询
原始的Sql分页查询:select * from student limit 1,3 表示从第一条数据开始显示,一共显示3条数据,这表示第一页,第二页就得是select * from student limit 4,3 从第四条数据开始显示,一共显示3条
原始方法每次写下一页的时候都得计算前面的数据很麻烦
我们用PageHelper这个组件只需要写第几页显示几条数据即可,内部给你算好了
这个组件不是Mybatis自带的,而是国内的一个人写的
1.第一步:加入Maven坐标
pom.xml中加入PageHelper依赖
2.第二步:在主配置文件中加入 plugin 配置
在< environments>之前加入
3.第三步:添加方法执行方法
接口中
SQL映射文件中
查询所有的学生按id排序
主方法中使用PageHelper
例子是第1页显示3行数据,要查询第二页的只需要改一下pageNum为2即可