文档视界 最新最全的文档下载
当前位置:文档视界 › Hibernate in annotation

Hibernate in annotation

Hibernate in annotation
Hibernate in annotation

Annotation用法:

好处:使用了annotation后可以自动不用写*.hbm.xml的配置文件。方便省事。

首先在项目中导入annotation相应的jar包:

1. ejb3-persistence.jar

2. hibernate-annotations.jar

3. hibernate-commons-annotations.jar

E.g:

@Entity

@Table(name="student",uniqueConstraint=(columnNames{“name”})) public class Student

{

private Integer id;

private String name;

//让该字段为id,即设置其为主键,自动增加

@Id

@GeneratedValue(strategy=GenerationType.identity)

//修改字段的长度为5

@Column(length=5)

public Integer get Id()

{

return i d;

}

@Column(name="name",length=20)

public String get N ame()

{

return name;

}

public void set Id(Integer id)

{

this.id = id;

}

public void set Name(String name)

{

https://www.docsj.com/doc/1010669924.html, = name;

}

}

1.@Entity:通过@entity将一个类声明为一个实体bean(即一个持久化POJO类);

2.@id : 声明实体的标识属性,

3. @Table :类一级的注释,可以为实体bean映射指定的数据表(table),catalog和schema

的名字,如果,没有定义@table则系统自动默认表名与bean的名称相同。

uniqueConstraint设置表的唯一约束,看的出来columnNames是一个

columnName的数组,可以些多个列名.

4.@GeneratedValue :设置主键生成策略, identity表示生成策略为identity,auto;

5.@Column :定义bean属性相对应的数据表的列名,

Configuration中的配置:

关联的annotation配置:

One2one:

主键:

@OneToOne(cascade=CascadeType.ALL)

@PrimaryKeyJoinColumn:定义使用主键作为关联

外键:

@JoinColumn():定义个连接列(Jion Column)用法与@Column的用法大致相同,多了referencedColumnName参数,次参数表示定义了所有相关联目标实体类中的联接列,当关联到的是非主键列的时候,关联的目标类必须实现Serializable,在设置双向连接的时候需要在1方设

置:@OneToOne(mappedBy=”beanAttributeName”) mappedBy中参数为相对关联中实体类属性的名称(以getter后边的内容为准)

单向外键映射:在Person中有CreditCard的映射

@Entity

public class Person

{

private Integer id;

private String name;

private CreditCard card;

@OneToOne

@JoinColumn(name="creditCartId")

public CreditCard getCard() {

return card;

}

public void setCard(CreditCard card) {

this.card = card;

}

@Id

@GeneratedValue

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

https://www.docsj.com/doc/1010669924.html, = name;

}

}

@JoinColumn(name="creditCartId")

系统默认生成表名+”_”加字段名称,如果不喜欢可以使用@ JoinColumn来进行修改@Entity

public class CreditCard

{

private Integer id;

private String cid;

@Id

@GeneratedValue

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getCid() {

return cid;

}

public void setCid(String cid) {

this.cid = cid;

}

}

系统会在Person表中插入一些card_id来表示外键的引用

双向外键关联:互相包含

@Entity

public class CreditCard

{

private Integer id;

private String cid;

private Person person;

@OneToOne

public Person getPerson() {

return person;

}

public void setPerson(Person person) {

this.person = person;

}

@Id

@GeneratedValue

public Integer getId(){

return id;

}

public void setId(Integer id){

this.id = id;

}

public String getCid() {

return cid;

}

public void setCid(String cid){

this.cid = cid;

}

}

如果这样配置的话,将会在CreditCard表中插入一个新列,这样会产生冗余,

这样解决:

在CreditCard表中设置:@OneToOne(mappedBy="card")这样就不会产生那列,,mappedBy=“card”card表示在Person中声明的private CreditCard card;也就是(public CreditCard getCard()中getCard 中的card

Many2One:

一般配置如下:

@entity,

@ManyToOne(cascade={CascadeType.PERSIST,CascadeType.MERGE}) @JoinColumn(name=”column_name”) 注:次注解需要写在bean属性的

getter方法前一行

@targetEntity:设置目标的实体类名称,通常不需要定义,

@JoinTable(name=”table_name”),

JoinColumn(name=”column_name”)需要关联的列明, InverseJoinColumns=@JoinColumn(name=”cloumn_name”)指向目标实体表的外键.

单向多对一:

Address作为多的一方

@Entity

public class Address

{

private Integer id;

private String name;

@Id

@GeneratedValue

public Integer getId(){

return id;

}

public void setId(Integer id){

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

https://www.docsj.com/doc/1010669924.html, = name;

}

}

在一的一方加入多的映射:

@Entity

public class Person

{

private Integer id;

private String name;

private Address address;

@ManyToOne

@JoinColumn(name="addressid")

public Address getAddress() {

return address;

}

public void setAddress(Address address) { this.address = address;

}

@Id

@GeneratedValue

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

https://www.docsj.com/doc/1010669924.html, = name;

}

}

@ManyToOne设置多对一映射

@JoinColumn(name="addressid") 设置外键的名称

One2Many:

