Java云笔记

2018-09-12  本文已影响96人  两分与桥

整个涉及到很多内容,写不完,只能把整个代码包发上来,在之后有空整理
项目需要登陆,数据库配置文件如下,我放在resource文件夹下了

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost/cn_test
jdbc.username=root
jdbc.password=root

initialSize=2
maxActive=2

内部包含了AOP切面,Spring事务等等很多内容,

IOC:负责管理Controller/service/dao,维护它们之间的关系。
AOP:面向切面编程,不修改原有代码,给系统增加新的功能。
mybatis:对数据库进行操作。

整体规范:
    - 所有的请求ajax方式访问
    - 前端页面采用HTML
    - 请求结果进行JSON响应
    {"status":0(成功)/1(失败),"msg":, "data":}
    
项目流程
    cmmi,前身是CMM,软件成熟度模型,认证。
    
SSM框架:springMVC + spring + Mybatis

创建云笔记项目环境
- 导包
- 添加配置文件
    - conf/spring-mvc.xml
    - conf/spring-mybatis.xml
    - mapper/SQL文件
    - web.xml
- 划分包结构
    - cloud_note.dao
    - cloud_note.service
    - cloud_note.controller
    - cloud_note.entity
    - cloud_note.util
    
使用UUID来生成字符串算法,用于当数据库主键
数据库中自动生成主键会有两次操作数据库(一次是插入,一次是返回插入自动生成的id)损耗性能。

Dao接口的传值特点:
public interface Dao{
    public void fn();
    public void fn(String str);
    public void fn(Map map);
    public void fn(User user);
}
总结:mybatis中Dao方法要么没有参数,要么一个参数。


JavaScript中在函数中阻止事件冒泡,直接在函数结束写上return false就行了。


Spring AOP(aspect oriented programming)面向切面编程
    将共同的业务处理从传统业务处理中抽离出来,单独封装,
    然后以配置的形式进行关联。
    可以在不修改原有逻辑代码的情况下,给系统追加功能。
    
AOP典型应用:
    - 追加事务控制
    - 异常日志记录
    
AOP:
切面(aspect)
    指的是封装了共同处理的组件,并且能够切入到其他组件的方法上。

切入点(pointcut)
    用于指定目标组件的方法。
    - 方法限定表达式
        可以给某个组件中部分方法追加共同功能。
        execution(修饰符? 返回类型 方法名(参数) 异常抛出?)
    
        execution(* add*(..))  --匹配到add开头的所有方法
        execution(* service.*(..)) --匹配service包下的所有方法
        execution(* service.*.*(..)) --匹配service包下所有类的所有方法
        execution(* service..*(..)) --匹配service包及子包的所有方法
            
    - 类型限定表达式
        可以给某个组件的所有方法追加功能
        within(类型)
        with(service.UserService)  --匹配UserService组件下所有方法
        with(service.*)  --匹配service包下所有类的所有方法
        with(service..*)  --匹配service包及子包的所有方法

    - bean名称限定表达式
        可以给某个组件中所有的方法追加功能
        bean(id名)
        bean(userService) --匹配id=userService的组件的所有方法
        bean(*Service) --匹配以Service结尾的所有组件的所有方法
        
通知
    用于指定切入的时机,spring提供了五种通知类型
    try{
        前置通知<aop:before>
        --执行的目标方法
        后置通知<aop:after-returning>
    }catch(){
        异常通知<aop:after-throwing>
    }finally{
        最终通知<aop:after>
    }
    @around=前置+后置通知

切面:追加单独封装的代码
切入点:切入点,给特定的模块追加
通知:什么时候切?前置/后置/环绕

动态代理
    AOP原理:使用动态代理技术,可以创建一个新的类型,
    重写目标接口或目标类的方法,在重写方法中,追加要
    切入的功能代码和方法代码

spring有两种动态技术:
    - 基于目标接口的
    - 基于目标类的
    
public class $Proxy20 implements UserService{
    public void check_login(){
        -- 追加了事务处理
        -- 重写了UserServiceImpl.check_login()
    }
}

public class $Proxy20 extends UserService(){
    
}


AOP注解配置
    - 注解标记,@Component,起到定义<bean>的作用
        @Aspect <aop:aspect ref="loggerBean">
        @Before <aop:Before pointcut="within()">
        
        
案例:
    - 要求:当系统发生service异常,将异常信息写入日志文件
    - 切面:将异常信息写入文件
    - 切入点:after-throwing("with(service..*)")
    
    
    
    

Mybatis关联映射
    将数据库中有关联关系的表,以实体对象引用的方式体现出来
    
当业务需要对数据库进行关联查询的时候。
可以通过一条SQL语句完成关联查询,也可以通过两条SQL语句进行关联查询。

案例:通过userId查询用户信息和关联的笔记本信息。
1.User实体类
2.定义Dao接口,配置Mapper文件
3.测试

2个SQL语句:语句简单,但配置繁琐,与DB两次交互

1个SQL语句:语句复杂,配置较简单,与数据库交互一次


主键的字段处理
在数据库使用自增列或序列作为主键时,如何再insert执行后,
立即获取ID值



spring事务管理
    什么是事务?程序为了保证业务处理的完整性,执行一个或多个SQL语句。
管理:对事务中的SQL语句进行提交或回滚,叫做事务管理。

作用与service方法上。

- oracle: commit/rollback (DML操作)
- JDBC: 自动commit


通过spring对事务进行管理
    1.配置spring-transaction.xml
    2.使用@Transactional
    
可读可写:select  @Transaction(readOnly=true)
回滚特性:默认RuntimeException回滚,其他异常不回滚
    @Transaction(rollback=IOException)
传播特性:
隔离特性:针对事务并发进行处理,脏读/幻读



String... 动态参数,就是String[]

前端样式用的是layui,一个十分好用的前端框架


1.png

有分页搜索的功能


2.png

校验登陆


3.png

AOP切面原理


aop.png

关于事务


事务.png
源代码:链接:https://pan.baidu.com/s/13SkSFaioLhd0FlwpujBIeg 密码:r2zl
上一篇 下一篇

猜你喜欢

热点阅读