mybatis

mybatis知识点总结

第一章:三层模式

1.
三层架构

界面层:和用户打交道的,接收用户的请求参数,显示处理结果的(isp,html,servlet)

业务逻辑层:接收了界面层传递的数据,计算逻辑,调用数据库,获取数据

数据访问层: 就是访问数据库,执行对数据的查询,修改,删除等等的

三层对应的包

​ 界面层:controller包(servlet)

​ 业务逻辑层: service 包(xxxservice类)

​ 数据访问层:dao包(XXXDao类)

三层中类的交互

​ 用户使用界面层–>业务逻辑层—>数据访问层(持久层)–>数据库(mysq1

三层对应的处理框架

​ 界面层—servlet—springmvc(框架)
业务逻辑层—service类–spring(框架)
数据访问层—dao类–mybatis(框架)

2.
概念

​ 框架是一个舞台,一个模版

模版

​ 1.规定了好一些条款,内容
2.加入自己的东西

框架是一个模块

​ 1.框架中定义好了一些功能。这些功能是可用的
2.可以加入项目中自己的功能,这些功能可以利用框架中写好的功能

框架是一个软件,半成品的软件,定义好了一些基础功能,需要加入你的功能就是完整的。基础功能是可重复使用的,可升级的

框架特点:

​ 1.框架一般不是全能的, 不能做所有事情
2.框架是针对某一个领域有效。特长在某一个方面,比如mybatis做数据库操作强,但是他不能做其它的
3.框架是一个软件

3.
mybatis框架

​ 一个框架,早期叫做ibatis,代码在github
mybatis是MyBatis SQL Mapper Framework for Java (sq1映射框架)

1)sql mapper:sq1映射

​ 可以把数据库表中的一行数据,映射为一个java对象

​ 一行数据可以看做是一个java对象。操作这个对象,就相当于操作表中的数据

2) Data Access Objects(DAOs):

​ 数据访问,对数据库执行增删改查

mybatis提供了哪些功能

​ 1.提供了创建Connection,statement,Resultset的能力,不用开发人员创建这些对象
2.提供了执行sql语句的能力,不用你执行sql
3.提供了循环sql,把sql的结果转为java对象,List集合的能力

while(rs.next)){
        student stu=newstudent(); 
        stu.setid(rs.getInt("id"));
		stu.setName(rs.getstring("name")); 
        stu.setAge(rs.getInt("age"));
		//从数据库取出数据转为student对象,封装到List集合 stulist.add(stu);
}

​ 4.提供了关闭资源的能力,不用你关闭connection,statement,Resultset
开发人员做的是: 提供sq1语句

总结

mybatis是一个sql映射框架,提供的数据库的操作能力。增强的JDBC,使用mybatis让开发人员集中精神写sql就可以了,不必关心ConnectionstatementResultset的创建,销毁,sq1的执行

第二章:mybatis主要类
1.
主要类的介绍

​ 1)Resources:mybatis中的一个类,负责读取主配置文件

  Inputstream in=ResourcesgetResourceAsstream("mybatis.xml");

​ 2)SqlSessionFactoryBuilder:创建SqlsessionFactory对象

 SqlSessionFactoryBuilder builder=newSqlsessionFactoryBuilder();

​ //创建SqlsessionFactory对象

   SqlsessionFactoryfactory=builder.build(in):
3)SqlSessionFactory:重量级对象,程序创建一个对象耗时比较长,使用资源比较多。在整个项目中,有**一个**就够用了

SqlsessionFactory接口 :接口实现类:DefaultSqlsessionFactory
SqlSessionFactory作用:获取SqlSession对象

SqlSession sqlSession=factory.openSession();
**openSession**()方法说明:
					1.openSession():无参数的,获取是非自动提交事务的SqlSession对象
					2.openSession(boolean):opensession(true)获取自动提交事务的Sqlsession
					    					    openSession(false)非自动提交事务的Sqlsession对象

​ 4)SqlSession:
SglSession接口:定义了操作数据的方法例如selectOne(),selectList(),insert(),update(), delete(), commit(), rollback()

	Sqlsession接口的实现类DefaultSalSession

​ 使用要求:SqlSession对象不是线程安全的,需要在方法内部使用,在执行sq1语句之前,使用openSession()获取SqlSession在执行完sq1语句后,需要关闭它,执行SqlSessionclose(),这样能保证他的使用是线程安全的

第三章:动态代理
1.动态代理

​ 使用SqlsessiongetMapper(dao接口class)获取这 这个dao接口的对象

2.传入参数

​ 从java代码中把数据传入到mapper文件的sq1语句中
1)parameterType:写在mapper文件中的一个属性。表示dao接口中方法的参数的数据类型
例如studentDao接口

public Student selectstudentById(Integerid) 

​ 2)一个简单类型的参数:
简单类型:mybatis把java的基本数据类型和string都叫简单类型
在mapper文件获取简单类型的一个参数的值,使用#{任意字符 }

