SSM遗忘日志
MyBatis
- @param 参数的别名机制 传递给sql语句
- @MapKey 查询语句的接收注解
List - 获取自增主键
- 在sql中添加 useGeneratedKeys=“true” keyProperty=“id”
id即为自增主键 - 字段名(数据库)属性名(pojo类)不一致,使用sql的别名机制
或者在mybatis-config中配置setting解决
或者自定义属性名 resultMap
Spring
- spring IOC容器中的对象默认为单例模式
- IOC是一种思想,DI(依赖注入)是IOC(控制反转)的具体实现
- 依赖注入可以简单理解为 为对象赋值
- 如果组件类实现了接口,根据接口可以获取bean
- 如果一个接口实现了多个组件类,这些实现都配置了bean,那么根据接口将不能获取bean
- 通过bean类型、bean所实现的接口类型、bean所继承的类都可以获取bean
- 内部bean不能直接由getBean获取
- bean的作用域为单例时,生命周期的前三个阶段会在获取IOC容器时执行
- bean的作用域为多例时,生命周期的前三个周期会在获取bean时执行
- 自动装配
- 通过bean标签中的autowire属性设置自动装配`
- no、default表示不装配`
- byType根据赋值的属性类型,在IOC容器中自动匹配某个bean,为属性赋值
- 若通过类型没有找到任何一个类型匹配的bean,此时不装配。属性使用默认值
- 若通过类型找到了多个类型匹配的bean,则会抛出异常
- byName将要赋值的属性的属性名作为bean的id在IOC容器中匹配某个bean为属性赋值
- @Component普通组件
- @Controller控制层组件
- @Service服务层组件
- @Repository持久层组件
- 通过注解+扫描所配置的bean的id默认为类的小驼峰
- @Autowire实现自动装配功能的注解
- 如果@Autowire根据byType和byName自动装配均异常,则可以使用@Qualifier指定装配
- @Value给对象注入值
- 静态代理的理解
类1中实现了核心方法和一些日志(例如一些核心方法外的输出语句)为了解耦(将核心方法和输出语句分离开)再声明一个类2(代理类),在类2中,声明类1的对象来调用类1的核心方法,并在调用方法时的上下文在加入输出语句,此时,核心方法的具体实现只有类1知道,在代理类中只调用了核心方法(具体实现代理类看不到)并加入了日志,从而实现了核心方法和日志的解耦。 - 动态代理的理解
在静态代理中如果有多个类1的情况则实现解耦需要多个代理类,会造成程序的冗余。而动态代理的目的便是为多个类似与类1的类动态的生成代理类,从而降低代码量。 - AOP(面向切面编程)
通过编译方式和运行期动态代理方式实现在不修改源代码的情况下给程序动态统一添加额外功能。 - @Aspect将组件表示为切面
SpringMVC
- @PathVariable 给形参赋值,接收路径参数
- @RequestMapping 地址映射
- 浏览器只能发生post和get请求,若要发送put和delete请求需要在web.xml中配置一个过滤器HiddenHttpMethodFilter,配置了过滤器之后,发送的请求要满足两个条件,才能将请求方式转换为put和delete
- @RequestBody用于接收json数据
- @RequestParam用于接收url地址传参或表单传参
- @ResponseBody将所标识的控制器方法的返回值作为相应报文的响应体响应到浏览器(可以将java对象以json格式返回到浏览器)
- @RestController=@ResponseBody+@Controller
- @RequestMapping(method = RequestMethod.Get ) = @GetMapping