mybatis框架

题目

1.	mybatis的概述
	mybatis的环境搭建
	mybatis入门案例
2、	Mybatis基于代理Dao的CRUD操作					重点内容
	CRUD中可能遇到的问题:参数的传递以及返回值的封装
	介绍Mybatis基于传统dao方式的使用(自己编写dao的实现类)	了解的内容
	mybatis主配置文件中的常用配置
	properties标签
	typeAliases标签				---解释Integer的写法
	mappers标签的子标签:package
3、	mybatis中的连接池以及事务控制			
	mybatis中连接池使用及分析
	mybatis事务控制的分析

	mybatis基于XML配置的动态SQL语句使用		
	mappers配置文件中的几个标签:
		
		
		
		

	mybatis中的多表操作				
	一对多
	一对一
	多对多

内容

1、什么是框架?
	它是我们软件开发中的一套解决方案,不同的框架解决的是不同的问题。
	使用框架的好处:
		框架封装了很多的细节,使开发者可以使用极简的方式实现功能。大大提高开发效率。
2、三层架构
	表现层:
		是用于展示数据的
	业务层:
		是处理业务需求
	持久层:
		是和数据库交互的
3、持久层技术解决方案
	JDBC技术:
		Connection
		PreparedStatement
		ResultSet
	Spring的JdbcTemplate:
		Spring中对jdbc的简单封装
	Apache的DBUtils:
		它和Spring的JdbcTemplate很像,也是对Jdbc的简单封装

	以上这些都不是框架
		JDBC是规范
		Spring的JdbcTemplate和Apache的DBUtils都只是工具类

4、mybatis的概述
	mybatis是一个持久层框架,用java编写的。
	它封装了jdbc操作的很多细节,使开发者只需要关注sql语句本身,而无需关注注册驱动,创建连接等繁杂过程
	它使用了ORM思想实现了结果集的封装。

	ORM:
		Object Relational Mappging 对象关系映射
		简单的说:
			就是把数据库表和实体类及实体类的属性对应起来
			让我们可以操作实体类就实现操作数据库表。

			user			User
			id				userId
			user_name		userName
	我们需要做到
		实体类中的属性和数据库表的字段名称保持一致。
			user			User
			id				id
			user_name		user_name
5、mybatis的入门
	mybatis的环境搭建
		第一步:创建maven工程并导入坐标
		第二步:创建实体类和dao的接口
		第三步:创建Mybatis的主配置文件
				SqlMapConifg.xml
		第四步:创建映射配置文件
				IUserDao.xml
	环境搭建的注意事项:
		第一个:创建IUserDao.xml 和 IUserDao.java时名称是为了和我们之前的知识保持一致。
			在Mybatis中它把持久层的操作接口名称和映射文件也叫做:Mapper
			所以:IUserDao 和 IUserMapper是一样的
		第二个:在idea中创建目录的时候,它和包是不一样的
			包在创建时:com.itheima.dao它是三级结构
			目录在创建时:com.itheima.dao是一级目录
		第三个:mybatis的映射配置文件位置必须和dao接口的包结构相同
		第四个:映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名
		第五个:映射配置文件的操作配置(select),id属性的取值必须是dao接口的方法名

		当我们遵从了第三,四,五点之后,我们在开发中就无须再写dao的实现类。
	mybatis的入门案例
		第一步:读取配置文件
		第二步:创建SqlSessionFactory工厂
		第三步:创建SqlSession
		第四步:创建Dao接口的代理对象
		第五步:执行dao中的方法
		第六步:释放资源

		注意事项:
			不要忘记在映射配置中告知mybatis要封装到哪个实体类中
			配置的方式:指定实体类的全限定类名
		
		mybatis基于注解的入门案例:
			把IUserDao.xml移除,在dao接口的方法上使用@Select注解,并且指定SQL语句
			同时需要在SqlMapConfig.xml中的mapper配置时,使用class属性指定dao接口的全限定类名。
	明确:
		我们在实际开发中,都是越简便越好,所以都是采用不写dao实现类的方式。
		不管使用XML还是注解配置。
		但是Mybatis它是支持写dao实现类的。
OGNL表达式:
	Object Graphic Navigation Language
	对象	图	导航	   语言
	
	它是通过对象的取值方法来获取数据。在写法上把get给省略了。
	比如:我们获取用户的名称
		类中的写法:user.getUsername();
		OGNL表达式写法:user.username
	mybatis中为什么能直接写username,而不用user.呢:
		因为在parameterType中已经提供了属性所属的类,所以此时不需要写对象名
1、连接池:
	我们在实际开发中都会使用连接池。
	因为它可以减少我们获取连接所消耗的时间。