@OneToMany() :定义一个一对多关联,在双向关联是需要配置mappedby参数@JoinTable(name=”table_name”),指定对应的实体类的数据表名称

JoinColumn(name=”column_name”)需要关联的列明, InverseJoinColumns=@JoinColumn(name=”cloumn_name”)指向目标实体表的外键.

单项一对多:在多的一方加外键

@Entity

public class Address

{

private Integer id;

private String name;

private Set persons = new HashSet();

@OneToMany

@JoinColumn(name="addressId")

public Set getPersons() {

return persons;

}

public void setPersons(Set persons) {

this.persons = persons;

}

@Id

@GeneratedValue

public Integer getId(){

return id;

}

public void setId(Integer id){

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

https://www.docsj.com/doc/1010669924.html, = name;

}

@OneToMany:设置关联为1对多

@JoinColumn(name="addressId"):设置关系为外键,如果比写入,系统默认使用中间表来建立两张表的关系

@Entity

@Table(name="Person")

public class Person

{

private Integer id;

private String name;

@Id

@GeneratedValue

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

https://www.docsj.com/doc/1010669924.html, = name;

}

}

@Table(name="Person")设置表名为Person,

一对多和多对一双向关联:

@Entity

public class Address

{

private Integer id;

private String name;

private Set persons = new HashSet();

@OneToMany(mappedBy="address")

public Set getPersons()

{

return persons;

}

public void setPersons(Set persons) {

this.persons = persons;

@Id

@GeneratedValue

public Integer getId(){

return id;

}

public void setId(Integer id){

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

https://www.docsj.com/doc/1010669924.html, = name;

}

}

@OneToMany(mappedBy="address"):设置一个一对多关联

如果不加mappedBy="address"会在person表中生成两个外键应用,冗余了,

@Entity

@Table(name="Person")

public class Person

{

private Integer id;

private String name;

private Address address;

@ManyToOne

public Address getAddress() {

return address;

}

public void setAddress(Address address) {

this.address = address;

}

@Id

@GeneratedValue

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

https://www.docsj.com/doc/1010669924.html, = name;

}

}

@ManyToOne:设置一个多对一得关联

Many2Many:定义多对多关联, 通过@table描述关联表和关联表之间的关系,双向关联时一端必须定义为owner,另一端必须定义为inverse

@ManyToMany(targetEntity=全路径.calss)

@JoinTable(name=”table_name”),

JoinColumn(name=”column_name”)需要关联的列明,

InverseJoinColumns=@JoinColumn(name=”cloumn_name”)指向目标实体表的外键.

单项多对多:person可以知道自己有多少个address,但是address不知道有多少个person,使用中间表来进行连接

@Entity

public class Person

{

private Integer id;

private String name;

private Set

address = new HashSet
();

@ManyToMany

@JoinTable(name="p_a",joinColumns={@JoinColumn(name="personid")

},inverseJoinColumns={@JoinColumn(name="addressid")})

public Set

getAddress() {

return address;

}

public void setAddress(Set

address) {

this.address = address;

}

@Id

@GeneratedValue

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

https://www.docsj.com/doc/1010669924.html, = name;

}

}

@ManyToMany

@JoinTable(name="p_a",

joinColumns={@JoinColumn(name="personid")},

inverseJoinColumns={@JoinColumn(name="addressid")}

)

@ ManyToMany用来设置一个多对多引用;

joinColumns属性是一个数组,这里设置中间表与当前类所代表的表的外键id,之所有声明为一个数组。就是怕person是使用的联合主键;

inverseJoinColumns是设置相关联的表的外键名称。使用和joinColumns基本一样。

@Entity

public class Address

{

private Integer id;

private String name;

@Id

@GeneratedValue

public Integer getId(){

return id;

}

public void setId(Integer id){

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

https://www.docsj.com/doc/1010669924.html, = name;

}

}

双项多对多:person可以知道自己有多少个address,但是address也知道有多少个person,使用中间表来进行连接

只需在address中修改:

@Entity

public class Address

{

private Integer id;

private String name;

private Set persons = new HashSet();

@ManyToMany(mappedBy="address")

public Set getPersons() {

return persons;

}

public void setPersons(Set persons) {

this.persons = persons;

}

@Id

@GeneratedValue

public Integer getId(){

return id;

}

public void setId(Integer id){

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

https://www.docsj.com/doc/1010669924.html, = name;

}

}

@ManyToMany(mappedBy="address"):设置一个多对多;一定要设置mappedBy; 只要是双向关联mappedBy必设。

CascadeType.PERSIST:如果一个实体是受管状态或者当persist()函数调用是,触发级联创建(create)操作,

CascadeType.MERGE:如果一个实体是受管状态或者当merge()方法被调用时,触发级联合并(merge)操作,

CascadeType.REMOVE:当delete()函数被调用时,触发级联删除(remove)操作, CascadeType.REFRESH:当refresh()函数被调用时,触发级联跟新(refresh)操作CascadeType.ALL: 以上全部.

Java注解

