java项目相关知识点整理

1.Split

Public string[] split(string regex,int limit){

Return pattern.compile(regex).split(this,limit);

}

Regex是正则表达式, limit影响结果数组长度,大于0时,数组长度小于或等于limit,limit为非正时,数组长度为其可能的最大值,但是limit为0时,会告诫结尾的空字符串

String s=”ss,ss,,,,”

Limit为0时 {“ss”,”ss”}

Limit为负时{“ss”,”ss”,””,””,””,””}

2.hibernate和数据库字段默认值

如果在数据表中设置了一个字段的默认值(比如说默认当前日期之类的),并且该字段又不允许为空。如果是用Eclipse中的反向工程对该数据生成的POJO类和hbm.xml映射文件,这时应该要修改映射文件中的两个地方才能正常使用数据库中的默认值。

一是将dynamic-insert设置为true

二是将对应字段的属性设置not-null为false

比如:

schema="dbo" catalog="databaseName" dynamic-insert="true" dynamic-update="true">

....

Hibernate允许我们在映射文件里控制insert和update语句的内容.比如在映射文件中

1)元素 insert属性:设置为false,在insert语句中不包含这个字段,表示永远不会被插入,默认true

2)元素 update属性:设置为false,在update语句中不包含这个字段,表示永远不会被修改,默认true

3)元素 mutable属性:设置为false就是把所有的元素的update属性设置为了false,说明这个对象不会被更新,默认true

4)元素 dynamic-insert属性:设置为true,表示insert对象的时候,生成动态的insert语句,如果这个字段的值是null就不会加入到insert语句当中.默认false

5)元素 dynamic-update属性,设置为true,表示update对象的时候,生成动态的update语句,如果这个字段的值是null就不会被加入到update语句中,默认false

6)元素 dynamic-insert属性:设置为true,表示把所有的元素的dynamic-insert属性设置为true,默认false

7)元素 dynamic-update属性:设置为true,表示把所有的元素的dynamic-update属性设置为true,默认false

Hibernate生成动态SQL语句的消耗的系统资源(比如CPU,内存等)是很小的,所以不会影响到系统的性能,如果表中包含N多字段,建议把dynamic-update属性和insert属性设置为true,这样在插入和修改数据的时候,语句中只包括要插入或者修改的字段.可以节省SQL语句的执行时间,提高程序的运行效率.


3.hibernate SQL查询

select u.filename From tmp_file u where u.status='1' and u.code = '" + code+ "'";

例如上面的sql,返回结果只有一条

List list=session.createSQLQuery(sql).list();

String filename=list.get(0);

不能使用List list=session.createSQLQuery(sql).list();

