接触的新知识概述:mysql存储过程、spring异步、hibernate动态更新、java调用储存过程、消息推送、java解析json数据。
一、mysql存储过程
delimiter $$ #声明定界符
drop procedure if exists 'demo_pro' $$
create procedure 'demo_pro'(in p1 int,out p2 varchar(200)) #in 表示入参,out表示处参,参数类型,
begin
..........
end $$
delimiter;
说明:1、
IN 输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值 OUT 输出参数:该值可在存储过程内部被改变,并可返回(不改变时输出的是null) INOUT 输入输出参数:调用时指定,并且可被改变和返回
2、declare 变量 和 set @变量,前者是局部变量,后者是全局变量,即使在存储过程之外也可以改变此变量的值
3、CONCAT(p1,p2),链接函数,将变量p1的值与p2的链接起来。
4、data_format(变量,‘%Y-%m-%d %H:%m:%s’),日期格式化函数
5、if(表达式,result1,result2),is null, is not null,ifnull(expression,result)
6、GROUP_CONCAT 合并多行数据的时候使用,与group by联合使用
7、union 和 union all ,前者会过滤掉重复的数据,后者不过滤
8、case ...when ...then...else ... end case
9、prepare ... execute ... deallocate prepare...预处理,动态传参
mysql>PREPARE stmt1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
mysql>SET @a = 3;
mysql>SET @b = 4;
mysql>EXECUTE stmt1 USING @a, @b;
mysql>DEALLOCATE PREPARE stmt1;
二、spring异步配置文件applicationContext.xml
<context:component-scan base-package="com.ubunta"/>
<task:annotation-driver/>
在需要执行的方法上加注解@Async即可实现此方法异步执行
三、hibernate动态更新在po类的头上加上@DynamicUpdate(true)即可实现,当从数据库中查询的对象改变之后更新数据库的时候只更新已被更改的字段,若该对象没有被改变,即使调用saveOrUpdate方法也不会真更去更新数据库。
配置文件里面 dynamic-insert,dynamic-update
四、java调用存储过程Connection conn = super.getConnection(); CallableStatment call = conn.prepareCall("{call demo_pro(?,?)}"); call.setInt(1,21); call.setString(2,"nihao"); call.execute(); ResultSet rs = call.getResultSet();
五、消息推送主要分IOS和Android,IOS需要苹果的证书,android使用百度的云推
六、java解析json数组使用Jackson框架解析json
ObjectMapper map = new ObjectMapper();
map.readValue(jsonStr,bean.class);
参考:http://www.cnblogs.com/lee0oo0/archive/2012/08/23/2652751.html