注解消化

  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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析...
    时待吾阅读 4,817评论 1 13
  • 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析...
    时待吾阅读 4,907评论 0 6
  • 写Java也有一段时间了,一直都有用slf4j log4j输出日志的习惯。但是始终都是抱着“拿来主义”的态度,复制...
    Minimumy阅读 1,333评论 1 7
  • 一、Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layo...
    默默守护阅读 1,863评论 2 8
  • 没有数据库支持的程序都是耍流氓 安装mysql驱动 在下面的网址下载mysqldb模块:http://source...
    上进青年欢乐多阅读 1,256评论 0 3