2、mybatis中的连接池
	mybatis连接池提供了3种方式的配置:
		配置的位置:
			主配置文件SqlMapConfig.xml中的dataSource标签,type属性就是表示采用何种连接池方式。
		type属性的取值:
			POOLED	 采用传统的javax.sql.DataSource规范中的连接池,mybatis中有针对规范的实现
			UNPOOLED 采用传统的获取连接的方式,虽然也实现Javax.sql.DataSource接口,但是并没有使用池的思想。
			JNDI	 采用服务器提供的JNDI技术实现,来获取DataSource对象,不同的服务器所能拿到DataSource是不一样。
				 注意:如果不是web或者maven的war工程,是不能使用的。
				 我们课程中使用的是tomcat服务器,采用连接池就是dbcp连接池。
3、mybatis中的事务
	什么是事务
	事务的四大特性ACID
	不考虑隔离性会产生的3个问题
	解决办法:四种隔离级别

	它是通过sqlsession对象的commit方法和rollback方法实现事务的提交和回滚
4、mybatis中的多表查询
	表之间的关系有几种:
		一对多
		多对一
		一对一
		多对多
	举例:
		用户和订单就是一对多
		订单和用户就是多对一
			一个用户可以下多个订单
			多个订单属于同一个用户

		人和身份证号就是一对一
			一个人只能有一个身份证号
			一个身份证号只能属于一个人

		老师和学生之间就是多对多
			一个学生可以被多个老师教过
			一个老师可以交多个学生
	特例:
		如果拿出每一个订单,他都只能属于一个用户。
		所以Mybatis就把多对一看成了一对一。
	
	mybatis中的多表查询:
		示例:用户和账户
			一个用户可以有多个账户
			一个账户只能属于一个用户(多个账户也可以属于同一个用户)
		步骤:
			1、建立两张表:用户表,账户表
				让用户表和账户表之间具备一对多的关系:需要使用外键在账户表中添加
			2、建立两个实体类:用户实体类和账户实体类
				让用户和账户的实体类能体现出来一对多的关系
			3、建立两个配置文件
				用户的配置文件
				账户的配置文件
			4、实现配置:
				当我们查询用户时,可以同时得到用户下所包含的账户信息
				当我们查询账户时,可以同时得到账户的所属用户信息

		示例:用户和角色
			一个用户可以有多个角色
			一个角色可以赋予多个用户
		步骤:
			1、建立两张表:用户表,角色表
				让用户表和角色表具有多对多的关系。需要使用中间表,中间表中包含各自的主键,在中间表中是外键。
			2、建立两个实体类:用户实体类和角色实体类
				让用户和角色的实体类能体现出来多对多的关系
				各自包含对方一个集合引用
			3、建立两个配置文件
				用户的配置文件
				角色的配置文件
			4、实现配置:
				当我们查询用户时,可以同时得到用户所包含的角色信息
				当我们查询角色时,可以同时得到角色的所赋予的用户信息
1、Mybatis中的延迟加载
	问题:在一对多中,当我们有一个用户,它有100个账户。
	      在查询用户的时候,要不要把关联的账户查出来?
	      在查询账户的时候,要不要把关联的用户查出来?
		
	      在查询用户时,用户下的账户信息应该是,什么时候使用,什么时候查询的。
	      在查询账户时,账户的所属用户信息应该是随着账户查询时一起查询出来。

	什么是延迟加载
		在真正使用数据时才发起查询,不用的时候不查询。按需加载(懒加载)
	什么是立即加载
		不管用不用,只要一调用方法,马上发起查询。
	
	在对应的四种表关系中:一对多,多对一,一对一,多对多
		一对多,多对多:通常情况下我们都是采用延迟加载。
		多对一,一对一:通常情况下我们都是采用立即加载。

2、Mybatis中的缓存
	什么是缓存
		存在于内存中的临时数据。
	为什么使用缓存
		减少和数据库的交互次数,提高执行效率。
	什么样的数据能使用缓存,什么样的数据不能使用
		适用于缓存:
			经常查询并且不经常改变的。
			数据的正确与否对最终结果影响不大的。
		不适用于缓存:
			经常改变的数据
			数据的正确与否对最终结果影响很大的。
			例如:商品的库存,银行的汇率,股市的牌价。
	Mybatis中的一级缓存和二级缓存
		一级缓存:
			它指的是Mybatis中SqlSession对象的缓存。
			当我们执行查询之后,查询的结果会同时存入到SqlSession为我们提供一块区域中。
			该区域的结构是一个Map。当我们再次查询同样的数据,mybatis会先去sqlsession中
			查询是否有,有的话直接拿出来用。
			当SqlSession对象消失时,mybatis的一级缓存也就消失了。
		
		二级缓存:
			它指的是Mybatis中SqlSessionFactory对象的缓存。由同一个SqlSessionFactory对象创建的SqlSession共享其缓存。
			二级缓存的使用步骤:
				第一步:让Mybatis框架支持二级缓存(在SqlMapConfig.xml中配置)
				第二步:让当前的映射文件支持二级缓存(在IUserDao.xml中配置)
				第三步:让当前的操作支持二级缓存(在select标签中配置)
3、Mybatis中的注解开发
	环境搭建
	单表CRUD操作(代理Dao方式)
	多表查询操作
	缓存的配置

你可能感兴趣的:(java-web,mybatis,java)