2023年6月21日发(作者:)
SSM学习总结⼀、Spring学习1. Spring是⼀个开源框架2. Spring为简化企业级开发⽽⽣,使⽤Spring,JavaBean就可以实现很多以前要靠EJB才能实现的功能。同样的功能,在EJB中要通过繁琐的配置和复杂的代码才能够实现,⽽在Spring中却⾮常的优雅和简洁。3. Spring是⼀个IOC(DI)和AOP容器框架。4. Spring的优良特性① ⾮侵⼊式:基于Spring开发的应⽤中的对象可以不依赖于Spring的API② 依赖注⼊:DI——Dependency Injection,反转控制(IOC)最经典的实现。③ ⾯向切⾯编程:Aspect Oriented Programming——AOP④ 容器:Spring是⼀个容器,因为它包含并且管理应⽤对象的⽣命周期⑤ 组件化:Spring实现了使⽤简单的组件配置组合成⼀个复杂的应⽤。在 Spring 中可以使⽤XML和Java注解组合这些对象。5. ⼀站式:在IOC和AOP的基础上可以整合各种企业应⽤的开源框架和优秀的第三⽅类库(实际上Spring ⾃⾝也提供了表述层的SpringMVC和持久层的Spring JDBC)。1、Factory BeanSpring中有两种类型的bean,⼀种是普通bean,另⼀种是⼯⼚bean,即FactoryBean。⼯⼚bean跟普通bean不同,其返回的对象不是指定类的⼀个实例,其返回的是该⼯ ⼚bean的getObject⽅法所返回的对象。⼯⼚bean必须实现yBean接⼝。2、bean的作⽤域bean的作⽤域参数主要分为4个singleton: 单例的(默认值), 在整个IOC容器中只能存在⼀个bean的对象. ⽽且在IOC容器对象被创建时,就创建单例的bean的对象. 后续每次通过getBean()⽅法获取bean对象时,返回的都是同⼀个对象.prototype: 原型的/多例的 在整个IOC容器中可有多个bean的对象。 在IOC容器对象被创建时, 不会创建原型的bean的对象。 ⽽是等到没次通过getBean()⽅法获取bean对象时,才会创建⼀个新的bean对象返回.request: ⼀次请求对应⼀个bean对象session: ⼀次会话对应⼀个bean对象
new ClassPathXmlApplicationContext(""); Car car1 = n("car",); Car car2 = n("car",); n(car1 == car2); // true
3、⾃动装配1. 根据类型⾃动装配:将类型匹配的bean作为属性注⼊到另⼀个bean中。若IOC容器中有多个与⽬标bean类型⼀致的bean,Spring将⽆法判定哪个bean最合适该属性,所以不能执⾏⾃动装配2. 根据名称⾃动装配:必须将⽬标bean的名称和属性名设置的完全相同3. 通过构造器⾃动装配:当bean中存在多个构造器时,此种⾃动装配⽅式将会很复杂。不推荐使⽤。 byName: 使⽤bean的属性名与IOC容器中
byType: 使⽤bean的属性的类型与IOC容器中
声明切⼊点表达式 */ @Pointcut("execution(* tion.*.*(..))") public void declarePointCut() {}
/** *
前置通知:
在⽬标⽅法(连接点)执⾏之前执⾏.
*/ @Before("execution(public int (int,int))") public void beforeMethod(JoinPoint joinPoint) { //获取⽅法的参数 Object [] args = s(); //⽅法的名字 String methodName = nature().getName();
n("LoggingAspect==> The method "+methodName+" begin with "+ (args)); }
/** *
后置通知:
在⽬标⽅法执⾏之后执⾏,
不管⽬标⽅法有没有抛出异常.
不能获取⽅法的结果 * * tion.*.*(..) * * :
任意修饰符
任意返回值 * * :
任意类 * * :
任意⽅法 * ..:
任意参数列表 *
*
连接点对象: JoinPoint */
//@After("execution(* tion.*.*(..))") @After("declarePointCut()") public void afterMethod(JoinPoint joinPoint) { //⽅法的名字 String methodName = nature().getName(); n("LoggingAspect==> The method " + methodName +" ends .");
}5、JDBCtemplates * queryForObject(): * 1. 查询单⾏数据 返回⼀个对象 * 2. 查询单值 返回单个值 * batchUpdate(): 批量增删改 * update(): 增删改操作*
5.1具名参数的JdbcTemplate配置⽅式 id="namedTemplate" class="arameterJdbcTemplate">
new BeanPropertySqlParameterSource(department);(sql, sqlParameterSource);5.2事务为了保证数据的完整性和⼀致性使⽤事务使⽤⽅式
@Autowired private BookShopDao bookShopDao ;
/** *
事务属性:
* 1.
事务的传播⾏为 propagation:
⼀个事务⽅法被另外⼀个事务⽅法调⽤时,当前的事务如何使⽤事务.
* ED
默认值.
使⽤调⽤者的事务.
* ES_NEW
将调⽤者的事务挂起,
重新开启事务来使⽤.
* 2.
事务的隔离级别 isolation * 1
读未提交
脏读 * 2
读已提交
不可重复读 * 4
可重复读
幻读 * 8
串⾏化
效率低。 * 3.
事务的回滚与不回滚
默认情况下, Spring会对所有的运⾏时异常进⾏事务回滚. * rollbackFor
* rollbackForClassName * noRollbackFor * noRollbackForClassName * 4.
事务的只读设置: * readOnly
* true:
只读
代表着只会对数据库进⾏读取操作,
不会有修改的操作. *
如果确保当前的事务只有读取操作,就有必要设置为只读,可以帮助数据库 *
引擎优化事务
* false:
⾮只读
不仅会读取数据还会有修改操作。
* 5.
事务的超时设置:
设置事务在强制回滚之前可以占⽤的时间.
* timeout:
*
*/
//只对当前的⽅法起作⽤ @Transactional(propagation=ES_NEW, isolation=_COMMITTED, /* noRollbackFor={}*/ readOnly=false, timeout=3)
public void buyBook(String username, String isbn) {
/*try { (5000); } catch (InterruptedException e) { tackTrace(); }*/
Integer price = iceByIsbn(isbn);
Stock(isbn);
UserAccount(username, price);
}⼆、Springmvc学习controller=handler 控制器1、RequestMapping映射请求占位符PathVariable注解带占位符的 URL 是 Spring3.0 新增的功能,该功能在 SpringMVC 向 REST ⽬标挺进发展过程中具有⾥程碑的意义通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理⽅法的⼊参中:URL 中的 {xxx} 占位符可以通过 @PathVariable(“xxx”) 绑定到操作⽅法的⼊参中。//@PathVariable
注解可以将请求URL路径中的请求参数,传递到处理请求⽅法的⼊参中@RequestMapping(value="/testPathVariable/{id}")public String testPathVariable(@PathVariable("id") Integer id){n("id="+id);return "success";}testPathVariable2、@RequestParam注解1)在处理⽅法⼊参处使⽤ @RequestParam 可以把请求参数传递给请求⽅法2)value:参数名3)required:是否必须。默认为 true, 表⽰请求参数中必须包含对应的参数,若不存在,将抛出异常4)defaultValue: 默认值,当没有传递参数时使⽤该值控制器⽅法/** * @RequestParam
注解⽤于映射请求参数 * value
⽤于映射请求参数名称 * required
⽤于设置请求参数是否必须的 * defaultValue
设置默认值,当没有传递参数时使⽤该值 */@RequestMapping(value="/testRequestParam")public String testRequestParam(@RequestParam(value="username") String username,@RequestParam(value="age",required=false,defaultValue="0") int age){n("testRequestParam - username="+username +",age="+age);return "success";}testRequestParam1和2都是处理签名的⽅法,对⽐两者之间的不同,1是利⽤路径直接获取,2则是拼接字符串当作参数传⼊3、POJO(Plain Ordinary Java Object)简单的Java对象1) 使⽤ POJO 对象绑定请求参数值2) Spring MVC 会按请求参数名和 POJO 属性名进⾏⾃动匹配,⾃动为该对象填充属性值。⽀持级联属性。如:、 等如果有乱码,就 需要在xml中配置filter1-3都是对参数进⾏请求,4则是对内部数据进⾏总结4、处理模型数据之 Map实现了map接⼝,最终结果在requestScope当中1)Spring MVC 在内部使⽤了⼀个 接⼝存储模型数据具体使⽤步骤2)Spring MVC 在调⽤⽅法前会创建⼀个隐含的模型对象作为模型数据的存储容器。3)如果⽅法的⼊参为 Map 或 Model 类型,Spring MVC 会将隐含模型的引⽤传递给这些⼊参。4)在⽅法体内,开发者可以通过这个⼊参对象访问到模型中的所有数据,也可以向模型//⽬标⽅法的返回类型也可以是⼀个Map类型参数(也可以是Model,或ModelMap类型)@RequestMapping("/testMap")public String testMap(Map 2023年6月21日发(作者:) SSM学习总结⼀、Spring学习1. Spring是⼀个开源框架2. Spring为简化企业级开发⽽⽣,使⽤Spring,JavaBean就可以实现很多以前要靠EJB才能实现的功能。同样的功能,在EJB中要通过繁琐的配置和复杂的代码才能够实现,⽽在Spring中却⾮常的优雅和简洁。3. Spring是⼀个IOC(DI)和AOP容器框架。4. Spring的优良特性① ⾮侵⼊式:基于Spring开发的应⽤中的对象可以不依赖于Spring的API② 依赖注⼊:DI——Dependency Injection,反转控制(IOC)最经典的实现。③ ⾯向切⾯编程:Aspect Oriented Programming——AOP④ 容器:Spring是⼀个容器,因为它包含并且管理应⽤对象的⽣命周期⑤ 组件化:Spring实现了使⽤简单的组件配置组合成⼀个复杂的应⽤。在 Spring 中可以使⽤XML和Java注解组合这些对象。5. ⼀站式:在IOC和AOP的基础上可以整合各种企业应⽤的开源框架和优秀的第三⽅类库(实际上Spring ⾃⾝也提供了表述层的SpringMVC和持久层的Spring JDBC)。1、Factory BeanSpring中有两种类型的bean,⼀种是普通bean,另⼀种是⼯⼚bean,即FactoryBean。⼯⼚bean跟普通bean不同,其返回的对象不是指定类的⼀个实例,其返回的是该⼯ ⼚bean的getObject⽅法所返回的对象。⼯⼚bean必须实现yBean接⼝。2、bean的作⽤域bean的作⽤域参数主要分为4个singleton: 单例的(默认值), 在整个IOC容器中只能存在⼀个bean的对象. ⽽且在IOC容器对象被创建时,就创建单例的bean的对象. 后续每次通过getBean()⽅法获取bean对象时,返回的都是同⼀个对象.prototype: 原型的/多例的 在整个IOC容器中可有多个bean的对象。 在IOC容器对象被创建时, 不会创建原型的bean的对象。 ⽽是等到没次通过getBean()⽅法获取bean对象时,才会创建⼀个新的bean对象返回.request: ⼀次请求对应⼀个bean对象session: ⼀次会话对应⼀个bean对象 new ClassPathXmlApplicationContext(""); Car car1 = n("car",); Car car2 = n("car",); n(car1 == car2); // true 3、⾃动装配1. 根据类型⾃动装配:将类型匹配的bean作为属性注⼊到另⼀个bean中。若IOC容器中有多个与⽬标bean类型⼀致的bean,Spring将⽆法判定哪个bean最合适该属性,所以不能执⾏⾃动装配2. 根据名称⾃动装配:必须将⽬标bean的名称和属性名设置的完全相同3. 通过构造器⾃动装配:当bean中存在多个构造器时,此种⾃动装配⽅式将会很复杂。不推荐使⽤。 byName: 使⽤bean的属性名与IOC容器中 byType: 使⽤bean的属性的类型与IOC容器中 声明切⼊点表达式 */ @Pointcut("execution(* tion.*.*(..))") public void declarePointCut() {} /** * 前置通知: 在⽬标⽅法(连接点)执⾏之前执⾏. */ @Before("execution(public int (int,int))") public void beforeMethod(JoinPoint joinPoint) { //获取⽅法的参数 Object [] args = s(); //⽅法的名字 String methodName = nature().getName(); n("LoggingAspect==> The method "+methodName+" begin with "+ (args)); } /** * 后置通知: 在⽬标⽅法执⾏之后执⾏, 不管⽬标⽅法有没有抛出异常. 不能获取⽅法的结果 * * tion.*.*(..) * * : 任意修饰符 任意返回值 * * : 任意类 * * : 任意⽅法 * ..: 任意参数列表 * * 连接点对象: JoinPoint */ //@After("execution(* tion.*.*(..))") @After("declarePointCut()") public void afterMethod(JoinPoint joinPoint) { //⽅法的名字 String methodName = nature().getName(); n("LoggingAspect==> The method " + methodName +" ends ."); }5、JDBCtemplates * queryForObject(): * 1. 查询单⾏数据 返回⼀个对象 * 2. 查询单值 返回单个值 * batchUpdate(): 批量增删改 * update(): 增删改操作* 5.1具名参数的JdbcTemplate配置⽅式 id="namedTemplate" class="arameterJdbcTemplate"> new BeanPropertySqlParameterSource(department);(sql, sqlParameterSource);5.2事务为了保证数据的完整性和⼀致性使⽤事务使⽤⽅式 @Autowired private BookShopDao bookShopDao ; /** * 事务属性: * 1. 事务的传播⾏为 propagation: ⼀个事务⽅法被另外⼀个事务⽅法调⽤时,当前的事务如何使⽤事务. * ED 默认值. 使⽤调⽤者的事务. * ES_NEW 将调⽤者的事务挂起, 重新开启事务来使⽤. * 2. 事务的隔离级别 isolation * 1 读未提交 脏读 * 2 读已提交 不可重复读 * 4 可重复读 幻读 * 8 串⾏化 效率低。 * 3. 事务的回滚与不回滚 默认情况下, Spring会对所有的运⾏时异常进⾏事务回滚. * rollbackFor * rollbackForClassName * noRollbackFor * noRollbackForClassName * 4. 事务的只读设置: * readOnly * true: 只读 代表着只会对数据库进⾏读取操作, 不会有修改的操作. * 如果确保当前的事务只有读取操作,就有必要设置为只读,可以帮助数据库 * 引擎优化事务 * false: ⾮只读 不仅会读取数据还会有修改操作。 * 5. 事务的超时设置: 设置事务在强制回滚之前可以占⽤的时间. * timeout: * */ //只对当前的⽅法起作⽤ @Transactional(propagation=ES_NEW, isolation=_COMMITTED, /* noRollbackFor={}*/ readOnly=false, timeout=3) public void buyBook(String username, String isbn) { /*try { (5000); } catch (InterruptedException e) { tackTrace(); }*/ Integer price = iceByIsbn(isbn); Stock(isbn); UserAccount(username, price); }⼆、Springmvc学习controller=handler 控制器1、RequestMapping映射请求占位符PathVariable注解带占位符的 URL 是 Spring3.0 新增的功能,该功能在 SpringMVC 向 REST ⽬标挺进发展过程中具有⾥程碑的意义通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理⽅法的⼊参中:URL 中的 {xxx} 占位符可以通过 @PathVariable(“xxx”) 绑定到操作⽅法的⼊参中。//@PathVariable 注解可以将请求URL路径中的请求参数,传递到处理请求⽅法的⼊参中@RequestMapping(value="/testPathVariable/{id}")public String testPathVariable(@PathVariable("id") Integer id){n("id="+id);return "success";}testPathVariable2、@RequestParam注解1)在处理⽅法⼊参处使⽤ @RequestParam 可以把请求参数传递给请求⽅法2)value:参数名3)required:是否必须。默认为 true, 表⽰请求参数中必须包含对应的参数,若不存在,将抛出异常4)defaultValue: 默认值,当没有传递参数时使⽤该值控制器⽅法/** * @RequestParam 注解⽤于映射请求参数 * value ⽤于映射请求参数名称 * required ⽤于设置请求参数是否必须的 * defaultValue 设置默认值,当没有传递参数时使⽤该值 */@RequestMapping(value="/testRequestParam")public String testRequestParam(@RequestParam(value="username") String username,@RequestParam(value="age",required=false,defaultValue="0") int age){n("testRequestParam - username="+username +",age="+age);return "success";}testRequestParam1和2都是处理签名的⽅法,对⽐两者之间的不同,1是利⽤路径直接获取,2则是拼接字符串当作参数传⼊3、POJO(Plain Ordinary Java Object)简单的Java对象1) 使⽤ POJO 对象绑定请求参数值2) Spring MVC 会按请求参数名和 POJO 属性名进⾏⾃动匹配,⾃动为该对象填充属性值。⽀持级联属性。如:、 等如果有乱码,就 需要在xml中配置filter1-3都是对参数进⾏请求,4则是对内部数据进⾏总结4、处理模型数据之 Map实现了map接⼝,最终结果在requestScope当中1)Spring MVC 在内部使⽤了⼀个 接⼝存储模型数据具体使⽤步骤2)Spring MVC 在调⽤⽅法前会创建⼀个隐含的模型对象作为模型数据的存储容器。3)如果⽅法的⼊参为 Map 或 Model 类型,Spring MVC 会将隐含模型的引⽤传递给这些⼊参。4)在⽅法体内,开发者可以通过这个⼊参对象访问到模型中的所有数据,也可以向模型//⽬标⽅法的返回类型也可以是⼀个Map类型参数(也可以是Model,或ModelMap类型)@RequestMapping("/testMap")public String testMap(Map
EmpId LastName Gender Email DepartmentName Edit Delete ${ } ${me } ${==0?"Female":"Male" } ${ } ${mentName } Edit Delete
EmpId LastName Gender Email DepartmentName Edit Delete ${ } ${me } ${==0?"Female":"Male" } ${ } ${mentName } Edit Delete
发布评论