MY_Java_成长笔记

异常日志

  1. proxy: no session
    懒加载错误 四种 解决方法: 1. 用一下 2. 强迫对象初始化 3. 关闭lazy="false" 4. openSessionInView
  1. org.springframework.validation.BeanPropertyBindingResult
    JavaBean属性类型不匹配

Spring 框架 ------ 程序员的春天

为什么要使用AOP?

实现程序中的关注点代码与业务代码分离
关注点代码: 重复的代码
AOP变成的实现: JDK代理 或者 cglib代理
程序中的"事物控制"重复代码, 可以用AOP实现! 即只需要写一次, 运行时候动态注入业务方法上.

事物的管理

Jdbc技术: DataSourceTrancscationManager
Hibernate技术: HibernateTrancecationManager

编程式事务管理

jdbc代码:
Conn.setAutoCommit(false); //设置手动控制事物
hibernate代码:
session.beginTransaction; //开启一个事物
[细粒度事物控制, 可以对指定的方法, 指定的方法的某几行添加事物控制]
(比较灵活, 但开发起来比较繁琐, 每次都要开启, 提交, 回滚)

Spring 提供了声明式事务管理

Spring提供了对事物的控制的实现, 用户如果想用Spring的声明式事务管理, 只需要在配置文件中配置即可, 不想使用时直接移除配置. 这个实现了对控制的最大程度的解耦
Spring声明式事务管理, 核心实现就是基于Aop
粗力度的事物控制: 只能给整个方法应用事物, 不可以对方法的某几行应用事物

c3p0连接池, 编码方式实现, 方便理解xml配置

@Repository
@Resource
@Transactional

// 1. 硬编码方式实现连接池
    @Test
    public void testDbcp() throws Exception {
        // DBCP连接池核心类
        BasicDataSource dataSouce = new BasicDataSource();
        // 连接池参数配置:初始化连接数、最大连接数 / 连接字符串、驱动、用户、密码
        dataSouce.setUrl("jdbc:mysql:///jdbc_demo");            //数据库连接字符串
        dataSouce.setDriverClassName("com.mysql.jdbc.Driver");  //数据库驱动
        dataSouce.setUsername("root");                          //数据库连接用户
        dataSouce.setPassword("root");                          //数据库连接密码
        dataSouce.setInitialSize(3);  // 初始化连接
        dataSouce.setMaxActive(6);    // 最大连接
        dataSouce.setMaxIdle(3000);   // 最大空闲时间
        
        // 获取连接
        Connection con = dataSouce.getConnection();
        con.prepareStatement("delete from admin where id=3").executeUpdate();
        // 关闭
        con.close();
    }

Springmvc

Springmvc工作流:

  1. request(请求)
  2. Handler Mapping(映射器BeanNameUrlHandlerMapping)
  3. Controller(适配器SimpleServletHandlerAdapter)
  4. ModelAndView(Action)
  5. ViewResolver(视图解析器InternalResourceViewResolver)
  6. view(视图)
MY_Java_成长笔记_第1张图片
springmvc工作流.png

SpringMVC配置自定义格式处理器 如:处理日期时间

/**
     * 自定义类型转换器, 将String->Date类型(格式yyyy-MM-dd) short full long 中间 default
     */
    @Override
    protected void initBinder(HttpServletRequest request,
            ServletRequestDataBinder binder) throws Exception {
        //向SpringMvc内部注册一个自定义的类型转化器
        //参数一:将String转换成什么类型的字节码
        //参数二:属性编辑器,自定义转换规则
        binder.registerCustomEditor(
                Date.class,
                new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));//true 可以为空
        }

你可能感兴趣的:(MY_Java_成长笔记)