否则会报java.lang.String cannot be cast to [Ljava.lang.Object;


4.Calendar

Calendar cal=Calendar.getInstance();

SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");

try {

cal.setTime(format.parse(ddates[0]));

} catch (ParseException e) {

e.printStackTrace();

}

int s_month=cal.get(Calendar.MONTH)+1;

int s_maxDay=cal.getActualMaximum(Calendar.DAY_OF_MONTH);

//ddates[0]月最大天数


4.根据表名获取对应的实体名

如要获取所有的表名及其实体名,方法如下:

SessionFactory factory = this.getHibernateTemplate()

.getSessionFactory();

Map metaMap = factory.getAllClassMetadata();

for (String key : (Set) metaMap.keySet()) {

count ++;

AbstractEntityPersister classMetadata = (AbstractEntityPersister) metaMap

.get(key);

String tableName = classMetadata.getTableName().toLowerCase();

String className = classMetadata.getEntityMetamodel().getName();//实体名(含包路径)

if (logger.isDebugEnabled()) {

logger.debug(tableName + " --> " + className);

}

System.out.println(className.substring(className.lastIndexOf(".")+1));//实体名

}


5.将查询结果封装成pojo

String sql = “select a.*,b.name from a,b where “;

List list=dao.createSQLQuery(sql).addEntity(实体.class).addScalar("name").list();


if(!CollectionUtils.isEmpty(list)){

for(int i=0;i

Object[] obj=list.get(i);

实体名 obj=(实体名)obj[0];

String name=(String)obj[1];

obj.setName(name);//可以将name设置成实体的一个非映射表字段的属性后再set

}

}


6.进程

tskill 进程id //杀死进程

7.svn

//删除svn用户的方法为删除C:Users enovoAppDataRoamingSubversionauthsvn.simple

2. 如果是用的JavaHL, 找到以下目录并删除auth目录.

C:"Documents and Settings"[YourUserName]"Application Data"Subversion"

3. 如果你用的SVNKit, 找到以下目录并删除.keyring文件.

[eclipse]"configuration"org.eclipse.core.runtime

8.myeclipse高亮显示

在eclipse/myeclipse中如果不小心把变量的高亮显示弄丢了。可真是件愁人的事,不过看到这你就不用愁了

windows-> preferences-> java-> Editor-> Mark Occurences

最上边的大标题的复选框勾上,下面的就都可以高亮显示了,Local variables是变量的高亮显示

9.ArrayList、LinkedList、数组

1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。

2.对于随机访问get和set,ArrayList优于LinkedList,因为ArrayList可以随机定位,而LinkedList要移动指针一步一步的移动到节点处。(参考数组与链表来思考)

3.对于新增和删除操作add和remove,LinedList比较占优势,只需要对指针进行修改即可,而ArrayList要移动数据来填补被删除的对象的空间。


ArrayList类与数组用法上的区别

1、数组的容量是固定的(虽然也可以扩充的方法,但不主张),而ArrayList的容量是动态的。

2、一个数组只能保存一种类型,而Arraylist可以保存不同类型。

3、数组可以保存基本数据类型,但ArrayList不可以,它保存的是OBJECT类的引用,因此在取出元素时,要做类型转换。

4、数组不能声明为只读数组,而ArrayList可以提供ReadOnly方法,以只读的方式使用。

5、数组的效率高,但ArrayList的效率低。当增加一个新元素时,ArrayList首先要检查其内

部数组是否越界,如没有越界,则可增加;如越界,则新建一个两倍于当前内部数组容量的新数组,将旧内部数组的元素拷贝至新内部数组,并废弃旧数组,因此其效率相比数组要低。


9.>>的>>>的区别

>>表示右移,如:int i=15; i>>2的结果是3,移出的部分将被抛弃。


转为二进制的形式可能更好理解,0000 1111(15)右移2位的结果是0000 0011(3),0001 1010(18)右移3位的结果是0000 0011(3)。


>>>

j>>>i 与 j/(int)(Math.pow(2,i))的结果相同,其中i和j是整形。


10.CXF

Can't find the request for http://localhost:8080/****/****.do's Observer

一般这个错是你可能在项目中用到了cxf,在web.xml中cxf的配置中你可能url-pattern配置为/*,

解决办法:

你在客户端删掉web.xml中的cxf配置或者是在mapping中不要让它映射所有

CXFServlet

/加上路径/*

不然就会首先映射CXFServlet,就会找不到服务


11.UTF-8环境设置

建置全UTF-8的環境:

1.在eclipse.ini的-vmargs下面加上「-Dfile.encoding=UTF-8」。

2.eclipse-->Window-->Preferences-->General-->Workspace-->Text file encoding-->UTF-8

3.Installed JREs-->Default VM Arguments:-->-Dfile.encoding=UTF-8

4.eclipse-->Run-->Run Configurations-->Arguments-->VM arguments-->-Dfile.encoding=UTF-8

--下面两个作用未明,使用以上步骤即可

5.eclipse-->Run-->Run Configuration-->Common 頁籤--> Console Encoding-->Others-->UTF-8

==>亂碼!

5.eclipse-->Run-->Run Configuration-->Common 頁籤--> Console Encoding-->Others-->big5

==>ok!


12.spring注解

12.1@Repository、@Service 和 @Controller、@Component

Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository、@Service 和 @Controller。在目前的 Spring 版本中,这 3 个注释和 @Component 是等效的,但是从注释类的命名上,很容易看出这 3 个注释分别和持久层、业务层和控制层(Web 层)相对应。虽然目前这 3 个注释和 @Component 相比没有什么新意,但 Spring 将在以后的版本中为它们添加特殊的功能。所以,如果 Web 应用程序采用了经典的三层分层结构的话,最好在持久层、业务层和控制层分别采用 @Repository、@Service 和 @Controller 对分层中的类进行注释,而用 @Component 对那些比较中立的类进行注释。

12.2@Autowired与@Resource

1、@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。

2、@Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果要允许null 值,可以设置它的required属性为false,如:

@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下:

Java代码

1. @Autowired() @Qualifier("baseDao")

2. private BaseDao baseDao;

3、@Resource(这个注解属于J2EE的),默认安照名称进行装配,名称可以通过name属性进行指定,

如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,如果注解写在setter方法上默认取属性名进行装配。 当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。


12.3action注解

总结常用的注解如下:


Namespace:指定命名空间。

ParentPackage:指定父包。

Result:提供了Action结果的映射。(一个结果的映射)

Results:“Result”注解列表

ResultPath:指定结果页面的基路径。

Action:指定Action的访问URL。

Actions:“Action”注解列表。

ExceptionMapping:指定异常映射。(映射一个声明异常)

ExceptionMappings:一级声明异常的数组。

InterceptorRef:拦截器引用。

InterceptorRefs:拦截器引用组。

例子:

/**

* Struts2基于注解的Action配置

*

*/

@ParentPackage("struts-default")

@Namespace("/annotation_test")

@Results( { @Result(name = "success", location = "/main.jsp"),

@Result(name = "error", location = "/error.jsp") })

@ExceptionMappings( { @ExceptionMapping(exception = "java.lange.RuntimeException", result = "error") })

public class LoginAction extends ActionSupport {

private static final long serialVersionUID = 2730268055700929183L;

private String loginName;

private String password;


@Action("login") //或者写成 @Action(value = "login")

public String login() throws Exception {


if ("yjd".equals(loginName) && "yjd".equals(password)) {

return SUCCESS;

} else {

return ERROR;

}

}

@Action(value = "add", results = { @Result(name = "success", location = "/index.jsp") })

public String add() throws Exception {

return SUCCESS;

}

13.hibernate注解

不使用注解时的hibernate配置

1.

classpath:/com/……

2.

com/….hbm.xml

使用注解时配置改为:

1.

com……

2.

com….

1。@Entity(name="EntityName")

必须,name为可选,对应数据库中一的个表

2、@Table(name="",catalog="",schema="")

可选,通常和@Entity配合使用,只能标注在实体的class定义处,表示实体对应的数据库表的信息

name:可选,表示表的名称.默认地,表名和实体名称一致,只有在不一致的情况下才需要指定表名

catalog:可选,表示Catalog名称,默认为Catalog("").

schema:可选,表示Schema名称,默认为Schema("").

3、@id

必须

@id定义了映射到数据库表的主键的属性,一个实体只能有一个属性被映射为主键.置于getXxxx()前.

4、@GeneratedValue(strategy=GenerationType,generator="")

可选

strategy:表示主键生成策略,有AUTO,INDENTITY,SEQUENCE 和 TABLE 4种,分别表示让ORM框架自动选择,

根据数据库的Identity字段生成,根据数据库表的Sequence字段生成,以有根据一个额外的表生成主键,默认为AUTO

generator:表示主键生成器的名称,这个属性通常和ORM框架相关,例如,Hibernate可以指定uuid等主键生成方式.

示例:

@Id

@GeneratedValues(strategy=StrategyType.SEQUENCE)

public int getPk() {

return pk;

}

5、@Basic(fetch=FetchType,optional=true)

可选

@Basic表示一个简单的属性到数据库表的字段的映射,对于没有任何标注的getXxxx()方法,默认

即为@Basic

fetch: 表示该属性的读取策略,有EAGER和LAZY两种,分别表示主支抓取和延迟加载,默认为EAGER.

optional:表示该属性是否允许为null,默认为true


示例:

@Basic(optional=false)

public String getAddress() {

return address;

}

6、@Column

可选

@Column描述了数据库表中该字段的详细定义,这对于根据JPA注解生成数据库表结构的工具非常有作用.

name:表示数据库表中该字段的名称,默认情形属性名称一致

nullable:表示该字段是否允许为null,默认为true

unique:表示该字段是否是唯一标识,默认为false

length:表示该字段的大小,仅对String类型的字段有效

insertable:表示在ORM框架执行插入操作时,该字段是否应出现INSETRT语句中,默认为true

updateable:表示在ORM框架执行更新操作时,该字段是否应该出现在UPDATE语句中,默认为

true.对于一经创建就不可以更改的字段,该属性非常有用,如对于birthday字段.

columnDefinition:表示该字段在数据库中的实际类型.通常ORM框架可以根据属性类型自动判

断数据库中字段的类型,但是对于Date类型仍无法确定数据库中字段类型究竟是DATE,TIME还是

TIMESTAMP.此外,String的默认映射类型为VARCHAR,如果要将String类型映射到特定数据库的

BLOB或TEXT字段类型,该属性非常有用.

示例:

@Column(name="BIRTH",nullable="false",columnDefinition="DATE")

public String getBithday() {

return birthday;

}

7、@Transient

可选

@Transient表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性.

如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则,ORM框架默认其注解为@Basic

示例:

//根据birth计算出age属性

@Transient

public int getAge() {

return getYear(new Date()) -getYear(birth);

}

8、@ManyToOne(fetch=FetchType,cascade=CascadeType)

可选

@ManyToOne表示一个多对一的映射,该注解标注的属性通常是数据库表的外键

optional:是否允许该字段为null,该属性应该根据数据库表的外键约束来确定,默认为true

fetch:表示抓取策略,默认为FetchType.EAGER

cascade:表示默认的级联操作策略,可以指定为ALL,PERSIST,MERGE,REFRESH和REMOVE中的若干组合,默认为无级联操作

targetEntity:表示该属性关联的实体类型.该属性通常不必指定,ORM框架根据属性类型自动判断targetEntity.

示例:

//订单Order和用户User是一个ManyToOne的关系

//在Order类中定义

@ManyToOne()

@JoinColumn(name="USER")

public User getUser() {

return user;

}

9、@JoinColumn

可选

@JoinColumn和@Column类似,介量描述的不是一个简单字段,而一一个关联字段,例如.描述一个@ManyToOne的字段.

name:该字段的名称.由于@JoinColumn描述的是一个关联字段,如ManyToOne,则默认的名称由其关联的实体决定.

例如,实体Order有一个user属性来关联实体User,则Order的user属性为一个外键,其默认的名称为实体User的名称+下划线+实体User的主键名称

示例:

见@ManyToOne

10、@OneToMany(fetch=FetchType,cascade=CascadeType)

可选

@OneToMany描述一个一对多的关联,该属性应该为集体类型,在数据库中并没有实际字段.

fetch:表示抓取策略,默认为FetchType.LAZY,因为关联的多个对象通常不必从数据库预先读取到内存

cascade:表示级联操作策略,对于OneToMany类型的关联非常重要,通常该实体更新或删除时,其关联的实体也应当被更新或删除

例如:实体User和Order是OneToMany的关系,则实体User被删除时,其关联的实体Order也应该被全部删除

示例:

@OneTyMany(cascade=ALL)

public List getOrders() {

return orders;

}

11、@OneToOne(fetch=FetchType,cascade=CascadeType)

可选

@OneToOne描述一个一对一的关联

fetch:表示抓取策略,默认为FetchType.LAZY

cascade:表示级联操作策略

示例:

@OneToOne(fetch=FetchType.LAZY)

public Blog getBlog() {

return blog;

}

12、@ManyToMany

可选

@ManyToMany 描述一个多对多的关联.多对多关联上是两个一对多关联,但是在ManyToMany描述中,中间表是由ORM框架自动处理

targetEntity:表示多对多关联的另一个实体类的全名,例如:package.Book.class

mappedBy:表示多对多关联的另一个实体类的对应集合属性名称

示例:

User实体表示用户,Book实体表示书籍,为了描述用户收藏的书籍,可以在User和Book之间建立ManyToMany关联

@Entity

public class User {

private List books;

@ManyToMany(targetEntity=package.Book.class)

public List getBooks() {

return books;

}

public void setBooks(List books) {

this.books=books;

}

}

@Entity

public class Book {

private List users;

@ManyToMany(targetEntity=package.Users.class,mappedBy="books")

public List getUsers() {

return users;

}

public void setUsers(List users) {

this.users=users;

}

}

两个实体间相互关联的属性必须标记为@ManyToMany,并相互指定targetEntity属性,需要注意的是,有且只有一个实体的@ManyToMany注解需要指定mappedBy属性,指向targetEntity的集合属性名称

利用ORM工具自动生成的表除了User和Book表外,还自动生成了一个User_Book表,用于实现多对多关联

13、@MappedSuperclass

可选

@MappedSuperclass可以将超类的JPA注解传递给子类,使子类能够继承超类的JPA注解

示例:

@MappedSuperclass

public class Employee() {

....

}

@Entity

public class Engineer extendsEmployee {

.....

}

@Entity

public class Manager extends Employee{

.....

}

14、@Embedded

可选

@Embedded将几个字段组合成一个类,并作为整个Entity的一个属性.

例如User包括id,name,city,street,zip属性.

我们希望city,street,zip属性映射为Address对象.这样,User对象将具有id,name和address这三个属性.

Address对象必须定义为@Embededable

示例:

@Embeddable

public class Address{city,street,zip}

@Entity

public class User {

@Embedded

public Address getAddress() {

..........

}

}

14.spring MVC

1.需要请求到后台的页面参数必须包含id属性,否则会出现页面不跳转,也不报错的情况

15.java文件下载的几种方式

public HttpServletResponse download(String path, HttpServletResponse response) {

try {

// path是指欲下载的文件的路径。

File file = new File(path);

// 取得文件名。

String filename = file.getName();

// 取得文件的后缀名。

String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();

// 以流的形式下载文件。

InputStream fis = new BufferedInputStream(new FileInputStream(path));

byte[] buffer = new byte[fis.available()];

fis.read(buffer);

fis.close();

// 清空response

response.reset();

// 设置response的Header

response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes()));

response.addHeader("Content-Length", "" + file.length());

OutputStream toClient = new BufferedOutputStream(response.getOutputStream());

response.setContentType("application/octet-stream");

toClient.write(buffer);

toClient.flush();

toClient.close();

} catch (IOException ex) {

ex.printStackTrace();

}

return response;

}

