MyBatis(一)原理过程实现crud以及自增主键的返回

MyBatis是一个用在持久层的框架,也就是操作数据库的。

在前面的学习中,我们通过原生jdbc操作数据库。以及spring框架中封装的JdbcTemplate框架来操作数据库。

原生态jdbc程序问题

(1)数据库的连接关闭操作复杂,效率慢

(2)sql语句的编写和preparedStatement执行sql语句中注入参数都是在java语句中,是硬编码

(3)从resutSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,不利于系统维护

硬编码是指将可变变量用一个固定值来代替的方法,用这种方法编译后,如果以后需要更改此变量就非常困难了

spring框架中封装的JdbcTemplate框架

可以在配置文件中,配置了c3p0数据连接池,这方面改善了,但是还是存在硬编码问题


 

MyBatis框架原理

(1)全局配置文件SqlMapConfig.xml,里面配置数据源,事务,运行环境

(2)sqlSessionFactory会话工厂,根据配置文件来创建工厂,它的作用就是产生sqlSeesion

(3)sqlSeesion会话,是一个接口,用来执行sql语句,调用Executor(执行器)来执行

(4)在mybatis中sql语句不再写到java程序代码中,而是写在mapper.xml的配置文件中,这叫做表的映射文件。比如在我们的项目中对应的表有很多。有user表,item表,对这些表都会有增删改查的操作,我们就会为这些表都创建映射文件然后在文件中配置相应的sql语句,然后通过sqlSession来执行。但是前面说SqlMapConfig.xml是全局配置文件,所以要把所有的映射文件加载到全局配置文件

(4)mapped stattement底层封装对象,对数据库存储封装,包括sql语句,输入参数,输出参数类型等

总结:mybatis主要放在sql语句中,实现了输入映射和输出映射

mybatis入门程序

(1)mybatis运行环境搭建,导入jar包

MyBatis(一)原理过程实现crud以及自增主键的返回_第1张图片

(2)开始配置mybatis全局配置文件sqlMapConfig.xml,如下,配置数据库连接和运行环境




	
	
	
		
		
			
		
			
				
				
				
				
			
		
	

	

(3)实现查询需求

  • 根据id查询user表 

首先创建po类 

MyBatis(一)原理过程实现crud以及自增主键的返回_第2张图片

创建user的映射文件,主要配置sql语句,查询时select标签,主要是paramterTyper传入参数类型和resultType获取结果对象的类型,其中#{}就是占位符的概念

#{}通过ognl表达式,调用属性的get方法来获得传入参数,如果传入的参数是简单类型。括号中的变量名可以是任意名字






	
	

把映射文件加载到全局映射文件中,利用mappers标签,把映射文件的路径传给source属性

然后开始写程序,在程序中执行配置好的sql语句,按照上面的流程,先创建sqlSessionFactory工厂,把全局配置文件传进去,然后打开sqlsession开始执行映射文件配置好的sql,因为根据id查询时返回一条记录,所有使用selectOne()方法。方法的第一个参数就是我们映射文件配置sql语句的id,一般是映射文件中namespace.id名(这里我使用id也可以,因为只是简单测试,namespace主要是对sql进行分化管理,后面会游泳重要作用),根据这个id,sqlsession找到要执行的sql语句,然后输入参数,参数类型和占位符信息也在映射文件中,并且我们也配置了输出类型是User,所以返回值就是user对象

 MyBatis(一)原理过程实现crud以及自增主键的返回_第3张图片

  • 根据name查询user表

那这个方法与上面方法类似,只是name属性不是User表的主键,不能唯一确定一条数据,所以返回的结果应该是一个List集合,

首先还是在user的映射文件中,配置这个需求的sql,虽然我们结果返回的是list,但是list中的元素都是user对象,所以resulyType类型还是user,这里我们采用模糊查询,使用${},意思是会把value的值不做任何处理拼接在sql语句中,这样的问题就是会有sql注入,下面的结果展示我们可以看到查询的sql语句

MyBatis(一)原理过程实现crud以及自增主键的返回_第4张图片

编写程序执行配置好的sql语句,这次调用的方法是slectList()方法,参数意义与selectOne()一样

MyBatis(一)原理过程实现crud以及自增主键的返回_第5张图片

MyBatis(一)原理过程实现crud以及自增主键的返回_第6张图片

  • 添加、删除和更新

映射文件的配置 

MyBatis(一)原理过程实现crud以及自增主键的返回_第7张图片

在程序代码中增删改都需要手动提交事务 

 MyBatis(一)原理过程实现crud以及自增主键的返回_第8张图片

 MyBatis(一)原理过程实现crud以及自增主键的返回_第9张图片

MyBatis(一)原理过程实现crud以及自增主键的返回_第10张图片

返回自增主键 

一般在实际应用中,对于刚插入的新数据,我们可能会要获得它的id号,在配置文件中修改如下

 

MyBatis(一)原理过程实现crud以及自增主键的返回_第11张图片

如果不加selectkey,输出的id就是0 

MyBatis(一)原理过程实现crud以及自增主键的返回_第12张图片

非自增主键返回

那么非自增主键用的是select uuid()方法,由于是费自增,这个方法配置是order属性应该是BEGORE 

你可能感兴趣的:(mybatis)