文章目录
spring bean的作用域
代码
创建一个book的bean,然后更改他的scope属性。
默认加载容器就会创建对象,调用book对象的无参构造方法。
可以验证一下是不是默认单例。
spring支持的常用数据库事务传播属性和事务隔离级别
传播属性(传播行为)
常用前两个。比如结账场景中的单个商品的购买方法。
测试场景:100块钱,买两本书,总价为110元。肯定会失败的。
默认是required,是一本书都不会成功的,发生失败,作为一个整体的事务回滚。
如果想成功一个,就要改成requires_new,会创建新事务,而不是加入事务,两个事务之间互相隔离。
required
requirs_new
隔离级别
事务并发问题
脏读理解:当前事务读到了其他事务更新但是没提交的值。
隔离级别
隔离级别并不是越高越好,因为隔离级别高了性能就差。
mysql默认可重复读的理解:一个事务中,对一个值对读取,读几次都是一样对,不管别的事务有没有对这个值进行修改。
隔离级别解决并发问题一览
从上往下,依次全部解决问题
数据库对隔离级别的支持
代码设置隔离级别
springmvc中解决post/get请求的中文乱码问题
首先贴代码,前端的表单代码如下,用来提交数据:
如果前端不作任何处理,后端收到的会是乱码:
post请求处理乱码
springmvc提供了CharacterEncodingFilter这一个过滤器来处理乱码。默认强制编码是false。
里面有过滤方法:从这里可以看到如果符合一定的条件,就会按照我们设置的编码进行过滤。
为了让他触发,我们需要进行配置。在web.xml文件中配置,注意位置在整个文件的最上方。
根据上面代码里面的参数,把需要的参数进行初始化。主要是forceEncoding和encoding类型
千万记得要有拦截器的拦截映射的配置。
这种方法,只能处理post请求,get乱码则是无效的。
get请求乱码
在tomcat的server.xml配置文件中,找第一个connector标签,增加一个属性URIEncoding=“UTF-8”。
这是最简单的处理方法。
简单谈一下springmvc的工作流程
springmvc处理模型数据的方式有2种。
- 将方法的返回值设置为modelAndView。
- 方法的返回值是string类型,入参中传入map,model,或者modelMap。
具体的流程图
中控制器就是在web.xml中配置的那个,如下图,进行处理。
mybaits中表中的字段名和实体的属性名不一样怎么办?
针对这种问题有3种解决方案。场景:比如实体属性是驼峰命名法,但是表中却是下划线分隔单词。查询的时候就会出现,对不上,属性名为null的现象。
解决方案一:写sql语句的时候起别名
解决方案二:mybatis全剧配置文件开启驼峰命名规则
这种方法的局限在于数据库中必须是last_name,很规矩的那种,才能进行映射,不能是别的。
解决方案三:在Mapper映射文件中使用resultMap来自定义映射规则
在sql语句中,使用resultMap属性。
然后自定义高级映射。