注解 可以先把注解当成注释来看,注释就是给类的各个组成部分(包、类名、构造器、属性、方法、方法参数,以及局部变量)添加一些解释。 可以先不去管注解是用来干什么的,就把它当成注释来看。注解的格式当然不能与注释相同,注解是需要声明的,声明注解与声明一个接口有些相似。当然Java也有一些内置注解,例如:@Override就是内置注解。 1声明注解 声明注解与声明一个接口相似,它需要使用@interface。一个注解默认为Annotation的 注解还可以带有成员,没有成员的注解叫做标记注解。成员的类型只能是基本类型、枚举类型)、String、基本类型数组、String[],以及注解和注解数组类型。 其中String表示成员的类型,value()表示成员名称。其中圆括号不能没有,也不能在圆

括号内放参数,它不是一个方法,只是一个成员变量。 注解可以有多个成员,但如果只有一个成员,那么成员名必须为value。这时在设置成

Java还提供了一些元注解,用来控制注解,例如@Retention和@Target: ●@Target:ElementType类型(枚举类型),表示当前注解可以标记什么东西,可选 值为: TYPE:可以标记类、接口、注解类、Enum。 FIELD:可以标记属性。 METHOD:可以标记就去。 PARAMETER:可以标记参数。 CONSTRUCTOR:可以标记构造器。 LOCAL_VARIABLE:可以标记局部变量。 ANNOTATION_TYPE:可以标记注解类声明。

PACKAGE:可以标记包。 ●@Retention:RetentionPolicy类型(枚举类型),表示注解的可保留期限。可选值为: SOURCE:只在源代码中存在,编译后的字节码文件中不保留注解信息。 CLASS:保留到字节码文件中,但类加载器不会加载注解信息到JVM。 RUNTIME:保留到字节码文件中,并在目标类被类加载器加载时,同时加载注解信息到JVM,可以通过反射来获取注解信息。 2访问注解 很多第三方程序或工具都使用了注解完成特殊的任务,例如Spring、Struts等。它们都提供了自己的注解类库。在程序运行时使用反射来获取注解信息。下面我们来使用反射来获取注解信息。

annotation入门_

Java Annotation 入门
摘要: 本文针对 java 初学者或者 annotation 初次使用者全面地说明了 annotation 的使用方法、定义 方式、分类。初学者可以通过以上的说明制作简单的 annotation 程序,但是对于一些高级的 an notation 应用(例如使用自定义 annotation 生成 javabean 映射 xml 文件)还需要进一步的研 究和探讨。涉及到深入 annotation 的内容,作者将在后文《Java Annotation 高级应用》中谈 到。
同时,annotation 运行存在两种方式:运行时、编译时。上文中讨论的都是在运行时的 annota tion 应用,但在编译时的 annotation 应用还没有涉及,
一、为什么使用 Annotation:
在 JAVA 应用中,我们常遇到一些需要使用模版代码。例如,为了编写一个 JAX-RPC web serv ice,我们必须提供一对接口和实现作为模版代码。如果使用 annotation 对远程访问的方法代码 进行修饰的话,这个模版就能够使用工具自动生成。 另外,一些 API 需要使用与程序代码同时维护的附属文件。例如,JavaBeans 需要一个 BeanIn fo Class 与一个 Bean 同时使用/维护,而 EJB 则同样需要一个部署描述符。此时在程序中使用 a nnotation 来维护这些附属文件的信息将十分便利而且减少了错误。
二、Annotation 工作方式:
在 5.0 版之前的 Java 平台已经具有了一些 ad hoc annotation 机制。比如,使用 transient 修 饰符来标识一个成员变量在序列化子系统中应被忽略。而@deprecated 这个 javadoc tag 也是 一个 ad hoc annotation 用来说明一个方法已过时。从 Java5.0 版发布以来,5.0 平台提供了 一个正式的 annotation 功能:允许开发者定义、使用自己的 annoatation 类型。此功能由一个 定义 annotation 类型的语法和一个描述 annotation 声明的语法,读取 annotaion 的 API,一 个使用 annotation 修饰的 class 文件,一个 annotation 处理工具(apt)组成。
1

shiro入门教程

一、介绍: shiro是apache提供的强大而灵活的开源安全框架,它主要用来处理身份认证,授权,企业会话管理和加密。 shiro功能:用户验证、用户执行访问权限控制、在任何环境下使用session API,如cs程序。可以使用多数据源如同时使用oracle、mysql。单点登录(sso)支持。remember me服务。详细介绍还请看官网的使用手册:https://www.docsj.com/doc/1010669924.html,/reference.html 与spring security区别,个人觉得二者的主要区别是: 1、shiro灵活性强,易学易扩展。同时,不仅可以在web中使用,可以工作在任务环境内中。 2、acegi灵活性较差,比较难懂,同时与spring整合性好。 如果对权限要求比较高的项目,个人建议使用shiro,主要原因是可以很容易按业务需求进行扩展。 附件是对与shiro集成的jar整合及源码。 二、shiro与spring集成 shiro默认的配置,主要是加载ini文件进行初始化工作,具体配置,还请看官网的使用手册(https://www.docsj.com/doc/1010669924.html,/web.html)init文件不支持与spring的集成。此处主要是如何与spring及springmvc集成。 1、web.xml中配置shiro过滤器,web.xml中的配置类使用了spring的过滤代理类来完成。 Xml代码 2、在spring中的application.xml文件中添加shiro配置:

Java代码

anon org.apache.shiro.web.filter.authc.AnonymousFilter authc org.apache.shiro.web.filter.authc.FormAuthenticatio nFilter authcBasic org.apache.shiro.web.filter.authc.BasicHttpAuthenti cationFilter logout org.apache.shiro.web.filter.authc.LogoutFilter noSessionCrea tion org.apache.shiro.web.filter.session.NoSessionCreati onFilter perms org.apache.shiro.web.filter.authz.PermissionsAuthor izationFilter port org.apache.shiro.web.filter.authz.PortFilter rest org.apache.shiro.web.filter.authz.HttpMethodPermiss ionFilter roles org.apache.shiro.web.filter.authz.RolesAuthorizatio nFilter ssl org.apache.shiro.web.filter.authz.SslFilter user https://www.docsj.com/doc/1010669924.html,erFilter

RESTEasy入门经典

RESTEasy是JBoss的开源项目之一,是一个RESTful Web Services框架。RESTEasy的开发者Bill Burke同时也是JAX-RS的J2EE标准制定者之一。JAX-RS 是一个JCP制订的新标准,用于规范基于HTTP的RESTful Web Services的API。 我们已经有SOAP了,为什么需要Restful WebServices?用Bill自己的话来说:"如果是为了构建SOA应用,从技术选型的角度来讲,我相信REST比SOAP更具优势。开发人员会意识到使用传统方式有进行SOA架构有多复杂,更不用提使用这些做出来的接口了。这时他们就会发现Restful Web Services的光明之处。" 说了这么多,我们使用RESTEasy做一个项目玩玩看。首先创造一个maven1的web 项目 Java代码 1.mvn archetype:create -DgroupId=org.bluedash \ 2. 3.-DartifactId=try-resteasy -DarchetypeArtifactId=maven-archetype -webapp 准备工作完成后,我们就可以开始写代码了,假设我们要撰写一个处理客户信息的Web Service,它包含两个功能:一是添加用户信息;二是通过用户Id,获取某个用户的信息,而交互的方式是标准的WebService形式,数据交换格式为XML。假设一条用户包含两个属性:Id和用户名。那么我们设计交换的XML数据如下: Java代码 1. 2. 1 3. liweinan 4. 首先要做的就是把上述格式转换成XSD2,网上有在线工具可以帮助我们完成这一工作3,在此不详细展开。使用工具转换后,生成如下xsd文件: Java代码 1. 2. 4.

关系映射annotation

