美文网首页
注解消化

注解消化

作者: sayonara_yoyo | 来源:发表于2017-06-29 18:35 被阅读0次
    1. RestController(org.springframework.web.bind.annotation.RestController)
      等价于@Controller+@ResponseBody
    2. Log4j
    • Logger
      The org.slf4j.Logger interface is the main user entry point of SLF4J API.
      It is expected that logging takes place through concrete implementations
      of this interface.
      <h3>Typical usage pattern:</h3>
      <pre>
      import org.slf4j.Logger;
      import org.slf4j.LoggerFactory;

      public class Wombat {

      <span style="color:green">final static Logger logger = LoggerFactory.getLogger(Wombat.class);</span>
      Integer t;
      Integer oldT;

      public void setTemperature(Integer temperature) {
      oldT = t;
      t = temperature;
      <span style="color:green">logger.debug("Temperature set to {}. Old temperature was {}.", t, oldT);</span>
      if(temperature.intValue() > 50) {
      <span style="color:green">logger.info("Temperature has risen above 50 degrees.");</span>
      }
      }
      }
      </pre>

      Be sure to read the FAQ entry relating to parameterized
      logging
      . Note that logging statements can be parameterized in
      presence of an exception/throwable.

      <p>Once you are comfortable using loggers, i.e. instances of this interface, consider using

    • 所有的log4j的级别,这些级别都相当于一层层的过滤器

    Log4J
    Levels
    TRACE
    Level
    DEBUG
    Level
    INFO
    Level
    WARN
    Level
    ERROR
    Level
    FATAL
    Level
    TRACE
    Level
    Y Y Y Y Y Y
    DEBUG
    Level
    N Y Y Y Y Y
    INFO
    Level
    N N Y Y Y Y
    WARN
    Level
    N N N Y Y Y
    ERROR
    Level
    N N N N Y Y
    FATAL
    Level
    N N N N N Y
    ALL
    Level
    Y Y Y Y Y Y
    OFF
    Level
    N N N N N N

    注:ALL和OFF是1.2.12加上去的

    例如1:

    log4j.rootLogger=ALL 所有的记录都可以输出,相当于没有过滤
    log4j.appender.CONSOLE.Threshold= OFF 所有的记录都不能输出,相当于在ALL的基础上过滤了所有的记录

    例如2:
    log4j.rootLogger=TRACE 和ALL一样,相当于没有过滤记录
    log4j.appender.CONSOLE.Threshold= INFO 这样一来输出了INFO 、WARN、ERROR 和 FATAL的记录

    log机制的详细解读 马克,稍后再看

    LoggerFactory

    The <code>LoggerFactory</code> is a utility class producing Loggers for
    various logging APIs, most notably for log4j, logback and JDK 1.4 logging.
    Other implementations such as {@link org.slf4j.impl.NOPLogger NOPLogger} and
    {@link org.slf4j.impl.SimpleLogger SimpleLogger} are also supported.
    <p/>
    <p/>
    <code>LoggerFactory</code> is essentially a wrapper around an
    {@link ILoggerFactory} instance bound with <code>LoggerFactory</code> at
    compile time.
    <p/>
    <p/>
    Please note that all methods in <code>LoggerFactory</code> are static.

    tracelevel参数不再注册表中

    • 原因
      如果安装了简单网络管理协议 (SNMP) 服务但未配置此服务,则会发生此问题。当您重新启动计算机时,SNMP 服务将这些错误事件记录下来。如果未配置 Evntagnt.dll 文件以在 SNMP 服务启动时进行调试跟踪,则这两个警告事件将被记录下来。

    • 解决方案
      若要防止这两个事件的发生,请在下面的注册表子项中添加 TraceFileName 和 TraceLevel 值:
      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SNMP_EVENTS\EventLog\Parameters

      • TraceFileName
        类型:REG_SZ
        值:空(空白)
      • TraceLevel
        类型:REG_DWORD
        值:32
        修复程序信息
        Microsoft 现在提供了受支持的修复程序,但此修复程序仅用于解决本文所述的问题。只有系统遇到本文提到的特定问题时才可应用此修复程序。
    • 替代方法
      要解决此问题,请将 SNMP 服务启动类型配置为“已禁用”。为此,请按照下列步骤操作:

      1. 单击“开始”,单击“运行”,在“打开”框中键入 services.msc,然后单击“确定”。
      2. 在服务列表中,双击“SNMP Service”。
      3. 在“启动类型”列表中,单击“已禁用”,然后单击“确定”。
        参考资料: http://achilles.blog.sohu.com/1283780.html
    1. @OneToOne

    参见JPA总结——实体关系映射

    1)Person.Java

        import java.io.Serializable;
        import java.util.Date;
        import javax.persistence.CascadeType;
        import javax.persistence.Column;
        import javax.persistence.Entity;
        import javax.persistence.GeneratedValue;
        import javax.persistence.Id;
        import javax.persistence.OneToOne;
        import javax.persistence.Table;
        import javax.persistence.Temporal;
        import javax.persistence.TemporalType;
        /**
          * 关系维护端Person.java
          */
         @Entity
         @Table(name = "Person")
         public class Person implements Serializable {
            
            private Integer personid;//人员ID
            private String name;// 姓名
            private boolean sex;//性别
            private Short age;//年龄
            private Date birthday;//生日
            private IDCard idcard;//身份证号码
            @Id
            @GeneratedValue
            public Integer getPersonid() {
               return personid;
            }
            public void setPersonid(Integer personid) {
               this.personid = personid;
            }
            @Column(name = "PersonName", nullable = false, length =   32)
            public String getName() {
               return name;
            }
            public void setName(String name) {
               this.name = name;
            }
            @Column(nullable = false)
            public boolean getSex() {
               return sex;
            }
            public void setSex(boolean sex) {
               this.sex = sex;
            }
            @Column(nullable = false)
            public Short getAge() {
               return age;
            }
            public void setAge(Short age) {
               this.age = age;
            } 
          /*
          * @Temporal主要是用来指明java.util.Date 或java.util.Calendar 类型的属性具体与数据(date,time,timestamp)三个类型中的那一个进行映射
           */
          @Temporal(value = TemporalType.DATE)
          public Date getBirthday() {
           return birthday;
          }
          public void setBirthday(Date birthday) {
           this.birthday = birthday;
          }
          
          /*
           * @OneToOne注释指明Person 与IDCard为一对一关系,@OneToOne注释五个属性:targetEntity、cascade、fetch、optional 和mappedBy,
         *fetch属性默认值是FetchType.EAGER。optional = true设置idcard属性可以为null,也就是允讦没有身份证,未成年人就是没有身份证的。
         *
         *targetEntity属性:Class类型的属性。定义关系类的类型,默认是该成员属性对应的类类型,所以通常不需要提供定义。
         *cascade属性:CascadeType[]类型。该属性定义类和类之间的级联关系。定义的级联关系将被容器视为对当前类对象及其关联类对象采取相同的操作,
         *而且这种关系是递归调用的。cascade的值只能从CascadeType.PERSIST(级联新建)、CascadeType.REMOVE(级联删除)、
         *CascadeType.REFRESH(级联刷新)、CascadeType.MERGE(级联更新)中选择一个或多个。还有一个选择是使用CascadeType.ALL,表示选择全部四项。
         *
         *fetch属性:FetchType类型的属性。可选择项包括 :FetchType.EAGER 和FetchType.LAZY。
          *FetchType.EAGER表示关系类(本例是OrderItem类)在主类加载的时候同时加载,FetchType.LAZY表示关系类在被访问时才加载。默认值是FetchType.LAZY。
        *
        *@OrderBy(value = "id ASC")注释指明加载元组时按id的升序排序(降序 "DESC")
         */
         @OneToOne(optional = true, cascade = CascadeType.ALL, mappedBy = "person")
          public IDCard getIdcard() {
           return idcard;
          }
          
          public void setIdcard(IDCard idcard) {
           this.idcard = idcard;
          }
         }
    
    1. IDCard .java

       import java.io.Serializable;
       import javax.persistence.CascadeType;
       import javax.persistence.Column;
       import javax.persistence.Entity;
       import javax.persistence.GeneratedValue;
       import javax.persistence.Id;
       import javax.persistence.JoinColumn;
       import javax.persistence.OneToOne;
       import javax.persistence.Table;
       @Entity
       @Table(name = "IDCard")
       public class IDCard implements Serializable {
        
        private Integer id;//流水号
        private String cardno;//身份证号码
        private Person person;//对应的人
        public IDCard() {
        }
        public IDCard(String cardno) {
         this.cardno = cardno;
        }
        @Id
        @GeneratedValue
        public Integer getId() {
         return id;
        }
        public void setId(Integer id) {
         this.id = id;
        }
        @Column(nullable = false, length = 18, unique = true)
        public String getCardno() {
         return cardno;
        }
        public void setCardno(String cardno) {
         this.cardno = cardno;
        }
      
        /**
         * @OneToOne注释指明IDCard与Person为一对一关系,
         * IDCard是关系被维护端,optional = false设置person属性值不能为null,
         * 也就是身份证必须有对应的主人。
         * @JoinColumn(name = "Person_ID", referencedColumnName ="personid",unique = true)
         * 指明IDCard对应表的Person_ID列作为外键与
         * Person对应表的personid列进行关联,unique= true 指明Person_ID 列的值不可重复。
         * @return
         */
        @OneToOne(optional = false, cascade = CascadeType.REFRESH)
        @JoinColumn(name = "Person_ID", referencedColumnName = "personid", unique = true)
        public Person getPerson() {
         return person;
        }
        public void setPerson(Person person) {
         this.person = person;
        }
       }
      

      @OneToOne

      @OneToOne注释指明PersonIDCard为一对一关系,@OneToOne注释五个属性:targetEntitycascadefetchoptionalmappedBy
      optional = true设置idcard属性可以为null,也就是允讦没有身份证,未成年人就是没有身份证的。
      targetEntity属性:Class类型的属性。定义关系类的类型,默认是该成员属性对应的类类型,所以通常不需要提供定义。
      cascade属性:CascadeType[]类型。该属性定义类和类之间的级联关系。定义的级联关系将被容器视为对当前类对象及其关联类对象采取相同的操作,而且这种关系是递归调用的。cascade的值只能从CascadeType.PERSIST(级联新建)、CascadeType.REMOVE(级联删除)、CascadeType.REFRESH(级联刷新)、CascadeType.MERGE(级联更新)中选择一个或多个。还有一个选择是使用CascadeType.ALL,表示选择全部四项。
      fetch属性:FetchType类型的属性。可选择项包括:FetchType.EAGERFetchType.LAZYFetchType.EAGER表示关系类(本例是OrderItem类)在主类加载的时候同时加载,FetchType.LAZY表示关系类在被访问时才加载。默认值是FetchType.LAZY

            @OrderBy(value = "id ASC")注释指明加载元组时按id的升序排序(降序 "DESC")
           Person.class
            @OneToOne(optional = true, cascade = CascadeType.ALL, mappedBy = "person")
            public IDCard getIdcard() {
             return idcard;
            }
            public void setIdcard(IDCard idcard) {
             this.idcard = idcard;
            }
      

    ManyToMany

    文章多对多关系

    servlet3.0 新特性

    Servlet3.0 新特性详解

    Configuration注解

    Spring知识大全

    JPA 整合Hibernate

    JPA

    相关文章

      网友评论

          本文标题:注解消化

          本文链接:https://www.haomeiwen.com/subject/dylvcxtx.html