**
SSM框架:MyBatis、spring、springmvc
**
MyBatis框架:对JDBC的操作数据库进行封装.
spring框架:本质:管理软件中的对象,即创建对象和维护对象之间的关系.核心:IOC和AOP.提供了表现层SpringMVC和持久层SpringJDBC以及业务层事务管理.
SpringMVC框架:他是属于spring框架的一个模块.
MVC:是一种设计模式,MVC设计模式认为任何软件(项目)都可以分为三个部门:控制程序流转的控制器(Controller):如:接收浏览器请求,调用业务层,分配页面,封装数据处理数据的模型(Model):如:POJO,service,Dao,负责展示数据的视图(view):如:JSP
**
MyBatis框架:
**
使用MyBatis之前,使用JDBC实现数据库操作:
(1)使用JDBC访问数据库有大量重复代码(比如注册驱动、获取连接、获取传输器、释放资源等);
(2)JDBC自身没有连接池,会频繁的创建连接和关闭连接,效率低;
(3)SQL是写死在程序中,一旦修改SQL,需要对类重新编译;
(4)对查询SQL执行后返回的ResultSet对象,需要手动处理,有时会特别麻烦;
使用MyBatis框架之后:
(1)Mybatis对JDBC对了封装,可以简化JDBC代码;
(2)Mybatis自身支持连接池(也可以配置其他的连接池),因此可以提高程序的效率;
(3)Mybatis是将SQL配置在mapper文件中,修改SQL只是修改配置文件,类不需要重新编译。
(4)对查询SQL执行后返回的ResultSet对象,Mybatis会帮我们处理,转换成Java对象。
mybatis-config.xml:MyBatis
全局配置文件
"http://mybatis.org/dtd/mybatis-3-config.dtd"
下载约束文件:这个约束文件告诉我们这个文件内可以写哪些配置和标签.
configuration
(配置):MyBatis的配置都在这里面写.
environments
(环境):配置开发环境
属性:default
(默认):这里指定使用environments中哪个environment环境配置,填写environment的id值
environment
(环境):
属性:id
(编号):用来区分其他环境配置
transactionManager
(事物管理器):在这里配置事物的管理方式
属性:type
(类型):这里填写事物管理方式是什么类型:两种–JDBC–MANAGED
dataSource
(数据源(连接池)):这里配置数据库
属性:type
(类型):这里填写mybatis获取连接的方式:三种:POOLED–UNPOOLED–JNDI:都实现java.sql.dataSource接口规范,只是其内部的原理不同
property
(属性):这里配置数据库的链接
属性:name
(名字):这里分别写注册驱动,数据库连接,数据库用户名和密码的名字
属性:value
(值):这里分别写注册驱动,数据库连接,数据库用户名和密码的值
mappers
(映射):导入存放SQL语句的文件,读取到这里程序才能找到你写SQL语句的文件.
属性:resource
(资源):这里写存放SQL语句的文件的文件路径,该属性已经指向classpath路径
--通过以上配置文件中的mappers标签配置,我们找到了属性resource中写的文件,并进入该文件.
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"
下载约束文件:这个约束文件告诉我们这个文件内可以写哪些配置和标签.
mapper
(映射):这个标签内要写SQL语句的标签
属性:namespace
(名称空间):这里是mapper这个标签的名字,于接口名对应,程序要找的mapper标签的内SQL语句标签就要靠这个属性内的值+mapper内标签的id值
select
(查询标签):这个标签内些查询的SQl语句
属性:id
(标志):这个标签是独一无二的,要和之前的namespace属性一起使用,来定位到SQL语句标签
属性:resultType
(可以输出简单类型):这个属性填写的是查询SQL语句执行后返回值的类型或者集合中的泛型的权限定名称(包名+类名),这个属性可以让数据库表的列名和返回值的类的属性名一一对应,但前提是列名和属性名必须完全一致.
属性:resultMap
(复杂类型):这个属性填写的是resultMap标签的id属性值,这个标签的作用是连接resultMap标签
resultMap
(复杂类型):这个标签填写pojo类的属性名和数据库表的列名,使他们一一对应,多表查询的时候也要使用这个标签
属性:id
(标志):这里是resultMap的标志,通过这个属性的值可以找到这个标签.
属性:type
(类型):这里写要对应的返回值的类的权限定类名,通过这个属性找到类.
属性:extends
(继承):这里填写其他resultMap标签的id值,可以继承其他resultMap标签内的内容
id
(标志):这个标签用来设置主键字段的对应
属性:column
(列):这里写数据库表的列名
属性:property
(属性):这里写pojo类的属性名
result
(结果):这个标签用来设置普通字段的对应
属性:column
(列):这里写数据库表的列名
属性:property
(属性):这里写pojo类的属性名
association
(关联):这个标签用来配置一对一表的查询,在一个pojo类中有一个pojo类的对象.如:User类中有一个属性是 private Student stu;Student同样也对应一张表.
属性:property
(属性):这里写pojo类中的对象属性的名字.如:stu
属性:javaType
(java对象类型):这里写pojo类的类型.如:Student
属性:resultMap
(复杂类型):用来连接一个resultMap标签.使用这个属性就不使用javaType属性了.
理解:一个名为stu,类型为Student的Student类
collection
(收集):这个标签用来配置一对多表的查询.在一个pojo类中有一个集合,这个集合封装了多个pojo类.如:User 类中有一个属性是 private List stus;这个集合中包含了多个student表.
属性:property
(属性):这里写pojo类中集合属性的名字.如:stus
属性:javaType
(java对象类型):这里写集合的类型.如:list
属性:ofType
(类型筛选):这里写集合泛型,用来区分对象和集合,如:Student
理解:一个名为stus,类型为Student的List集合
spring框架:
applicationContext.xml
:Spring核心配置文件,这个配置文件用来创建实例对象
bean
:这个标签用来创建实例对象
属性:id
(标志):通过这个属性的值获取这个bean的实例对象,这里默认为类名,首字母小写.
属性:class
(类):这里填写实现类的全限定类名,这个指定创建哪个类的实例对象
这个标签还可以用来给属性赋值,用到以下属性:
属性:scope
(作用域):这个属性用来指定是单实例还是多实例.
属性值:singletch
(一个):默认的,单实例,就是只创建一个对象,所有人用的都是这一个对象
属性值:prototype
(原型):多实例,每次获取这个对象都要创建一个新的对象
property
(属性):这个标签用来使用set方法给对象属性赋值
属性:name
(名字):这个属性写对象的属性名
属性:value
(值):这个属性用来写要赋值的值
constructor
(构造器):这个标签用来使用构造方法给对象的属性赋值
属性:name
(名字):这个属性写对象的属性名
属性:value
(值):这个属性用来写要赋值的值
这个class中是一个mapper接口扫描器的类,这个类中有一个属性是basePackage.
这个配置的意思是:使用set方法,给basePackage
属性赋值,值是(扫描)com.tedu.dao
包下的所有接口,给这些接口提供实现类.
这个配置中的id值是固定的,在SqlSessionFactoryBean
类的内部有三个属性:
configLocation
:
value
表示一个简单属性,classpath:mybatis/mybatis-config.xml
,MyBatis核心配置文件的位置
mapperLocations
:
value
表示一个简单属性,classpath:mybatis/mapper/*.xml
,MyBatis的所有mapper文件,XxxMapper.xml文件
dataSource
:
ref
指向的是一个id值dataSource
,ref属性与以下配置对应,用来创建连接池对象.
value="${db.driverClassName}"
:该属性表示从一个Xxx.properties文件中加载的.该文件通过以下配置引入
SpringMVC框架:
web.xml
配置前端控制器:什么是前端控制器呢?前端控制器其实就是一个类:DispatcherServlet
.前段控制器的配置是两个标签组成的一组标签配置:
<servlet>
<servlet-name></servlet-name>
<servlet-class></servlet-class>
</servlet>
<servlet-mapping>
<servlet-name></servlet-name>
<url-pattern></url-pattern>
</servlet-mapping>
servlet
(控制器):这个配置下要找到两个东西,一个是SpringMVC的前端控制器
,一个是SpringMVC核心配置文件
servlet-name
:这个标签是给前端控制器起个名字,不是固定的,这个名字要和servlet-mapping
标签的子标签servlet-name
的名字一致,证明他们是一组配置,建议使用springmvc
servlet-class
:这个标签找到前端控制器的类(这个类的权限定类名),这个类是底层的,不需要自己去写,org.springframework.web.servlet.DispatcherServlet
.
init-param
(初始化参数):这个标签要找到springmvc的核心配置文件
:springmvc-config.xml
.
param-name
(参数-名字):这个名字是固定的(严格区分大小写),使用contextConfigLocation
(上下文配置位置),springmvc-config.xml
.的位置:classpath(这个单词是类目录的意思):spring/*.xml
.这个配置的意思是,在类目录下的spring目录下的所有xml文件,这里面就有springmvc-config.xml
文件
param-value
(参数-值):这里填写springmvc-config.xml
,的路径
servlet-mapping
(前段控制器-映射):这个配置要拦截除了jsp意外的所有请求,让这些请求都要交给springmvc前段控制器管理,这样除jsp外其他,如:css,html,js等都无法再访问到,想要访问到这些请求,必须要配置一个放行,这个放行在哪里呢?他在springmvc-config.xml文件中配置,那如何找到这个配置呢?就在servlet标签内的子标签init-param标签内配置.
servlet-name
:这个标签要和servlet标签的子标签servlet-name标签一致,这样才知道这个配置是和前端控制器为一组配置
url-pattern
(映射路径):这里的映射路径填/
,就是这个实现了拦截除了jsp意外的所有请求.
通过以上配置,我们找到了SpringMVC的核心配置文件springmvc-config.xml
上一个配置拦截了除jsp外的所有请求,在这个配置内,我们要对这些请求进行放行:
<mvc:default-servlet-handler/>(mvc默认控制器处理程序):,这个标签就是对静态资源的放行.
<mvc:annotation-driven>(mvc注解驱动):这个标签配置注解驱动,用于识别注解
<context:component-scan>(上下文:组件-扫描):这个标签配置需要扫描的包.
属性:base-package
(基础-包):这里写需要扫描的包.如:com.tedu.controller
,spring就会自动扫描com.tedu.controller
这个包下的所有类,如果扫描到有 @Controller
、@Service
、@Component
等注解的,spring容器就会负责创建对象
bean
标签是用来创建实例对象的,所以这里就是创建InternalResourceViewResolver
(内部资源视图解析器)类的实例对象,这个实例对象的作用就是配置内部资源视图解析器,这个类里有两个属性,prefix
(前缀)和suffix
(后缀),为这两个属性赋值,之后再访问视图页面的时候就可以省略这两个属性配置的值,直接使用这两个属性配置的值中间的部分就可以访问了.
配置文件总结:
pom.xml
:这个配置文件是用来引入jar包
web.xml
:这个配置文件项目创建后就会扫描,在这个配置文件中找到了spring文件下的所有配置文件:如:applicationContext.xml
和springmvc-config.xml
applicationContext.xml
:web.xml
找到了这个配置,这配置文件找到了jdbc.properties
文件,找到了mybatis核心配置文件mybatis-config.xml
和mapper下的所有xml文件
,找到了mapper接口扫描器
jdbc.properties
:这个文件用来连接数据库
mybatis-config.xml
:这个配置文件内的配置applicationContext.xml
已经配置过了,所以暂时不需要配置.
mapper下的所有xml文件
:这些xml文件用来书写SQL语句.
mapper接口扫描器
:这个扫描器用来扫描所有的指定包下的mapper接口,为他们创建实例对象.如:com.tedu.dao
包,这个包下我们一般用来创建接口,用来连接mapper文件下的xml文件,也就是SQL语句.
springmvc-config.xml
:web.xml
找到了这个配置,这个配置找到了所有的com.tedu.controller
包下所有类上有注解的类,并帮他们创建实例对象
controller包
:这个包下的文件我们一般用来处浏览器的请求.
--> | com.tedu.dao包 | |||||
--> | mapper下的所有xml文件 | |||||
--> | applicationContext.xml | --> | jdbc.properties | |||
--> | web.xml | --> | mybatis-config.xml | |||
启动项目 | --> | springmvc-config.xml | --> | com.tedu.controller包 | ||
--> | pom.xml | --> | 找到所有jar包 |