接口:public student selectstudentById(Integerid)
mapper:select idname,email age from student where id-#{studentid)  

​ 3)多个参数,使用@Param命名参数

接口 public List<student> selectMulitParam(@Param("myname ")string name,@Param("myage")Integerage) 
使用 @Param("参数名")stringname 
mapper文件:
<select>
	select *from student where name=#{myname}or age=#{myage} 
</select> 

​ 4)多个参数,使用java对象
语法 (属性名}
vo:value object,放一些存储数据的类。比如说提交请求参数,name,age,现在想把name,age传给一个service类
vo:view object,从servlet把数据返回给浏览器使用的类,表示显示结果的类
pojo:普通的有set,get方法的java类。普通的java对象
Servlet— studentservice(addstudent(MyParam param))
entity(domain域):实体类,和数据库中的表对应的类

​ 5)#和$

select idname, emailage from student whereid=#{studentid}
#的结果: select id,name,email,age from student where id=?
select id,name, email,age from student where id=S(studentid)
$的结果:select id,name,email,age from student where id=100
string sql-"select id,name,email,age from student where id="+"1001"
使用的statement对象执行sql,效率比Preparedstatement低。

​ $:可以替换表名或者列名,你能确定数据是安全的。可以使用

3.mybatis的输出结果

​ mybatis执行了sq1语句,得到java对象
1) resultType结果类型,指sq1语句执行完毕后,数据转为的java对象,java类型是任意的
resultType结果类型的它值1.类型的全限定名称2.类型的别名,例如javalang.Integer别名是int
处理方式:
1.mybatis执行sq1语句,然后mybatis调用类的无参数构造方法,创建对象
2.mybatis把Resultset指定列值付给同名的属性

<select id-"selectMultiPosition"resultType="com.bipowernode.domain.student"> 
	select idnameemailage from student
</select>
//对等的idbc
Resultset rs=executeQuery(" select idname, email age from student") while(rs.next()){
student student=newstudento: student.setId(rs.getInt("id"));
student.setName(rs.getstring("name"))
}

​ 2) 定义自定义类型的别名
1.在mybatis主配置文件中定义,使定义别名2)可以在resultType中使用自定义别名

​ 3)resultMap:结果映射,指定列名和java对象的属性对应关系
1.你自定义列值赋值给哪个属性
2.当你的列名和属性名不一样时,一定使用resultMap

​ resultMap和resultType不要一起用,二选一

第四章:动态sq1
1.动态sql:

​ sql的内容是变化的,可以根据条件获取到不同的sq1语句
主要是where部分发生变化
动态sql的实现,使用的是mybatis提供的标签,,,

​ 1)是判断条件的,
语法<iftest-“判断java对象的属性值”>部分sq1语句
2)用来包含多个的,当多个if有一个成立的,会自动增加一个where关键字,并去掉if中多余的and,or等

​ 3)循环java中的数组,list集合的。主要用在sql的in语句中

//学生id是1001,1002,1003的三个学生
select * from student where id in(100110021003)
public List<student> selectFor(List<Integer> idlist)
List<Integer> list=new... 
list.add(1001); 
list.add(1002);
list.add(1003):
dao.selectFor(list)
<foreach collection="" item="" open="" close="" separator-"">
</foreach>

​ collection:表示接口中的方法参数的类型,如果是数组使用array,如果是list集合使用list

​ item:自定义的,表示数组和集合成员的变量

​ open:循环开始是的字符

​ close:循环结束时的字符

​ separator:集合成员之间的分隔符

​ 4)sq1代码片段,就是复用一些语法步骤
1.先定义<sqlid=“自定义名称唯一”>sq1语句,表名,字段等
2.再使用,<includerefid-“id的值”/>

第五章:配置主配置文件
1.信息到一个单独的文件中。和mybatis主配置文件分开

​ 目的是便于修改,保存,处理多个数据库的信息
1)在resources目录中定义一个属性配置文件,xxxxproperties,例如jdbc.properties
在属性配置文件中,定义数据,格式是key=value key: 一般使用 做多级目录的。

 //例如
 jdbc.mysql.driver
 jdbc.driver, mydriver 
 jdbc.driver=com.mysqljdbc.Driver
 jdbc.url-jdbc:mysq1//...
 jdbc.username-root 
 jdbcpassword-123456

​ 2)在mybatis的主配置文件,使用指定文件的位置
在需要使用值的地方,${key}

2.mapper文件,使用package指定路径
<mappers>
<!--第二种方式:使用包名
	name:xm件(mapper文件)所在的包名,这个包中所有xml文件一次都能加载给mybatis使用package的要求:
	1mapper文件名称需要和接口名称一样,区分大小写的一样
	2.mapper文件和dao接口需要在同一目录 
-->
<package name="com.bjpowernode.dao"/>
</mappers>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值