| 上午笔记
在使用spring配置datasouce(数据源)
<bean id="" class="">
<property name="">
<pops>
<prop key="Driver">com.mysql.jdbc,Driver</prop>
</pops>
</property>
</bean>
DataSource只是接口 不提供实现。
1.获取链接
2.开启链接
3.提交事务
4.回滚事务
5.关闭连接
它只提供方法,实现的话只需要对应的数据源进行开发。
sql 被称为结构化查询语言 sql-92标准,数据库厂商会在sql-92标准添加自己的实现语法
Hibernate 全ORM 数据持久框架 设置sql方言(不同的数据库有自己的SQL语法)Oracle-->Mysql
mysql的分页limit
oracle 三层嵌套查询
sqlServer top
hiberhate 全orm 数据持久框架 支持设置sql方言。(就是不同的数据库有自己的sql语言)
是需要设置方言。
国内很少用hibernate,
指定lazy为true之后 不实例化,使用时执行
指定lazy之后 初始化不执行
lazy属性为default时 值为 false
指定lazy属性为true时 bean的创建变为获取后不立即创建。
销毁方法 只在web容器中有效 java 控制台程序无效的
一般销毁时释放的都是数据库连接资源
| 上午知识小结
中午主要是学会使用spring管理数据源。首先我们需要做的创建一个类用来封装数据库连接相关属性和方法,其中要创建两个属性值,类型分别是Properties和Connect(这两个类的包都是在java.util中)。前者是用来管理数据库连接配置文件的,后者是用来接收获取到的连接对象的。然后写出获取数据源对象的过程代码,如下。
//首先记载数据库驱动
Class.forName("properties.getProperties("Driver"));
//配置数据库的url和user以及密码来获取数据库连接对象。
Connection connection = DriverManager.getConnection(properties.getProperties("url"),properties);
紧接着就要配置spring的配置文件。
<bean>
<property name="properties">
<props>
<prop key="Driver">com.mysql.jdbc.Driver</prop>
<prop key="url">jdbc:mysql://localhost:3306/mybatis</prop>
<prop key="user">root</prop> //properties中的用户名的的属性名是user 所以不要用其他的名称代替
<prop key="password">com.mysql.jdbc.Driver</prop>
</props>
</property>
</bean>
其中上述的<props>标签是专门为propertis文件设计的专属标签。其中子标签<prop>是来配置properties的属性值的。
写好之后我们就可以在测试类中测试了,首先要加载spring的配置文件,需要new一个ClassPathXmlApplicationContext对象。然后得到的ApplicationContext对象调用getBean方法来获取对象。然后调用getCoon()方法获取连接,通过输出可以判断是否连接数据库成功。然后我们再回到applicationContext.xml的文件,在刚才的bean标签中添加属性值
lazy-init="false"。然后在test中只执行加载spring配置文件的相关代码。在控制台可以看到DButil类被实例化了。然后我们改成
false在执行就发现DBUtil类没有被实例化。然后我们在为DBUtil类添加一个init方法,里面加个输出语句。接着在bean中添加
init-method属性并为其赋值上init方法名,然后在
lazy-init="false“的基础上运行测试文件,我们可以发现init方法也被执行了。然后我们修改
lazy-init="true"后执行就发现后台还是没有输出。紧接着再添一个属性
scop="singleton",在
lazy-init="true"时运行代码我们可以发现,方没有被调用。如果设置成
scop="prototype",多例模式的情况下运行刚才的测试代码,DBUtil类未能被实例化和加载。看到上述现象后我们可以推断出,lazy-init属性默认值是false,scop的默认属性是singleton单例设计模式。而且最为重要的一点是当scop的值为proptotype的时,lazy-init属性是无效的。这个原因我们很好理解,就是单例模式下在加载的时候即可实例化,因为在整个项目运行的过程中我们只需要用到一个实例化对象,而多例模式下,就不一样了。因为是多例,我们没有办法在加载的时候确定实例化多少个,也就没有办法进行实例化,所以这种模式下我们只能在获取的时候才能实例化。
| 下午课堂
servlet是一个动态页面交互技术,用于界面渲染,然后又有了jsp
jsp的指责渲染页面以及提供交互使用
springMVC之后只需要一个核心处理的servlet其他的具体的负责执行控制器java-class来完成
SpringMVC 是一个web项目框架
初始化顺序
监听器 listener 1
过滤器 filter 2
控制器 servlet 3
ApplicationContext-root.xml spring父容器配置文件(注册service,dao相关组件以及包含spring中本身需要的依赖)
ApplicationContext-mvc.xml springMVC子容器配置(控制器、视图解析器 文件上传组件等Spring中本身需要的依赖)
上述中spring中本身包含的依赖是一致的。
Spring容器何时能够启动自动加载?
1.父容器交给applicationContext 监听
2.servlet初始化
无论是父容器还是子容器统称叫做。父子容器加载配置bean之后交给bean之后交给webApplicationContext上下文进行管理的时候
子容器(springMVC)启动之后,会调用applicationContext中的getParnet,如果不为空的话,证明有父容器了,子容器会把root设置成父容器。
spring在web中启动时交给web,xml文件进行设置,是由web容器进行设置,创建加载出spring容器。
Unexpected exception parsing XML document from class path resource [applicationContext-mvc.xml]; nested exception is java.lang.IllegalArgumentException: At least one base package must be specified
启动注解扫描时没有添加要扫的包名
base-package="com.oracle"
| 下午知识小结
首先我们是从servlet讲起,servlet是个什么呢?servlet被发明出来是为了使页面动态化也即是一种交互的过程,我们之前做的javaweb项目 都是把servlet是充当控制器的作用。就是从前端接收请求,然后经过一系列操作之后将再将响应返回给客户端。这里有一个知识点,就是servlet的生命周期有哪些?1.加载和实例化;2.是初始化(init()方法);3.执行(service);4.销毁(destroy)。还会问servlet是在什么时候加载或者是什么时候被实例化的。答案是有两种情况,一种是在第一次请求的时候,另一种,是在加载web容器的时候。servlet是服务器内部的一个程序。然后再说回来,后续又开发出jsp技术,该技术能够完成界面渲染和交互技术
其实在springmvc中servlet还是控制器,但不同的是在这其中只有一个servlet,其他的任务是交友class类来负责的。springmvc是web框架strucs也是一个webmvc框架。springboot底层还是spring+springMVC.r紧接着我们要开始搭建
ssm框架了,首先我们要做的就是要配置三个重要的xml文件。第一个是spring框架的配置文件,通常被命名为applicationContexr-root.xml,它是用来注册service、dao层相关的组件以及spring中本身需要配置的依赖。然后就是application-mvc,非常明显的我们就能够知道,这是一个springmvc框架配置文件,它是用来 配置控制器,视图解析器,文件上传等组件的,还包含了spring本身所需要的依赖(这里的spring依赖和上述spring中的依赖是同一种),另一个是web.xml文件,是用来为web容器配置的。
那么我们就来详细的说一下这三个配置文件。
1.applicationContex-root.xml;
首先映入眼帘的便是注解扫描的启动
//启动注解扫描扫描的位置需要设置为包 二级
<context:component-scan base-package="com.oracle">
//spring扫描的时候将controller层的排除掉
<context:exclude-filter type="annotation" expression="org.springframwork.stereotype.Controller"/>
</context:component-scan>
2.读取配置文件该配置文件中存放的是数据库相关的配置后两个属性的作用是分别是判断文件是否存在,和当文件见属性不存在的时候是否忽略
<context:property-placeholder location=""classpath:db.properties"ignore-resource-not-found="true" ignore-unresolvable="true"/>
3.然后是要配置数据源
4.进行配置mybatis的sqlsession
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="datasorce" ref="dataSource"/>
</bean>
5.事务管理器
<有了事务管理器之后就不需要自动提交事务了>
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
6.映射Mapepr目录,mapper接口所在包名,spring会自动查找其下的Mapper
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.oracle.mapper" />
</bean>
2.applicationContext-mvc
1.第一步任然是开启注解,但是该注解只包含控制器。
2.springMVC的文件上传,
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 默认文件编码 -->
<property name="defaultEncoding" value="utf-8"></property>
<!-- 设置文件上传的大小 总阀门 即是最终只能传这么大的组件 -->
<property name="maxUploadSize" value="1500000000000"></property>
</bean>
3.视图解析器,jsp存放的位置不再是web路径了。界面放到web-info之中。
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 视图的前缀,是用来声明视图的路经所在 -->
<property name="prefix" value="/WEB-INF/view/"></property>
<!-- 是指定文件的类型 -->
<property name="suffix" value=".jsp"></property>
</bean>
其中prefix是视图的前缀属性,suffix是指定文件的类型的。
4.配置静态资源路径。
<mvc:resources location="/resources/" mapping ="/resources/**"></mvc:resources>
5.mvc注解,即是将格式转化utf-8格式。
3.web.xml文件
1.监听器,该监听监听的是spring容器的加载
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-root.xml</param-value>
</context-param>
2.通过过滤器设置请求编码格式
3.springmvc核心的servlet,任何的配置请求都会经过servlet。
4.servlet请求映射地址
| ssh框架中的请求和响应。
1.发送请求到DispatcherServlet。
2.映射处理器搭配handlerMappering.,然后经过HandlerExecutionChain,然后又回到DispatcherServlet中。
3.处理器适配,经过handler到handleradpter,
4.匹配到对应的控制器中相应的方法进行处理,然后经由modelandview回到适配器中在经过modelandview再回到dispatcherservlet中。
5.视图解析。经由viewresolver解析后到view回到servlet。
6.视图渲染,经由model到view然后回到servlet中,然后响应给前端。