Mybatis介绍
1、Mybatis是什么?
mybatis就是一个封装来jdbc的持久层框架,它和hibernate都属于ORM框架,但是具体的说,hibernate是一个完全的orm框架,而mybatis是一个不完全的orm框架。
Mybatis让程序员只关注sql本身,而不需要去关注如连接的创建、statement的创建等操作。
Mybatis会将输入参数、输出结果进行映射。
Mybatis的框架原理
2、为什么要用Mybatis?
mybatis与hibernate的区别及各自应用场景
(1)Mybatis技术特点:
通过直接编写SQL语句,可以直接对SQL进行性能的优化。
学习门槛低,学习成本低。只要有SQL基础,就可以学习mybatis,而且很容易上手。
由于直接编写SQL语句,所以灵活多变,代码维护性更好。
不能支持数据库无关性,即数据库发生变更,要写多套代码进行支持,移植性不好。
(2)Hibernate技术特点:
标准的orm框架,程序员不需要编写SQL语句。
具有良好的数据库无关性,即数据库发生变化的话,代码无需再次编写。
学习门槛高,需要对数据关系模型有良好的基础,而且在设置OR映射的时候,需要考虑好性能和对象模型的权衡。
程序员不能自主的去进行SQL性能优化。
(3)Mybatis应用场景:
需求多变的互联网项目,例如电商项目。
(4)Hibernate应用场景:
需求明确、业务固定的项目,例如OA项目、ERP项目等。
3、Mybatis怎么用??
笔记03_P188
例题:mybatis_day01
入门程序:
3.1、需求
对订单商品案例中的用户表进行增删改查操作
根据用户ID查询用户信息
根据用户名称模糊查询用户列表
添加用户
删除用户
修改用户
3.2、环境准备
Jdk:1.7
Ide:idea xxxx
Mybatis:3.2.7
数据库:MySQL 5X
mybaits的代码由github.com管理,下载地址:https://github.com/mybatis/mybatis-3/releases
mybatis-3.2.7
数据库和用户表:
3.3、工程搭建
第一步:创建java工程
第二步:加入jar包
加入以下四部分jar包,其中junit的jar包,是非必须的。
Mybatis核心包
Mybatis依赖包
MySQL驱动包
Junit单元测试包(单元测试需要的包)
第三步:添加log4j.properties文件
Mybatis使用的日志包是log4j的,所以需要添加log4j.properties。
日志级别在开发阶段设置成DEBUG,在生产阶段设置成INFO或者ERROR。
3.4、编程步骤
(1)创建PO类,根据需求创建;
(2)创建全局配置文件SqlMapConfig.xml;
(3)编写映射文件;
(4)加载映射文件,在SqlMapConfig.xml中进行加载;
(5)编写测试程序,即编写Java代码,连接并操作数据库。
思路:
①读取配置文件;
②通过SqlSessionFactoryBuilder创建SqlSessionFactory会话工厂。
③通过SqlSessionFactory创建SqlSession。l
④调用SqlSession的操作数据库方法。
⑤关闭SqlSession。
3.5、代码实现
(1)创建po类
(2)创建全局配置文件
在config目录下,创建SqlMapConfig.xml文件,该名称不是固定不变的。
(3)需求开发
需求一、根据用户ID查询用户信息
映射文件
在config目录下,创建User.xml(这种命名规范是由ibatis遗留下来)
在全局配置文件中加载映射文件
测试代码
MybatisFirst.class类中:
需求二、根据用户名称模糊查询用户列表
略
需求三、添加用户
略
需求四、删除用户
略
需求五、修改用户
略
3.6、小结
(1)#{}和${}
#{}表示占位符?,#{}接收简单类型的参数时,里面的名称可以任意
${}表示拼接符,${}接收简单类型的参数时,里面的名称必须是value
${}里面的值会原样输出,不加解析(如果该参数值是字符串,有不会添加引号)
${}存在sql注入的风险,但是有些场景下必须使用,比如排序后面会动态传入排序的列名
(2)parameterType和resultType
parameterType指定输入参数的java类型,parameterType只有一个,也就是说入参只有一个。
resultType指定输出结果的java类型(是单条记录的java类型)
(3)selectOne和selectList
selectOne查询单个对象
selectList查询集合对象