一、框架概述
1、三层架构
第一层:界面层,和用户打交道,接收用户的请求参数,显示处理结果的(jsp, html, servlet)
第二层:业务逻辑层,接收了界面层传递的数据,计算逻辑,调用数据库,获取数据。
第三层:数据访问层,就是访问数据库,执行对数据的查询,修改,删除等等的。
三层对应的包:第一层,controller包(servlet)
第二层:service包(XXXService类)
第三层:dao包(XXXDao类)
三层中类的交互:用户使用界面层—>业务逻辑层---->数据访问层(持久层)---->数据库(MySQL)
三层对应的处理框架:
界面层:springMVC(框架)
业务逻辑层:spring
数据访问层:mybatis
2、框架概念
框架是一个模板,
①框架中定义好了一些功能,这些功能是可用的。
②可以加入项目中自己的功能,这些功能可以利用框架中写好的功能
框架是一个软件,半成品软件,定义好了一些基础功能,需要加入拟的功能才是完善的。这些基础功能是可以重复使用的,是可升级的。
框架的特点:
①框架一般不是全能的,不能做全部事情。
②框架是针对某一个领域有效,特长在某一个方面,比如mybatis在做数据库操作强,但是它不能做其他的。
③框架是一个软件。
3、jdbc的缺陷
代码多,效率低,重复代码较多,业务代码会和数据库操作代码混合在一起。
4、mybatis能做什么
是一个sql映射框架。
①sql mapper:sql映射。
可以把数据库表中的一行数据映射为一个java对象。
一行数据可以看作是一个java对象。
操作这个对象就相当于操作表中的数据。
②data access object :数据访问。
对数据库执行增删改查。
mybatis提供的功能:
①提供了创建connection , statement , resultset 的能力,不用开发人员创建这些对象了。
②提供了执行sql语句的能力,不用你执行sql。
③提供了循环sql,把sql的结果转为java对象,List集合的能力。
④提供了关闭资源的能力,不用你关闭connection , statement , resultset。
开发人员要做的是:
①提供sql语句。
最后是开发人员提供sql语句,mybatis执行,开发人员得到list集合或者java对象(是表中数据)。
总结:mybatis是一个sql映射框架,提供的数据库操作能力,是增强版JDBC。使用mybatis让开发人员集中精神写sql语句就可以,不必关心connection , statement , resultset 的创建和关闭。
二、mybatis
1、主要类的介绍
1)resources:mybatis中的一个类,负责读取主配置文件。
InputStream in = Resources.getResourceAsSteam(“mybatis.xml”)
2)SqlSessionFactoryBuilder:创建SqlSessionFactory对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
3)SqlSessionFactory:重量级对象,程序创建一个这种对象耗时长,使用资源多。在整个项目中,有一个就够用了。
SqlSessionFactory是一个接口,接口实现类:DefaultSqlSessionFactory
SqlSessionFactory作用:获取SqlSession对象。
4)SqlSession:是个接口,定义了操作数据库的方法,例如selectOne().insert(),commit()
SqlSession接口实现类:DefaultSqlSession()
使用要求:SqlSession对象不是线程安全的,需要在方法内部使用,在执行sql语句之前,使用openSession()获取SqlSession,在执行完sql语句后,需要关闭它,执行SqlSession.close(),这样能保证他的使用是线程安全的。
三、
1.动态代理:使用SqlSession。getMapper(dao接口.class) 获取这个dao接口的对象
2、传入参数:从java代码中把数据传入到mapper文件的sql语句中。
1)、parameterType:写在mapper文件中的一个属性,表示dao接口中方法的参数的数据类型。
例如studentDao接口
public Student selectStudentById (Integer id)
2)、一个简单类型的参数:
简单类型:mybatis把java的基本数据类型和string都叫简单类型。在mapper文件获取简单类型的一个参数的值,使用#{任意字符}
3)、多个参数,使用@param命名参数。
接口public List selectMulitParam(@param (“myname”) String name,@param (“myage”) , Integer age)
使用 @param (“参数名”) String name
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 id ,name ,email ,age from student where id = ?
的
结
果
:
s
e
l
e
c
t
,
i
d
,
n
a
m
e
,
e
m
a
i
l
,
a
g
e
f
r
o
m
s
t
u
d
e
n
t
w
h
e
r
e
i
d
=
1001
尽
量
不
用
的结果:select,id,name ,email ,age from student where id = 1001 尽量不用
的结果:select,id,name,email,agefromstudentwhereid=1001尽量不用,用#。