<servlet>
<servlet-name>Servlet的Name</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<!-- 读取指定路径下的xml信息(SpringMVC的配置文件)-->
<param-value>classpath:config/spring/mvc-servlet.xml</param-value>
</init-param>
<!--设置一启动就加载SpringMVC的配置文件,创建前端控制器-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Servlet的Name</servlet-name>
<!--只有后缀名为.do的请求才会被SpringMVC所拦截-->
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!--配置注解驱动扫描controller包下的文件,使用注解-->
<context:component-scanbase-package="controller"></context:component-scan>
<!-- 开启注解驱动
SpringMVC框架,使用注解驱动后,默认映射器,适配器,视图解析器变更
使用的是注解关注的映射器,适配器,视图解析器.
AnnotationMethodHandleAdapter或其子类型.
如果不修改适配器,当开启静态资源映射的时候,无法扫描注解
-->
<mvc:annotation-driven/>
<!-- 配置文件上传解析器 ,配置后可以使用上传功能,multipartResolver大小写敏感-->
<bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>
<!-- 配置视图解析器,实现前后缀的拼接
作用就是在返回视图资源的时候会自动加上/WEB-INF/jsp/ 返回视图的名称 .jsp
-->
<beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"value="org.springframework.web.servlet.view.JstlView"></property>
<property name="prefix"value="/WEB-INF/jsp/"></property>
<property name="suffix"value=".jsp"></property>
</bean>
首先用户发出请求,请求经过web.xml,之后进行判断是否为springmvc拦截的路径.如上面所配置的.do,如果是的话则会通过注解所扫描的包去一一匹配相应的请求@RequestMapping("/url"),如果url与用户请求的url一致,则进行业务操作,之后返回一个视图资源,如果配置了视图解析器则还会调用视图解析器,最后返回给用户一个相应的页面
因为SpringMVC和Spring天然整合,所以说不需要配置额外的信息.
配置文件没有固定的命名格式建议使用mybatis.cfg.xml来命名
<configuration>
<!--如果导入外部的properties配置文件的话,需要配置properties标签 可选-->
<propertiesresource="db.properties">这里导入了db.properties的配置文件
<!--之后配置会话工厂
值 - devlopment,可配置的环境.
-->
<environmentdefault="development">
<!--配置当前会话工厂的运行环境 -->
<environmentid="development">
<!--
配置事务管理
当前环境的事务管理方式,不是事务管理器
数据库的事务管理方式:
JDBC- 依赖JDBC技术实现事务管理方式,最底层,ORM框架本身没有事务管理能力
MANAGER-容器管理.如:使用Spring容器管理MyBatis框架的会话工厂.
可以使用Spring容器提供的事务管理机制,实现事务管理.
JTA - java transaction api . java事务开发工具接口.
-->
<transactionManagertype="JDBC"></transactionManager>
<!--数据源:并不是直接配置一个连接池
访问数据库时,创建连接对象创建方式.连接对象的管理方式.
创建方式有:每次创建一个新的,提前创建若干连接.
type=UNPOOLED
管理方式:单一对象创建管理,池化管理
type=POOLED
-->
<dataSourcetype="POOLED">
<!-- 配置如何连接数据库
配置数据库连接参数的时候, 可以通过XML脚本语法 - ${}配置.
XML脚本. 解析方式由解析器决定.
MyBatis提供的解析器,是解析Properties配置文件或Properties对 象实现数据的配置.
${key} - 对应value
-->
<propertyname="driver" value="${mysql.driver}"/>
<property name="url"value="${mysql.url}" />
<propertyname="username" value="${mysql.username}" />
<propertyname="password" value="${mysql.password}" />
<!-- <propertyname="driver" value="com.mysql.jdbc.Driver"/>
<property name="url"value="jdbc:mysql://localhost:3306/mybatis" />
<propertyname="username" value="root" />
<propertyname="password" value="root" /> -->
</dataSource>
</environment>
</environments>
<!--配置SQL映射文件mapper-->
<mappers>
<mapperresource="User.mapper.xml"/>
</mappers>
</configuration>
MyBatis的运行原理:
配置完MyBatis的会话工厂【mybatis.cfg.xml】后就可以通过代码来创建会话工厂
//创建会话工厂
SqlSessionFactorysqlSessionFactory=null;
//创建会话工厂的构建器
SqlSessionFactoryBuilderbuilder=new SqlSessionFactoryBuilder();
//创建配置文件的读取的输入流
InputStreamis=Resources.getResourceAsStream("mybatis.cfg.xml");
//创建会话工厂
sqlSessionFactory=bulider.build(is);
//获得会话
SqlSessionsession=sqlSessionFactory.openSession();
SqlSessionFactory sqlSessionFactory=newSqlSesssionFactoryBuider.builde(Resources.getResourceAsStream("mybatis.cfg.xml"));
SqlSessionsession=new SqlSesssionFactoryBuider.builde(Resources.getResourceAsStream("mybatis.cfg.xml")).openSession();
之后编写mapper的xml的配置文件.
<mappernamespace="user">
<select id="statement的名称" resultType="返回值类型">
SQL语句
<select>
</mapper>
然后通过sqlSession来进行查询
MyBatis与Spring整合
首先要导入Jar包,mybatis-spring-1.2.1.jar
之后让Spring来管理MyBatis的会话工厂.也就是让Spring自动创建SqlSession
配置文件如下,省略头信息
<!-- Properties配置文件读取
location-读取本地Properties配置文件,定义方式为路径/文件名
可以相对路径读取:classpath:path/file
可以通配符读取多个配置文件. path/*.properties
相当于原来配置的<properties resource="db.properties">,不过这里可以指定了该配置文件所在的路径
-->
<context:property-placeholderlocation="classpath:config/commons/*.properties"/>
<!--配置数据源 -->
<bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="url"value="${mysql.url}"></property>
<property name="driverClassName"value="${mysql.driver}"></property>
<property name="username"value="${mysql.username}"></property>
<property name="password"value="${mysql.password}"></property>
</bean>
<!-- 配置会话工厂
SqlSessionFactory - 接口
MyBatis提供了整合插件
-->
<bean id="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource"ref="dataSource"></property>
<property name="mapperLocations">
<array>
这里是读取mapper配置文件,但是本次项目使用的是注解开发,所以说这里配置每太大用
<value>classpath:mapper/*.xml</value>
</array>
</property>
typeAliasesPackage,它一般对应我们的实体类所在的包,这个时候会自动取对应包中不包括包名的简单类名作为包括包名的别名。多个package之间可以用逗号或者分号等来进行分隔。
简单来说就是这样原来需要写entity.User现在配置了这里只要写User就好了
对应这之前的配置文件
<typeAliases>
<typeAlias type="entity.User"alias="user"></typeAlias>
<!-- package-自动扫描包中的类型,使用类名作为别名.代替类的全命名 -->
<package name="entity"/>
</typeAliases>
<property name="typeAliasesPackage"value="entity"></property>
</bean>
<!-- 配置MAPPER接口动态代理工厂
SSM框架整合的时候,MyBatis使用接口动态代理实现.
sqlSession.getMapper(Class);
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName"value="sqlSessionFactory"></property>
<!-- 当前工厂在什么包中扫描Mapper接口 -->
<property name="basePackage"value="mapper"></property>
</bean>