一对一(One-To-One) 使用@OneToOne注解建立实体Bean之间的一对一关联。一对一关联有三种情况:(1).关联的实体都共享同样的主键,(2).其中一个实体通过外键关联到另一个实体的主键(注意要模拟一对一关联必须在外键列上添加唯一约束),(3).通过关联表来保存两个实体之间的连接关系(要模拟一对一关联必须在每一个外键上 添加唯一约束)。 1.共享主键的一对一关联映射: @Entity @Table(name="Test_Body") public class Body { private Integer id; private Heart heart; @Id public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @OneToOne @PrimaryKeyJoinColumn public Heart getHeart() { return heart; }

public void setHeart(Heart heart) { this.heart = heart; } } @Entity @Table(name="Test_Heart") public class Heart { private Integer id; @Id public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } } 通过@PrimaryKeyJoinColumn批注定义了一对一关联 2.使用外键进行实体一对一关联: @Entity @Table(name="Test_Trousers") public class Trousers { @Id public Integer id;

java中注解的几大作用

@SuppressWarnings("deprecation")//阻止警告 @HelloAnnotation("当为value属性时,可以省掉属性名和等于号。") public static void main(String[]args)throws Exception{ System.runFinalizersOnExit(true); if(AnnotationTest.class.isAnnotationPresent(HelloAnnotation.class)){ HelloAnnotation helloAnnotation= (HelloAnnotation)AnnotationTest.class.getAnnotation(HelloAnnotation.class); System.out.println("color():"+helloAnnotation.color()); System.out.println("value():"+helloAnnotation.value()); System.out.println("author():"+helloAnnotation.author()); System.out.println("arrayAttr():"+helloAnnotation.arrayAttr().length); System.out.println("annotationAttr():"+helloAnnotation.annotationAttr().value()); System.out.println("classType(): "+helloAnnotation.classType().newInstance().sayHello("hello,ketty")); } } @Deprecated//自定义:备注过时的方法信息 public static void sayHello(){ System.out.println("hello,world"); } }

ERDAS IMAGINE快速入门

实验一ERDAS IMAGINE快速入门 一、背景知识 ERDAS IMAGINE是美国ERDAS公司开发的遥感图像处理系统,后来被Leica公司合并。它以其先进的图像处理技术,友好、灵活的用户界面和操作方式,面向广阔应用领域的产品模块,服务于不同层次用户的模型开发工具以及高度的RS/GIS(遥感图像处理和地理信息系统)集成功能,为遥感及相关应用领域的用户提供了内容丰富而功能强大的图像处理工具,代表了遥感图像处理系统未来的发展趋势。 ERDAS IMAGINE是以模块化的方式提供给用户的,可使用户根据自己的应用要求、资金情况合理地选择不同功能模块及其不同组合,对系统进行剪裁,充分利用软硬件资源,并最大限度地满足用户的专业应用要求,目前的最高版本为9.1。ERDAS IMAGINE面向不同需求的用户,对于系统的扩展功能采用开放的体系结构以IMAGINE Essentials、IMAGINE Advantage、IMAGINE Professional的形式为用户提供了低、中、高三档产品架构,并有丰富的功能扩展模块供用户选择,使产品模块的组合具有极大的灵活性。 ?IMAGINE Essentials级:是一个花费极少的,包括有制图和可视化核心功能的影像工具软件。该级功能的重点在于遥感图像的输入、输出与显示;图像库的 建立与查询管理;专题制图;简单几何纠正与非监督分类等。 ?IMAGINE Advantage级:是建立在IMAGINE Essential级基础之上的,增加了更丰富的图像光栅GIS和单片航片正射校正等强大功能的软件。IMAGINE Advantag提供了灵活可靠的用于光栅分析,正射校正,地形编辑及先进的影像 镶嵌工具。简而言之,IMAGINE Advantage是一个完整的图像地理信息系统 (Imaging GIS)。 ?IMAGINE Professional级:是面向从事复杂分析,需要最新和最全面处理工具,

一小时搞明白注解处理器(Annotation Processor Tool)

一小时搞明白注解处理器(Annotation Processor Tool) 什么是注解处理器? 注解处理器是(Annotation Processor)是javac的一个工具,用来在编译时扫描和编译和处理注解(Annotation)。你可以自己定义注解和注解处理器去搞一些事情。一个注解处理器它以Java代码或者(编译过的字节码)作为输入,生成文件(通常是java文件)。这些生成的java文件不能修改,并且会同其手动编写的java代码一样会被javac编译。看到这里加上之前理解,应该明白大概的过程了,就是把标记了注解的类,变量等作为输入内容,经过注解处理器处理,生成想要生成的java代码。 处理器AbstractProcessor 处理器的写法有固定的套路,继承AbstractProcessor。如下: [java] view plain copy 在CODE上查看代码片派生到我的代码片 public class MyProcessor extends AbstractProcessor { @Override public synchronized void init(ProcessingEnvironment processingEnv) { super.init(processingEnv); } @Override public Set getSupportedAnnotationTypes() { return null; } @Override public SourceVersion getSupportedSourceVersion() { return https://www.docsj.com/doc/1010669924.html,testSupported(); } @Override public boolean process(Set annotations, RoundEnvironment roundEnv) { return true; } } init(ProcessingEnvironment processingEnv) 被注解处理工具调用,参数ProcessingEnvironment 提供了Element,Filer,Messager等工具 getSupportedAnnotationTypes() 指定注解处理器是注册给那一个注解的,它是一个字符串的集合,意味着可以支持多个类型的注解,并且字符串是合法全名。getSupportedSourceVersion 指定Java版本 process(Set annotations, RoundEnvironment roundEnv) 这个也是最主

二次开发入门MapBasic--MapInfo教程

MapInfo教程--二次开发入门摘要:MapBasic是Mapinfo自带的二次开发语言,它是一种类似Basic的解释性语言,利用MapBasic编程生成的*.mbx文件能在Mapinfo软件平台上运行,早期的Mapinfo二次开发都是基于MapBasic进行的。MapBasic学起来容易,用起来却束缚多多,无法实现较复杂的自定义功能,用它来建立用户界面也很麻烦,从现在角度看,MapBasic比较适合用于扩展Mapinfo功能。 一、利用MapBasic开发 MapBasic是Mapinfo自带的二次开发语言,它是一种类似Basic的解释性语言,利用MapBasic编程生成的*.mbx文件能在Mapinfo软件平台上运行,早期的Mapinfo二次开发都是基于MapBasic进行的。MapBasic学起来容易,用起来却束缚多多,无法实现较复杂的自定义功能,用它来建立用户界面也很麻烦,从现在角度看,MapBasic比较适合用于扩展Mapinfo功能。 二、利用OLE自动化开发 1. 建立Mapinfo自动化对象 基于OLE自动化的开发就是编程人员通过标准化编程工具如VC、VB、Delphi、PB等建立自动化控制器,然后通过传送类似MapBasic语言的宏命令对Mapinfo进行操作。实际上是将Mapinfo用作进程外服务器,它在后台输出OLE自动化对象,供控制器调用它的属性和方法。 OLE自动化开发的首要一步就是建立Mapinfo自动化对象,以Delphi为例(后面都是如此),你可设定一个Variant类型的全程变量代表OLE自动化对象,假设该变量名为olemapinfo,那么有: oleMapinfo := CreateOleObject('Mapinfo.Application') 一旦OLE自动化对象建立,也就是后台Mapinfo成功启动,你就可以使用该对象的Do方法向Mapinfo发送命令,如: oleMapinfo.Do('Set Next Document Parent' + WinHand + 'Style 1') 这一命令使Mapinfo窗口成为应用程序的子窗口,WinHand是地图窗口句柄,style 1 是没有边框的窗口类型。你还可以使用自动化对象的Eval方法返回MapBasic表达式的值,如下面语句返回当前所打开的表数: TablesNum:=olemapinfo.eval('NumTables()') 你也可以直接调用Mapinfo菜单或按钮命令对地图窗口进行操作,如地图放大显示:oleMapinfo.RunMenuCommand(1705) 2. 建立客户自动化对象触发CallBack 基于OLE自动化开发的难点在于所谓的CallBack,Mapinfo服务器对客户程序地图窗口的反应叫CallBack,假如你在地图窗口中移动地图目标,Mapinfo能返回信息告诉你地图目标当前的坐标位置,这就是CallBack功能。如果你想定制自己的地图操作工具或菜单命令,你必须依靠CallBack。但是想捕获CallBack信息,你的客户程序必须具备接收CallBack信息的能力,为此需要在客户程序中定义自己的OLE自动化对象,如: //定义界面 IMyCallback = interface(IDispatch) ['{2F4E1FA1-6BC7-11D4-9632-913682D1E638}'] function WindowContentsChanged(var WindowID: Integer):SCODE;safecall; function SetStatusText(var StatusText: WideString): SCODE; safecall; //定义界面实现

java注解详解

注解(Annotation)简介 Annotation(注解)是JDK5.0及以后版本引入的一个特性。注解是java的一个新的类型(与接口很相似),它与类、接口、枚举是在同一个层次,它们都称作为java的一个类型(TYPE)。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。它的作用非常的多,例如:进行编译检查、生成说明文档、代码分析等。 JDK提供的几个基本注解 a.@SuppressWarnings 该注解的作用是阻止编译器发出某些警告信息。 它可以有以下参数: deprecation:过时的类或方法警告。 unchecked:执行了未检查的转换时警告。 fallthrough:当Switch程序块直接通往下一种情况而没有Break时的警告。 path:在类路径、源文件路径等中有不存在的路径时的警告。 serial:当在可序列化的类上缺少serialVersionUID定义时的警告。 finally:任何finally子句不能完成时的警告。 all:关于以上所有情况的警告。 b.@Deprecated 该注解的作用是标记某个过时的类或方法。 c.@Override 该注解用在方法前面,用来标识该方法是重写父类的某个方法。 元注解 a.@Retention 它是被定义在一个注解类的前面,用来说明该注解的生命周期。 它有以下参数: RetentionPolicy.SOURCE:指定注解只保留在一个源文件当中。 RetentionPolicy.CLASS:指定注解只保留在一个class文件中。 RetentionPolicy.RUNTIME:指定注解可以保留在程序运行期间。 b.@Target 它是被定义在一个注解类的前面,用来说明该注解可以被声明在哪些元素前。 它有以下参数: ElementType.TYPE:说明该注解只能被声明在一个类前。 ElementType.FIELD:说明该注解只能被声明在一个类的字段前。 ElementType.METHOD:说明该注解只能被声明在一个类的方法前。 ElementType.PARAMETER:说明该注解只能被声明在一个方法参数前。

Maya从入门到精通经典讲解

Maya绝技83式从入门到精通 第1招、自制MAY A启动界面 在安装目录下的BIN文件夹中的MayaRes.dll文件,用Resource Hacker打开。在软件的目录树中找到“位图”下MAY ASTARTUPIMAGE.XPM并保存。图片分辨率要一致,然后选择替换位图,把自己修改的图片替换保存,即可。 第2招、控制热盒的显示 MAYA中的热盒可以按着空格键不放,就可以显示出来。并且按下鼠标左键选择Hotbox Style 中的Zones Only可以不让热盒弹出。如果选择Center Zone Only可以连AW的字样也不会出现。完全恢复的快捷键是ALT+M。 第3招、创建多彩的MAY A界面 MAYA默认界面色彩是灰色的,如果你想尝试一下其他的色彩界面,可以自行修改。方法是选择Windows/Settings/Preferences/Colors... 第4招、创建自己的工具架 把自己最常用的工具放置在工具架的方法是,按下Ctrl+Shift的同时,点选命令,该命令就可以添加到当前的工具架上了。 第5招、自定义工具架图标 我们将一行MEL添加到工具架上的时候,图标出现MEL字样,不容易区分,此时可以选择Windows/Settings/Preferences/Shelves选择新添加的命令,单击Change Image按钮,选择要替换的图片,选择Save All Shelves按钮,就替换成功。 第6招、自定义标记菜单 执行Windows/Settings/Preferences/Marking Menus设置相关参数,然后在Settings下符合自己操作习惯来设置参数,最后单击Save即可。 第7招、自定义物体属性 如果想添加一个属性,并且把其他数据进行设置表达式或者驱动关键帧,就必须在属性对话框中点击Attributes/add... 第8招、选择并且拖动 打开Windows/Settings/Preferences在Selection中,勾选Click Drag Select然后点击Save这样就可以了。 第9招、界面元素隐藏或显示 执行Display/UI Elements下的Show UI Elements或者Hide UI Elements可以对于全界面下元素显示或者隐藏。 第10招、改变操纵器的显示大小与粗细 打开Windows/Settings/Preferences在Manipulators中修改Line Size可以改变操纵器的显示粗细,按下小键盘的“+”“-”可以改变操纵器的显示大小。

hibernate_annotation

Hibernate Annotation 使用hibernate Annotation来映射实体 准备工作 下载 hibernate-distribution-3.3.2.GA hibernate-annotations-3.4.0.GA slf4j 导入相关依赖包 Hibernate HOME: \hibernate3.jar \lib\bytecode(二进制) \lib\optional(可选的) \lib\required(必须的) 导入required下的所有jar包 antlr-2.7.6.jar commons-collections-3.1.jar dom4j-1.6.1.jar hibernate3.jar javassist-3.9.0.GA.jar jta-1.1.jar slf4j-api-1.5.10.jar slf4j-log4j12-1.5.10.jar log4j-1.2.14.jar mysql.jar ---Annotation包 ejb3-persistence.jar hibernate-annotations.jar hibernate-commons-annotations.jar

简单的例子,通过annotation注解来映射实体PO 1、建立(Java Project)项目:hibernate_0100_annotation_HelloWorld_default 2、在项目根下建立lib目录 a)导入相关依赖jar包 antlr-2.7.6.jar commons-collections-3.1.jar dom4j-1.6.1.jar ejb3-persistence.jar hibernate-annotations.jar hibernate-commons-annotations.jar hibernate3.jar javassist-3.9.0.GA.jar jta-1.1.jar log4j-1.2.14.jar mysql.jar slf4j-api-1.5.10.jar slf4j-log4j12-1.5.10.jar 3、建立PO持久化类cn.serup.model.Teacher 内容如下 package cn.serup.model; import javax.persistence.Entity; import javax.persistence.Id; //@Entity表示该是实体类 @Entity public class Teacher { private int id ; private String username ; private String password ; //ID为主键,主键手动分配 @Id public int getId() { return id; } public void setId(int id) { this.id = id;

springMVC+annotation的简单配置

Spring MVC + Annotation 1.创建一个web工程名字spring_mvc 2.添加相应配置文件 添加spring应用上下文的文件applicationContext.xml Log4j配置文件:log4j.properties 3.在web.xml中添加配置 1.配置spring上下文 contextConfigLocation /WEB-INF/applicationContext.xml 2.添加log4J的配置文件 log4jConfigLocation /WEB-INF/classes/log4j.properties 3.设置字符集 CharacterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 forceEncoding true CharacterEncodingFilter /* 4.对spring上下文添加监听 org.springframework.web.context.ContextLoaderListener

WGCNA新手入门笔记2(含代码和数据)

WGCNA新手入门笔记2(含代码和数据) 上次我们介绍了WGCNA的入门(WGCNA新手入门笔记(含代码和数据)),大家在安装WGCNA包的时候,可能会遇到GO.db这个包安装不了的问题。主要问题应该是出在电脑的防火墙,安装时请关闭防火墙。 如果还有问题,请先单独安装AnnotationDbi这个包,biocLite("AnnotationDbi") 再安装GO.db,并尝试从本地文件安装该包。 如果还有问题,请使用管理员身份运行R语言,尝试上述步骤。 另外如果大家问题解决了请在留言处留个言,告知大家是在哪一步解决了问题,谢谢!因为本人没有进行单因素实验,不知道到底是哪个因素改变了实验结果。。。 今天给大家过一遍代码。网盘中有代码和数据。 链接:https://www.docsj.com/doc/1010669924.html,/s/1bpvu9Dt 密码:w7g4 ##导入数据## library(WGCNA)options(stringsAsFactors = FALSE)enableWGCNAThreads()

enableWGCNAThreads()是指允许R语言程序最大线程运行,像我这电脑是4核CPU的,那么就能用上3核: 当然如果当前电脑没别的事,也可以满负荷运作 samples=read.csv( 'Sam_info.txt',sep = 't',https://www.docsj.com/doc/1010669924.html,s = 1)expro=read.csv( 'ExpData.txt',sep = 't',https://www.docsj.com/doc/1010669924.html,s = 1)dim(expro) 这部分代码是为了让R语言读取外部数据。当然了在读取数据之前首先改变一下工作目录,这一点在周二的文章中提过了。R语言读取外部数据的方式常用的有read.table和read.csv,这里用的是read.csv,想要查看某一函数的具体参数,可以用?函数名查看,比如: 大家可以注意到read.table和read.csv中header参数的默认值是不同的,header=true表示第一行是标题,第二行才是数据,header=false则表示第一行就是数据,没有标题。##筛选方差前25%的基因## m.vars=apply(expro, 1,var)expro.upper=expro[which(m.vars>quantile(m.vars, probs = seq( 0, 1, 0.25))[ 4]),]dim(expro.upper)datExpr= as.data.frame(t(expro.upper));nGenes = ncol(datExpr)nSamples = nrow(datExpr) 这一步是为了减少运算量,因为一个测序数据可能会有好几

java中注解的几大作用

注解的作用: 1、生成文档。这是最常见的,也是java 最早提供的注解。常用的有@see @param @return 等 2、跟踪代码依赖性,实现替代配置文件功能。比较常见的是spring 2.5 开始的基于注解配置。作用就是减少配置。现在的框架基本都使用了这种配置来减少配置文件的数量。以后java的程序开发,最多的也将实现注解配置,具有很大用处; 3、在编译时进行格式检查。如@override 放在方法前,如果你这个方法并不是覆盖了超类方法,则编译时就能检查出。 使用方法详解: 下面是注解类,其实注解也就是一个类文件 package annotation; import https://www.docsj.com/doc/1010669924.html,ng.annotation.ElementType; import https://www.docsj.com/doc/1010669924.html,ng.annotation.Retention; import https://www.docsj.com/doc/1010669924.html,ng.annotation.RetentionPolicy; import https://www.docsj.com/doc/1010669924.html,ng.annotation.Target; import entity.PersonChiness; /*** * Retention:保持、保留 * RetentionPolicy:政策、方针 * @author huawei *@Retention *1、指示注释类型的注释要保留多久。如果注释类型声明中不存在Retention 注释,则保留策略默认为RetentionPolicy.CLASS *2、有三种取值(代表三个阶段): * RetentionPolicy.SOURCE:保留注解到java源文件阶段,例如Override、SuppressWarnings * RetentionPolicy.CLASS:保留注解到class文件阶段,例如 * RetentionPolicy.RUNTIME:保留注解到运行时阶段即内存中的字节码,例如Deprecated */ //元注解:表示的是注解的注解,(同义词有元信息、元数据) //如果不加,javac会把这无用的注解丢掉 @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE,ElementType.METHOD})//指定该注解使用的用处:用在class上和用在方法体上。 public @interface HelloAnnotation {

如何做annotation

如何做annotation 可以从文章结构(topic, thesis, thesis statement, topic sentence, coherence, unity, etc.)、文章内容(main idea and function of each para.)、读后(reflection)。 具体建议: ?Underline key words. ?Note the meaning and function of each para. ?Summarize the key information. ?Identify the purpose. ?Evaluate the strengths and weaknesses in logic, ? writing style, languages, etc./Agree or disagree ?Reflect on the topic 90-100分的评分标准如下: 90-100 An active and in-depth examination of a text—explanatory and critical ?Recognize and remember the vital information (summarize main idea, purpose, etc.) ?Analyze the organization of the text (topic, thesis, function of each para., etc.) ?Analyzing facts, opinions, and bias statements, if there are ?Interpreting the facts along with the author’s attitude ?Evaluate the strengths and weaknesses of the text ?Agree or disagree with certain points in the text ?Reflect: Think about the subject matter more deeply and thoroughly

Angular2 入门

Angular2 入门 快速上手 Why Angular2 Angular1.x显然非常成功,那么,为什么要剧烈地转向Angular2? 性能的限制 AngularJS当初是提供给设计人员用来快速构建HTML表单的一个内部工具。随着时间的推移,各种特性被加入进去以适应不同场景下的应用开发。然而由于最初的架构限制(比如绑定和模板机制),性能的提升已经非常困难了。 快速变化的WEB 在语言方面,ECMAScript6的标准已经完成,这意味着浏览器将很快支持例如模块、类、lambda表达式、generator等新的特性,而这些特性将显著地改变JavaScript的开发体验。 在开发模式方面,Web组件也将很快实现。然而现有的框架,包括Angular1.x对WEB组件的支持都不够好。 移动化 想想5年前......现在的计算模式已经发生了显著地变化,到处都是手机和平板。Angular1.x没有针对移动应用特别优化,并且缺少一些关键的特性,比如:缓存预编译的视图、触控支持等。 简单易用 说实话,Angular1.x太复杂了,学习曲线太陡峭了,这让人望而生畏。Angular 团队希望在Angular2中将复杂性封装地更好一些,让暴露出来的概念和开发接口更简单。 Rob Eisenberg / Angular 2.0 Team

ES6工具链 要让Angular2应用跑起来不是件轻松的事,因为它用了太多还不被当前主流浏览器支持的技术。所以,我们需要一个工具链: Angular2是面向未来的科技,要求浏览器支持ES6+,我们现在要尝试的话,需要加一些垫片来抹平当前浏览器与ES6的差异: ?angular2 polyfills - 为ES5浏览器提供ES6特性支持,比如Promise 等。 ?systemjs - 通用模块加载器,支持AMD、CommonJS、ES6等各种格式的JS模块加载 ?typescript - TypeScript转码器,将TypeScript代码转换为当前浏览器支持的ES5 代码。在本教程中,systemjs被配置为使用TypeScript转码器。 ?reactive extension - javascript版本的反应式编程/Reactive Programming实现库,被打包为systemjs的包格式,以便systemjs动态加载。 ?angular2 - Angular2框架,被打包为systemjs的包格式,以便systemjs 动态加载模块。 处于方便代码书写的考虑,我们将这些基本依赖打包到一个压缩文件中:?angular2.beta.stack.min.js

相关文档