day01 mybatis入门
课程计划:orm --- jdbc封装
1、原生jdbc开发问题的总结
2、mybatis的介绍和原理
3、mybatis的入门程序(CRUD)
4、mybatis两种dao的开发方式
5、mybatis的全局配置文件
1原生jdbc开发的问题总结1.1准备条件
1.1.1导入jar
数据库驱动包
1.1.2数据
执行sql脚本。
1.2编码
1.3jdbc开发存在的问题
1、数据库连接的频繁获取与释放--→造成数据库吞吐量过大--→降低数据的性能--→从而降
低了APP的性能;
2、结果集的不易处理;
3、传递的参数类型比较单一
4、硬编码问题--- 程序不灵活
●查询条件
●查询条件的值
●显示的列
●sql语句
1.4解决问题
1、通过数据库连接池:c3p0、dbcp、druid(阿里)
2、手动处理
3、手动处理
4、硬编码---抽取出来-→数据的表维护、xml维护sql语句----解析xml并执行其中sql语句-
-- mybatis可以完成这个操作。
orm框架-→jdbc封装--→简化了我们开发(面向对象)
2mybatis的介绍和框架原理
2.1介绍
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。
2013年11月迁移到Github。
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。
iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)
2.2hibernate框架原理
执行流程:***.hbm.xml(映射文件)
-→hibernate.cfg.xml(全局配置文件)
-→configuration加载全局配置文件
-→会话工厂(SessionFactory)
--→会话(session)--
→有了一切(API的调用,注意:如果是增、删、改:开始事务并且提交事务)。
orm框架:数据的表-----pojo相互映射。
2.3mybatis的框架原理
mybatis:也是orm框架
执行流程:映射文件(编写sql语句)
--→全局配置文件(加载映射文件、配置延迟加载)
--→SqlSessionFactoryBuilder(加载全局配置文件)
--→SqlSessionFactory(会话工厂)
-→SqlSession(会话)
----API调用(注意:增、删、改需要提交事务。
)3mybatis入门程序
3.1需求
1、根据id查询用户信息
2、根据username模糊查询用户信息
3、添加用户
4、修改用户
5、删除用户
3.2准备工作
3.2.1导入jar
3.2.2编写全局配置文件
3.2.3编写日志文件
3.3根据id查询用户信息3.3.1分析
1、查询条件----id
2、返回结果---object----user
3.3.2创建user对象
3.3.3编写映射文件
3.3.4加载映射文件
3.3.5编码测试
3.4根据username模糊查询用户信息3.
4.1编写映射文件
3.4.2编写测试代码
3.4.3sql注入
3.5添加用户
3.5.1编写映射文件
3.5.2编写测试代码
3.5.3mysql数据库引擎
分配自增id的策略:先分配,后使用。
不管之前的操作是否成功或失败,分配的id不会回收(回滚。
)
3.6获取返回自增主键的id
3.6.1使用场景
3.6.2编写映射文件
3.6.3编写测试代码
3.6.4使用uuid SELECT UUID()执行该条sql。
3.7根据id修改用户3.7.1编写映射文件
3.7.2编写测试代码
3.8根据id删除用户3.8.1编写映射文件
3.8.2编写测试代码
4mybatis的两种dao的开发方式4.1三个对象
4.1.1SqlSessionFactoryBuilder
作用:加载mybatis的全局配置文件-- 获取会话工厂
使用范围:作为局部变量使用。
相当于工巨类
4.1.2SqlSessionFactory
作用:生成会话
使用范围:只存在一份该对象的实例----可以通过单例来维护该对象4.1.3SqlSession
作用:操作API
使用范围:作为局部变量是使用
sqlsession的创建过程:
4.2传统dao的开发4.2.1步骤
编写接口、实现类
4.2.2编写接口
4.2.3编写实现类
4.2.4编码测试
4.3通过mapper代理开发dao 4.3.1步骤以及规范
1、只需要编写接口
2、namespace:接口的全类路径名称
3、id:必须与接口的方法名保持一致
4、接口方法的参数类型必须与映射文件保持一致
5、接口方法的返回值类型必须与映射文件保持一致4.3.2编写接口
4.3.3编写映射文件
4.3.4加载到全局配置文件中
4.3.5编码测试
4.3.6使用的是哪种代理---jdk代理
1、jdk代理:面向接口,称为动态代理
2、cglib代理:面向实体类,称为静态代理
5mybatis的全局配置文件
5.1标签
properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, objectWrapperFactory?, plugins?, environments?, databaseIdProvider?, mappers? ?:代表0个或者一个
*:代表0个或者多个
大部分情况这些标签都是有顺序的。
5.2properties
作用:加载外部资源文件
注意:
5.3typeAliases 作用:设置别名
5.3.1单个别名的设置
5.3.2批量别名的设置
5.3.3默认支持的别名
5.4mappers
作用:加载映射文件
5.4.1单个映射文件的加载
5.4.2通过接口加载单个映射文件----了解
规范:
1、接口名与映射文件名称必须一致
2、接口和映射文件在同一目录下
5.4.3批量映射文件的加载。