1.hibernate,update属性:
更新用户信息时,因为不含修改password,所以每次更新数据库时,都抛出password列不能为空的异常。
我们可以使用属性update=”false“,应用在property上,该列在update操作中将永远不会更新。
例子:<property name=”password” column=”password” update=”false” />
还有一个属性dynamic-update=”true“,应用在class上,这样在更新该实例时将生成动态的update语句,如果更新时某属性值未发生变化,就不会加入到update语句中。
例子:<class name=”com.opzoon.license.domain.User” table=”t_user” dynamic-update=”true”>…</class>
但此属性用在这里不能实现我的目的。还在研究中。。。
注:hibernate中还有insert跟update类似,但dynamic-insert是忽略null值,将是null的属性不添加到insert语句中。
2.spring,@RequestBody:
使用@RequestBody时,要引入org.codehaus.jackson。否则不能转换json类型的参数,而且不会提示缺少该jar包。
另外,要将json转换bean时,http的Content-Type为application/json。
3.spring,@PostConstruct:
(1)tomcat启动时会调用标有该注解的方法。
(2)该方法的类上要有@Service,并且该方法为public。
4.java不常用到得关键字:
1.transient:标记为transient的变量,在对象存储时,这些变量状态不会被持久化。当对象序列化的保存在存储器上时,不希望有这些字段数据被保存,为了保证安全性,可以把这些字段声明为transient。
2.volatile:在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
5.jsp配置异常页面:
<error-page> <exception-type>xxx.xxx.xxx.xxx.Exception</exception-type> <location>/error.jsp</location> </error-page>
6.spring.xml配置文件的命名空间:
在spring.xml配置文件中,有主要命名空间和普通命名空间之分。
主要命名空间的配置为xmlns=”…”。配置之后,下面的配置文件中用到该命名空间,都可以省略。
普通命名空间的配置为xmlns:param=”…”。配置之后,配置文件中用到该命名空间时不可省略,使用方式为<param:tag>…</param:tag>。其中,param可任意起名。
例如:主要命名空间为beans的话:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:beans="http://www.springframework.org/schema/security" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd"> <security:http> ... </security:http> </beans>
主要命名空间为security的话:
<bean:beans xmlns="http://www.springframework.org/schema/security" xmlns:bean="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd"> <http> ... </http> </bean:beans>
7.maven项目打包时,不打包*.hbm.xml文件:
解决方法:
<build> <finalName>xxx</finalName> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.hbm.xml</include> </includes> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> </includes> </resource> </resources> </build>
8.CDATA:
xml文件中,用CDATA可以放入非法的字符:
<![CDATA[ ]]>
9.Spring读取.properties文件的方法:
<!-- 1 --> <bean id="propertyConfiger" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="database.properties"></property> </bean> <!-- 2 --> <context:property-placeholder location="classpath:database.properties" /> <!-- 3 --> <bean id="propertyConfiger" class="org.springframework.beans.factory.config.PropertyOverrideConfigurer"> <property name="location" value="database.properties"></property> </bean> <!-- 4 --> <context:property-override location="classpath:database.properties" />
以上的方式可以用以下方法读取配置的属性:
<property name="username" value="${username}" />
还有一种方式如下:
<!-- 5 --> <util:properties id="database" location="classpath:database.properties" />
读取方式也与上面不同:
<property name="username" value="#{database['username']}" />
10.servlet接收js传递的数组:
String[] names = request.getParameterValues(“names[]”);
[]表示的是接收的是一个数组,必须写。如果不写,则接收到的只有一个元素,是所有数组连接成的字符串。
11.java中的正则表达式:
在正则表达式中,\表示的是转义字符,如果要匹配真正的字符串’\’,需要将其转义,用\\来匹配字符串”\”。
而在java中,\也是转义字符,所以字符串中的\要写成”\\”。
所以,正则表达式中的\\表示\,java字符串中的\\表示\。以此类推,java字符串表示的正则表达式中\\\\表示\。
例如:我要把字符串中的单斜线替换成双斜线:
str.replaceAll("\\\\", "\\\\\\\\");
12.tomcat支持带中文的url:
在tomcat中的server.xml中的Connector中添加两个设置:
useBodyEncodingForURI=”true” //设置POST和GET使用相同编码
URIEncoding=”UTF-8″ //对URI使用utf-8编码处理
1 |
<Connector useBodyEncodingForURI="true" URIEncoding="UTF-8" connectionTimeout="20000" maxThreads="150" port="8888" protocol="HTTP/1.1" redirectPort="8443"/> |
13.spring获取web根目录:
在web.xml中的<web-app>节点内加入:
<context-param> <param-name>webAppRootKey</param-name> <param-value>XXXX</param-value> </context-param> <listener> <listener-class>org.springframework.web.util.WebAppRootListener</listener-class> </listener>
然后就可以用System.getProperty(“XXXX”)获取了web根目录了。
14.占位符的使用:
MessageFormat.format(“aaa{0}bbb{1}ccc{2}”, “this is 0”, “this is 1”, “this is 2”);
15.maven配置jdk的版本:
(1)修改settings.xml,全局修改
<profiles> <profile> <id>jdk-1.8</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.8</jdk> </activation> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> </properties> </profile> </profiles>
(2)修改pom.xml,单个项目修改
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.2</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin>
16.java保留两位小数的4种方法
public class RoundOff { double num = 111231.5585; public void m1() { BigDecimal bg = new BigDecimal(num); System.out.println(bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()); } /** * DecimalFormat转换最简便 */ public void m2() { DecimalFormat df = new DecimalFormat("#.00"); System.out.println(df.format(num)); } /** * String.format打印最简便 */ public void m3() { System.out.println(String.format("%.2f", num)); } public void m4() { NumberFormat nf = NumberFormat.getNumberInstance(); nf.setMaximumFractionDigits(2); System.out.println(nf.format(num)); } public static void main(String[] args) { RoundOff ro = new RoundOff(); ro.m1(); ro.m2(); ro.m3(); ro.m4(); } }
17.java获取时间段内所有日期
public class DateUtils { public static List<Date> findDates(Date dBegin, Date dEnd) { List<Date> lDate = new ArrayList<Date>(); lDate.add(dBegin); Calendar calBegin = Calendar.getInstance(); // 使用给定的 Date 设置此 Calendar 的时间 calBegin.setTime(dBegin); Calendar calEnd = Calendar.getInstance(); // 使用给定的 Date 设置此 Calendar 的时间 calEnd.setTime(dEnd); // 测试此日期是否在指定日期之后 while (dEnd.after(calBegin.getTime())) { // 根据日历的规则,为给定的日历字段添加或减去指定的时间量 calBegin.add(Calendar.DAY_OF_MONTH, 1); lDate.add(calBegin.getTime()); } return lDate; } public static void main(String[] args) throws Exception { String start = "2014-02-01"; String end = "2014-03-02"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date dBegin = sdf.parse(start); Date dEnd = sdf.parse(end); List<Date> lDate = findDates(dBegin, dEnd); for (Date date : lDate) { System.out.println(sdf.format(date)); } } }
18.java生成指定范围内的随机数
public class NumberUtils { public static int random(int min, int max) { Random random = new Random(); return random.nextInt(max+1) % (max-min+1) + min; } public static void main(String[] args) { System.out.println(random(10, 20)); } }
19.maven install 跳过单元测试
方法一:
mvn install -DskipTests 这种不执行测试用例,但会编译测试用例。相当于pom里的如下配置:
<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin> </plugins> </build> [...] </project>
方法二:
mvn install -Dmaven.test.skip=true 这种不会执行测试用例,也不会编辑测试用例。相当于pom里的如下配置:
<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin> </plugins> </build> [...] </project>
20.给int数字前补0,生成字符串
String.format(“%08d”, i):在int i前补0,生成八位数字的字符串
21.System.exit(status)
结束正在运行的java虚拟机。System.exit(0)表示正常退出程序,status非0表示非正常退出,多用于catch中。
22.Java集合转成Scala集合
import scala.collection.JavaConversions._
23.Java Daemon Thread(守护线程)
所谓守护线程,是指在程序运行的时候在后台提供一种通用服务的线程,比如垃圾回收线程就是一个很称职的守护者,并且这种线程并不属于程序中不可或缺的部分。因此,当所有的非守护线程结束时,程序也就终止了,同时会杀死进程中的所有守护线程。反过来说,只要任何非守护线程还在运行,程序就不会终止。将线程转换为守护线程可以通过调用Thread对象的setDaemon(true)方法来实现。
24.下载maven项目的依赖jar包
mvn dependency:copy-dependencies -DoutputDirectory=lib
楼下是疯子。哈哈