1、缓存Mybatis:
a.一级缓存:(本地缓存),与数据库同一次会话期间查询的数据库会放在本地缓存中,以后需要获取相同的数据,直接从缓存中拿,没必要再去查数据库,也称为sqlsession级别的缓存,一级缓存是一直开启的。
b.一级缓存有实效的情况(也就是没有使用到当前一级缓存的情况,效果就是还需要再想数据库发出查询):1.sqlsession变了,2.sqlsession相同,查询条件不同(当前一级缓存中还没有这个数据),3.两次查询之间执行了增删改查数据操作。
c.二级缓存:(全面缓存),基于namespace级别的缓存,一个namespace对应一个二级缓存,正常机制:1.1个会话,查询一条数据,这个数据就会被放在当前的缓存里面。
2.如果会话关闭,一级缓存中内容会被保存到二级缓存中,新的会话查询信息。3.sqlsession==EmployeeMapper==Employee departmentMapper==DepartMent
注意:只要第一次查询的都是一级缓存,当缓存关闭后会保存在二级缓存中。
和缓存有关的设置/属性:acheEnabled=true/false;false是关闭缓存。
2、mybatis-spring整合
springMvc其实是spring的一个web模块,可以去spring管网下载spring的jar包
3、插件:利用插件为我们的目标对象产生动态代理,目标对象的目标方法要执行的时候都会来到代理对象的方法
4、mybatis的分页插件PageHelper,可以去gitHub上面搜
5、Alt+/自动补全
6、New-----other-----spring下面对应的springBean Configuration File-----写配置文件XXX.xml;想要spring的ioc容器和web工程一起启动,要加上contextloaderlistener-contextloaderlistener
7、spring是一个开源框架,spring为简化企业级应用开发而生,使用spring可以使简单的JaveBean实现只有EJB才能实现的功能,spring是一个IOC控制反转(DI依赖注入)和AOP容器框架
有代码:ApplicationContext ctx=new ClassPathXmlApplicationContext("XXX.xml"); HelloWorld helloworld=(HelloWorld类名)ctx.getbean("helloWorld"); helloworld.hello();
(ApplicationContext代表的是IOC容器,ClassPathXmlApplicationContext代表的是接口实现类,该实现类从类路径下来加载配置文件)
(第一步创建IOC容器后会调用构造器,也就是构造函数,会对配置文件里面的内容进行初始化并且赋值)
(第二步从IOC容器中获取Bean实体)
(第三步调用hello方法)
8、Spring的属性注入:是通过setter方法注入Bean的
构造方法注入:构造器注入在<conStructor-arg>元素里声明属性,使用构造器注入属性值可以指定参数的位置index和参数的类型type,以区分重载的构造器,例如:
<bean id="类名" class="类路径">
<constructor-arg value="Baoma" type="java.lang.string"></constructor-arg>
<constructor-arg type="int">
<value>250</value>
</construcor-arg>
</bean>
属性值也可以使用value直接进行配置。
也可以使用ref="id的名字也就是<property name="car类名">找到内容
null值和级联属性
<constructor-arg ref="car"></constructor-arg>
<constructor-arg><null></constructor-arg>
相当于把car里面值都赋为null;
9、为级联属性赋值。spring框架的属性需要先初始化后才可以为级联属性赋值,否则会有异常,而struct2框架可以自动创建级联属性
<constructor-arg ref="car"><constructor-arg>
<property name="car.maxspeed' value="250"></property>
以上的是对car类里面的属性赋值为250;
如果是集合属性该如何赋值呐?
<property name="properties">
<!--使用props和prop子节点来为Properties属性赋值-->
<props>
<prop key="user">root</prop>
<prop key="password">123</prop>
<prop key="jdbcURL">jdbc:mysql://test</prop>
<prop key="driverclass">com.mysql.jdbc.Driver</prop>
</props>
</property>
未完待续。。。。。。
1、使用Bean的scope属性来配置bean的作用域,singleton:默认值,容器初始时创建bean实例,在整个容器的生命周期内只创建这一个bean,他是单例的
prototype:原型的容器,初始化时创建bean实例,而在每次请求时都创建一个新的bean实例并返回。
使用外部属性文件
可以使用BeanFactory后置处理器,这个处理器允许用户将Bean配置的部分内容外移到属性文件里,可以在Bean配置文件里使用形式为${Var}的变量
2、 SPEL:一般引用Bean,属性和方法,下面还有其他情况
1)、引用其他对象:通过value属性和SPEL配置Bean之间的应用关系
<Property name="prefix" value="#{prefixGenerator}"></property>
2)、引用其他对象的属性
SPEL:调用静态方法或静态属性,通过T()调用一个类的静态方法,他将返回一个Class Obese,然后再调用相应的方法或属性;
<property name="initValue"
value="{T(java.lang.Math).PI}"></property>
3、New-----Class-----Name:起名字,同时在这里有一个Add可以添加想要的接口
4、通过静态工厂方法来配置bean,注意不是配置静态工厂实法实例,而是配置bean实例
class属性:指向静态工厂方法的全类名
factory-method:指向静态工厂方法的名字
factory-arg:如果工厂方法需要传入参数,则使用配置参数
<!--通过实例工厂方法来配置bean-->
factory-bean属性:指向实例工厂方法的全类名
factory-method:指向静态工厂方法的名字
factory-arg:如果工厂方法需要传入参数,则使用他来配置参数
5、配置bean如何来配置
1).通过工厂方法(静态工厂方法或者实例工厂方法)
2).FactoryBean方法:
<bean id="car" class="com.XXX.XXX">
<property name="brand" value="BMW"></property>
</bean>
6、在classPath中扫描组件
<context:component-scan>:方法
例如:<context:component-scan:
base-package="属性指定一个需要扫描的基类包,spring容器将会扫描这个基类包以及其子包里面所有的类"
resource-pattern="希望扫描特定的类而非基包下的所有类,过滤特定的类,例如:
<context:component-scan:
base-package="com.atguigu.spring.beans"
resource-pattern="autowire/*.class"/>
7、<context:include-filter>子节点表示要包含的目标类
<context:exclude-filter>子节点表示要排除在外的目标类
组件装配<context:component-scan>元素还会自动注册