Mybatis:
mybatis中的别名:
resulttype=”xx.xx.?” 别名typeAliases:<package name=”xx.xx”>
方法名字、参数、返回类型
mybatis中id对应方法名,result(返回类型) 参数parameter
resultMap(映射结果,赋值填充)
mybatis使用update如果在输入时有一个值没有
第一种:<update>
update smbms_user
<if>
xx=xx
</if>
</update>
第二种:使用trim
Spring:
Spring :企业级系统
数据库访问
动态注入
IOC:控制反转(依赖注入)
控制反转:将组件对象的控制权从代码本身转移到外部容器(举例:不需要自己写代码new对象而是交由Spring去new对象,控制权的转移过程就是控制反转),目的:解耦和,分离关注点
要点:明确定义组件间的接口
依赖注入:将组件的构建和使用分开,拆分,当需要使用时在进行使用
使用简单工厂(需要使用时去容器(工厂)取出)
spring如何处理面向接口的方式:
依赖注入的三种方式:
设值注入、构造注入、p命名空间注入
AOP:面向切面编程(AOP的目标:专心做事,例如一个登录功能只需要专注于编写登录功能对于维护则交由AOP处理)
AOP原理:将复杂的需求分解出不同方面,将散布在系统中的公共功能集中解决,将公共代码提取出来(面向切面,不修改源代码情况下给程序动态添加功能),当代码运行到指定位置时抽取出的代码可以进行指定切入。采用代理机制组装(代理对象方法前后都可以插入代码,这些代码就是增强处理)
AOP相关术语(关键词)
增强处理:
前置增强:在指定方法之前切入
后置增强:..xxxxxxxxx之后切入
环绕增强:前后都能实现
异常抛出增强:如果抛出异常也可以动态切入
最终增强:最终执行结束时
切入点:
切入的位置
连接点:
切入后会产生的连接点(通过连接点可以拿到参数等等)
切面:
目标对象:
切的对象
AOP代理:
指代增强
织入:
织入即切入
环绕增强(分为前、中、后):程序进来时会进入环绕增强的前面,如何没有往下走(中,后)就进不入方法内部会直接结束
IOC注解(不要在接口上写注解,实例化不能实例化接口):
- @Component:实现bean组件的定义
- @Repository:用于标注Dao类
- @Service用于标注业务类
- @Controller用于标注控制器类
Autowired从spring容器中根据类型把实现类注入,当实现类有多个时,使用Qualified使用获取特定的实现类
可以利用注解定义切面
IOC原理:Java中的反射机制
举例:利用反射赋值
public void test2(){
String name=”cn.ncu.pojo.user”;
Class forname= Class.forName(“cn.ncu.pojo.user”);//获取包.类下面的对象
Object obj=forname.newInstance();//创建该对象
//方法
/**
*调用对象中的set方法赋值,方法中的参数是String类型
*/
Method method =forname.getMethod(“setUserName”,String.class);
method.invoke(obj,”张三”);//让obj对象执行这个方法,传入的参数是张三
System.out.println(obj);
}
Spring中7种Propagation类的事务属性
REQUIRED(默认情况下):支持当前事务,如果当前没有事务,就新建一个事务,这是最常见的选择
SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行
MANDATROY:支持当前事务,如果当前没有事务,就抛出异常
REQUIERS_NEW:新建事务,如果当前存在事务,把当前事务挂起
NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起
NEVER:以非事务方式执行,如果当前存在事务,则抛出异常
NESTED:支持当前事务,如果当前事务存在,则执行一个嵌套事务,如果当前没有事务,就新建一个事务
事务的隔离级别
Spring Mvc
替代了servlet)
servlet写起来过于繁琐,使用Spring mvc 替代servlet
mvc层的框架所实现的是控制层以及模型(JavaBean)
使用RequestMapping就会映射相应的请求
在web.xml中配置servlet,springmvc在默认情况下在web-inf下找springmvc.xml配置文件因此要在web.xml中配置init-param自定义路径
spring mvc请求处理流程:
直观来看:客户端请求时映射地址与web.xml中的DispatcherServlet匹配上,请求的url地址会匹配requsetmapping进入方法具体执行,执行完了之后返回的是视图的名字与springmvc中的视图解析器拼上前缀和后缀并成路径再找到路径的这个文件,把这个文件再响应给浏览器(客户端)
springmvc的中心:前端控制器DispatcherServlet。
用户发送请求后前端控制器(由handelemapping寻找映射找到后再由handleadapter适配器找到具体的controller处理执行)将请求委托给controller(相应的处理器),处理器调用model(service),再调用dao层返回数据,再返回视图名称经过视图解析器找到相应视图路径,再由前端控制器产生响应
mvc设计模式:
model(javabean、service、dao等)
view(视图,jsp,html)
controller(控制器)
rest风格:表述性状态转移,一种软件架构风格
spring mvc也提供了对这种风格的支持
@RequestMapping("test4/{id}/{name}")
public String test4(@PathVariable("id") Integer myid,@PathVariable String name)
使用注解@PathVariable当名字一样时不用写后面的(““)
为什么使用fastjson:
spring mvc在默认情况下是将返回值默认成视图返回的,用户发起请求时不想返回视图只对数据进行响应时就要在spring mvc中配置一个消息转换器(fastjson)以json形式直接进行响应
@responbody
消息解析器直接解析json
时间处理:@JSONField(format=”yyyy-MM-dd”)//按照指定格式进行json解析
mvc框架拦截器:
@RequestMapping(“xx”)在类的上方进行声明通过xx/xx进行一个过滤
规范数据接口,举例:
List<user> List =userService.getuserlist();
Map<String,Object> map = new HashMap<String, Object>();
map.put(“data”,list);
map.put(“message”,”获取用户列表成功”);
map.put(“code”,100);//自定义编码100表示成功
return map;