• 2017.02.17


    1.模糊查询:like关键字,单引号包括模糊匹配表达式,%代表一个或者多个字符。
    查询地址带有广州的所有department_code
    selet * from zzgjs_department_define where chinese_address like ‘%广州%’
    2.对缓存redis做一层层的封装,spring中只注入一个缓存bean.针对不同的业务需求,比如ITS,UM等,再分别写自己的类封装这个唯一的redis bean,加上分别业务的方法,对
    外暴露出专门接口。这就是分解-封装的思想。
    3.构建程序代码结构,要有分解封装的思想
    4.一般来说。我们会将一些配置的信息放在。properties文件中。
    然后使用${}将配置文件中的信息读取至spring的配置文件。
    首先。我们要先在spring配置文件中。定义一个专门读取properties文件的类,叫PropertyPlaceholderConfigurer。
    这个bean要注入的属性石location,用以指定要读取的配置文件路径。
    如下:
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
    <list>
    <value>classpath:jdbc.properties</value>
    <!--要是有多个配置文件,只需在这里继续添加即可 -->
    </list>
    </property>
    </bean>
    这里为什么用locations(还有一个location)
    是因为。一般来说。我们的项目里面。配置文件可能存在多个。
    就算是只有一个。那将来新添加的话。只需在下面再加一个value标签即可。
    然后我们就可以在jdbc.properties文件中填写具体的配置信息了。

    <!-- 配置C3P0数据源 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    <property name="driverClass">
    <value>${jdbc.driverClassName}</value>
    </property>
    <property name="jdbcUrl">
    <value>${jdbc.url}</value>
    </property>
    <property name="user">
    <value>${jdbc.username}</value>
    </property>
    <property name="password">
    <value>${jdbc.password}</value>
    </property>
    </bean>

    jdbc.properties文件写的信息。

    jdbc.driverClassName=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/test
    jdbc.username=root
    jdbc.password=root

    30.spring mvc流程及常用注解梳理
    32.在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求。
    31.在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用
    @RequestMapping 和@RequestParam 等一些注解用以定义URL 请求和Controller 方法之间的映射,这样的Controller 就能被外界访问到。
    32.@Controller 用于标记在一个类上后,
    分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping 注解。@Controller 只是定义了一个控制器类,而使用@RequestMapping 注解的方法
    才是真正处理请求的处理器。单单使用@Controller 标记在一个类上还不能真正意义上的说它就是SpringMVC 的一个控制器类,因为这个时候Spring 还不认识它。那么要如何做
    Spring 才能认识它呢?这个时候就需要我们把这个控制器类交给Spring 来管理。有两种方式:

      (1)在SpringMVC 的配置文件中定义MyController 的bean 对象。

      (2)在SpringMVC 的配置文件中告诉Spring 该到哪里去找标记为@Controller 的Controller 控制器。
    <!--方式一-->
    <bean class="com.host.app.web.controller.MyController"/>
    <!--方式二-->
    < context:component-scan base-package = "com.host.app.web" />//路径写到controller的上一层(扫描包详解见下面浅析)

    33.@RequestMapping, value, method;
    34.3、@Resource和@Autowired
    @Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。
    1、共同点

    两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。
    2、不同点

    (1)@Autowired

    @Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired;只按照byType注入。
    public class TestServiceImpl {
    // 下面两种@Autowired只要使用一种即可
    @Autowired
    private UserDao userDao; // 用于字段上

    @Autowired
    public void setUserDao(UserDao userDao) { // 用于属性的方法上
    this.userDao = userDao;
    }
    }
    3.@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称
    (byName)来装配,可以结合@Qualifier注解一起使用。如下:

    public class TestServiceImpl {
    @Autowired
    @Qualifier("userDao")
    private UserDao userDao;
    }
    4.(2)@Resource

    @Resource默认按照ByName自动注入,由J2EE提供,需要导入包javax.annotation.Resource。@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性
    解析为bean的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不制定
    name也不制定type属性,这时将通过反射机制使用byName自动注入策略。

    复制代码
    public class TestServiceImpl {
    // 下面两种@Resource只要使用一种即可
    @Resource(name="userDao")
    private UserDao userDao; // 用于字段上

    @Resource(name="userDao")
    public void setUserDao(UserDao userDao) { // 用于属性的setter方法上
    this.userDao = userDao;
    }
    }
    复制代码
    注:最好是将@Resource放在setter方法上,因为这样更符合面向对象的思想,通过set、get去操作属性,而不是直接去操作属性。

    40.5、@PathVariable
    用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数。如:

    42.redis是可以删除key的值的、。redis也是可以删除值的。如:jedis.del(key);
    43.接口类,要以I开头命名
    44.3.每一个service都要继承pafa框架的BaseService,每一个controller都要继承Pafa框架的BaseController,每一个dao都要继承pafa框架的BaseDao。
    BaseDao是在pafa-biz.jar里,BaseService也在pafa-biz.jar包,BaseController在pafa-web.jar包。
    如果你感觉一层直接继承,不方便你项目的运用,还可以再继承一层,添加自己的东西。比如Controller,可以自己定义APPBaseController,其继承BaseController,
    APPBaseController类里添加一些本地化功法和变量,比如添加Logger,添加异常处理返回,生成APPResult等。然后项目所有的controller再继承AppBaseController。

    45.所有具体controller的父类AppBaseController,controller父类里可以包括的方法有:1.添加logger。2.处理token。3.处理异常返回 4.生成APPResult返回,设置返回响应

    46.isDebugEnabled 、isInfoEnabled 为啥要使用
    :为什么要加上logger.isInfoEnabled()?原因有两点。

    1).直接使用logger.info("User " + userId + " is using app " + appId)来输出log,也能够达到log级别为INFO或在INFO以下时才输出:("User " + userId + " is using
    app " + appId),因为logger.info方法内部有判断输出级别的代码。但是在进入logger.info函数之前,("User " + userId + " is using app " + appId) 这个表达式已经通
    过运算拼接成了一个字符串;而如果事先使用 if (logger.isInfoEnabled())进行判断,那么当log级别在INFO以上时,就能省去上述的字符串操作,在高并发和复杂log信息拼
    接的情况下,使用这种标准的方法输出log能够省去不小的系统开销。另外,如果构造log信息的过程需要大量字符串操作,建议使用StringBuilder来完成字符串拼接。

    2).ERROR及其以上级别的log信息是一定会被输出的,所以只有logger.isDebugEnabled和logger.isInfoEnabled方法,而没有logger.isErrorEnabled方法。
    50.例如在应用中有一个输出窗口,一些系统状态信息将被输出到这个输出窗口中。因为 Info 的级别是如此之低,所以为了让用户能够看到有效的输出信息,必须将日志级别开
    放到 Info 级别。但是 Warn 的级别比 Info 要高,所以用户不得不被迫看到一些 Warn 的信息。


    47.1 Log的用途
    不管是使用何种编程语言,日志输出几乎无处不再。总结起来,日志大致有以下几种用途:

    l 问题追踪:通过日志不仅仅包括我们程序的一些bug,也可以在安装配置时,通过日志可以发现问题。

    l 状态监控:通过实时分析日志,可以监控系统的运行状态,做到早发现问题、早处理问题。

    l 安全审计:审计主要体现在安全上,通过对日志进行分析,可以发现是否存在非授权的操作。
    2.2 日志对性能影响
    不管是多么优秀的日志工具,在日志输出时总会对性能产生或多或少的影响,为了将影响降低到最低,有以下几个准则需要遵守:

    l 如何创建Logger实例:创建Logger实例有是否static的区别,在log4j的早期版本,一般要求使用static,而在高版本以及后来的slf4j中,该问题已经得到优化,获取(创建
    )logger实例的成本已经很低。所以我们要求:对于可以预见的多数情况下单例运行的class,可以不添加static前缀;对于可能是多例居多,尤其是需要频繁创建的class,我
    们要求要添加static前缀。

  • 相关阅读:
    Mybatis集成dbcp-java.lang.AbstractMethodError: Method org/apache/commons/dbcp/DelegatingResultSet.isClosed()Z is abstract
    Word 错误提示“此功能看似已中断,并需要修复” 解决
    解决 org.springframework.context.annotation.ConflictingBeanDefinitionException
    IDEA中的JAVA WEB项目启动报错的定位方法
    Oracle数据库中包含CLOB字段表的导出和导入
    idea terminal修改为gitbash多彩
    企业微信如何发红包 企业微信向个人发红包 企业微信群无法发红包 企业微信无法发红包 企业微信无法发红包如何解决
    vue项目中使用ts(typescript)入门教程
    svg / d3-force 中如何给link的label文字加底色
    svg 如何使用滤镜给文字加底色
  • 原文地址:https://www.cnblogs.com/panxuejun/p/6411112.html
Copyright © 2020-2023  润新知