public void downloadLocal(HttpServletResponse response) throws FileNotFoundException {

// 下载本地文件

String fileName = "Operator.doc".toString(); // 文件的默认保存名

// 读到流中

InputStream inStream = new FileInputStream("c:/Operator.doc");// 文件的存放路径

// 设置输出的格式

response.reset();

response.setContentType("bin");

response.addHeader("Content-Disposition", "attachment; filename="" + fileName + """);

// 循环取出流中的数据

byte[] b = new byte[100];

int len;

try {

while ((len = inStream.read(b)) > 0)

response.getOutputStream().write(b, 0, len);

inStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

public void downloadNet(HttpServletResponse response) throws MalformedURLException {

// 下载网络文件

int bytesum = 0;

int byteread = 0;

URL url = new URL("windine.blogdriver.com/logo.gif");

try {

URLConnection conn = url.openConnection();

InputStream inStream = conn.getInputStream();

FileOutputStream fs = new FileOutputStream("c:/abc.gif");

byte[] buffer = new byte[1204];

int length;

while ((byteread = inStream.read(buffer)) != -1) {

bytesum += byteread;

System.out.println(bytesum);

fs.write(buffer, 0, byteread);

}

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

//支持在线打开文件的一种方式

public void downLoad(String filePath, HttpServletResponse response, boolean isOnLine) throws Exception {

File f = new File(filePath);

if (!f.exists()) {

response.sendError(404, "File not found!");

return;

}

BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));

byte[] buf = new byte[1024];

int len = 0;

response.reset(); // 非常重要

if (isOnLine) { // 在线打开方式

URL u = new URL("file:///" + filePath);

response.setContentType(u.openConnection().getContentType());

response.setHeader("Content-Disposition", "inline; filename=" + f.getName());

// 文件名应该编码成UTF-8

} else { // 纯下载方式

response.setContentType("application/x-msdownload");

response.setHeader("Content-Disposition", "attachment; filename=" + f.getName());

}

OutputStream out = response.getOutputStream();

while ((len = br.read(buf)) > 0)

out.write(buf, 0, len);

br.close();

out.close();

}

16.json转换需要的jar包

commons-lang3-3.1.jar 与commons-lang-2.4.jar 的包路径不同

json-lib-2.1.jar需要的是版本2的commons-lang

commons-beanutils-1.8.0.jar不加这个包

java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean

commons-collections.jar 不加这个包

java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap

commons-lang-2.4.jar不加这个包

java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntimeException

commons-logging-1.1.1.jar不加这个包

java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory

ezmorph-1.0.4.jar不加这个包

java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher

json-lib-2.3-jdk15.jar不加这个包

java.lang.NoClassDefFoundError: net/sf/json/JSONObject

17spring事务

同一个类的不同方法相互调用,内层方法配置Propagation.REQUIRES_NEW后该事务不会单独进行提交,而是和外层的事务一起提交。

@Transactional 加于private方法, 无效

@Transactional 加于未加入接口的public方法, 再通过普通接口方法调用, 无效

@Transactional 加于接口方法, 无论下面调用的是private或public方法, 都有效

@Transactional 加于接口方法后, 被本类普通接口方法直接调用, 无效

@Transactional 加于接口方法后, 被本类普通接口方法通过接口调用, 有效

@Transactional 加于接口方法后, 被它类的接口方法调用, 有效

@Transactional 加于接口方法后, 被它类的私有方法调用后, 有效

TransactionDefinition.PROPAGATION_REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。这是默认值。

TransactionDefinition.PROPAGATION_REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则把当前事务挂起。

TransactionDefinition.PROPAGATION_SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。

TransactionDefinition.PROPAGATION_NOT_SUPPORTED:以非事务方式运行,如果当前存在事务,则把当前事务挂起。

TransactionDefinition.PROPAGATION_NEVER:以非事务方式运行,如果当前存在事务,则抛出异常。

TransactionDefinition.PROPAGATION_MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。

TransactionDefinition.PROPAGATION_NESTED:如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于TransactionDefinition.PROPAGATION_REQUIRED。

Spring的AOP即声明式事务管理默认是针对unchecked exception回滚。Spring的事务边界是在调用业务方法之前开始的,业务方法执行完毕之后来执行commit or rollback(Spring默认取决于是否抛出runtimeException)。

Spring事务的回滚机制:

如果你在方法中有try{}catch(Exception e){}处理,那么try里面的代码块就脱离了事务的管理,若要事务生效需要在catch中throw new RuntimeException ("xxxxxx");

18jvm设置

JAVA_OPTS="-Xms512m -Xmx2048m -XX:PermSize=128m -XX:MaxPermSize=512m"

当内存溢出时自动生成dump文件

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/biapp/m.hprof

已经内存溢出且未配置参数时手动抓取dump文件

jmap -dump:format=b,file=文件名 [pid]

19在eclipse中debug模式下,修改方法中的代码,而不重启服务器(部分修改必须重启)


20Ajax传数组至后台注意事项

//防止深度序列化(不加后台接收到的数组会为空)

增加参数traditional: true,

21ibatis中的order by 参数配置问题

总结如下:

1.#是把传入的数据当作字符串,如#field#传入的是id,则sql语句生成是这样,order by "id",这当然会报错..

2.$传入的数据直接生成在sql里,如$field$传入的是id,则sql语句生成是这样,order by id, 这就对了. 如:


3.#方式能够很大程度防止sql注入.

4.$方式一般用于传入数据库对象.例如传入表名.

5.一般能用#的就别用$.


遇到的问题是order by后面的字段是动态的,有时候用字段1,有时候用字段2

sqlmap的配置为:

obder by $mytag1$

obder by $字段2$

展开阅读全文

页面更新:2024-05-11

标签:知识点   注解   数组   字段   语句   实体   属性   名称   事务   类型   方法   项目

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top