java学习

java学习

 

Java的动态代理例子

Java的动态代理是为了拦截目标方法,例子:
public interface Person {
String sing(String name);
String dance(String name);
}
public class Liyuchun implements Person {
public String sing(String name){
System.out.println("唱" + name +"歌");
return "唱" + name +"歌";
}
public String dance(String name){
System.out.println("跳"+name+"舞");
return "跳"+name+"舞";
}
}
public class LiyuchunProxy {
private Person person ;
public Person createProxy(Person p){
this.person=p;
return (Person) Proxy.newProxyInstance(LiyuchunProxy.class.getClassLoader(), person.getClass().getInterfaces(), new InvocationHandler(){
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
String methodName = method.getName();
if(methodName.equals("sing")){
return method.invoke(person, args);
}else if(methodName.equals("dance")){
return method.invoke(person, args);
}else{
System.out.println("不支持");
return null;
}
}
});
}
}
public class ProxyTest {
public static void main(String[] args) {
Liyuchun cun = new Liyuchun();
LiyuchunProxy liyuchunProxy = new LiyuchunProxy();
Person person = liyuchunProxy.createProxy(cun);
String result =  person.dance("机械");
System.out.println(result);
}
}

posted @ 2017-08-16 17:06 杨军威 阅读(87) | 评论 (0)编辑 收藏

BeanUtils复制对象的日期转换

public class Bean1 {
private String a;
private String b;
private String time;
public String getA() {
return a;
}
public void setA(String a) {
this.a = a;
}
public String getB() {
return b;
}
public void setB(String b) {
this.b = b;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
}
public class Bean2 {
private int a;
private String b;
private Date time;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public String getB() {
return b;
}
public void setB(String b) {
this.b = b;
}
public Date getTime() {
return time;
}
public void setTime(Date time) {
this.time = time;
}
}
import java.lang.reflect.InvocationTargetException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;
public class Test {
public static void main(String[] args) throws IllegalAccessException, InvocationTargetException {
Bean1 bean1 = new Bean1();
bean1.setA("22");
bean1.setB("fff");
bean1.setTime("2017-01-22 11:11:11");
Bean2 bean2 = new Bean2();
resp();
BeanUtils.copyProperties(bean2, bean1);
System.out.println(bean2.getA());
System.out.println(bean2.getB());
System.out.println(bean2.getTime());
}
private static void resp() {
ConvertUtils.register(new Converter() {
@Override
public Object convert(Class arg0, Object value) {
if(value != null &&!"".equals(value.toString())){
String v=value.toString();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:MM:ss");
try {
return sdf.parse(v);
} catch (ParseException e) {
e.printStackTrace();
}
}
return null;
}
}, Date.class);
}
}

posted @ 2017-08-16 16:31 杨军威 阅读(473) | 评论 (0)编辑 收藏

spring事务处理的一个例外处理

当一个不在spring容器中的一个类,需要用到事务,这时需要调用spring容器中的其他类来实现事务。比如:
在类中使用context.getBean("aService");得到服务类,此服务类含有事务。

posted @ 2017-08-16 11:02 杨军威 阅读(108) | 评论 (0)编辑 收藏

spring的jdbc的几种实现方式

1、配置spring文件:
<beans xmlns="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-2.5.xsd">
<!-- 
读取配置文件
-->
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<value>classpath:jdbc.properties</value>
</property>
</bean>
<bean id="dataSource" destroy-method="close"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<bean id="classesDao" class="cn.itheima03.spring.jdbc.ClassesDaoImpl">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg index="0" ref="dataSource"></constructor-arg>
</bean>
<bean id="classesDao2" class="cn.itheima03.spring.jdbc.ClassesDaoImpl2">
<property name="jdbcTemplate">
<ref bean="jdbcTemplate"/>
</property>
</bean>
<bean id="itheimaTemplate" class="cn.itheima03.spring.itheima03db.ItHeimaTemplate">
<constructor-arg index="0" ref="dataSource"></constructor-arg>
</bean>
<bean id="classesDao4" class="cn.itheima03.spring.itheima03db.ClassesDaoImpl4">
<constructor-arg index="0" ref="dataSource"></constructor-arg>
</bean>
<bean id="classesDao3" class="cn.itheima03.spring.jdbc.ClassesDaoImpl3">
<constructor-arg index="0" ref="dataSource"></constructor-arg>
</bean>
</beans>
2、第一种方式:
public class ClassesDaoImpl extends JdbcDaoSupport implements ClassesDao{
public void saveClasses() {
this.getJdbcTemplate().execute("insert into classes(cname,description) values('a','a')");
}
@Override
public List<Classes> getClasses() {
// TODO Auto-generated method stub
return this.getJdbcTemplate().query("select * from classes", new ClassesRowMapper());
}
}
3、第二种方式:
public class ClassesDaoImpl2 implements ClassesDao{
private JdbcTemplate jdbcTemplate;
public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public void saveClasses() {
// TODO Auto-generated method stub
this.jdbcTemplate.execute("insert into classes(cname,description) values('a','a')");
}
@Override
public List<Classes> getClasses() {
// TODO Auto-generated method stub
return null;
}
}
4.第三种方式:
public class ClassesDaoImpl3 extends JdbcTemplate implements ClassesDao{
public ClassesDaoImpl3(DataSource dataSource){
super(dataSource);
}
public void saveClasses() {
this.execute("insert into classes(cname,description) values('a','a')");
}
@Override
public List<Classes> getClasses() {
return null;
}
}
5、自定义数据库操作类:
public class ItHeimaTemplate {
private DataSource dataSource;
public DataSource getDataSource() {
return dataSource;
}
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
public ItHeimaTemplate(){}
public ItHeimaTemplate(DataSource dataSource){
this.dataSource = dataSource;
}
public void insert(String sql){
try {
Connection conn = this.dataSource.getConnection();
Statement statement = conn.createStatement();
statement.executeUpdate(sql);
} catch (Exception e) {
}
}
}
public class ClassesDaoImpl4 extends ItHeimaTemplate{
public ClassesDaoImpl4(DataSource dataSource){
super(dataSource);
}
public void insert(){
this.insert("insert into classes(cname,description) values('a','a')");
}
}

posted @ 2017-08-15 16:38 杨军威 阅读(139) | 评论 (0)编辑 收藏

js自定义事件

$().ready(function(){
    for (var i = 0; i < 300; i++) {
        $("input[type='button']").unbind("click");
$("input[type='button']").bind("click",function(){
/**
* 触发自定义的事件
*/
$(this).trigger("杨军威",{
a:5,
b:6
});
});
    }
$("input[type='button']").unbind("杨军威");
$("input[type='button']").bind("杨军威",function(event,json){
alert(json.a+json.b);
});
});
/**
 * 自定义事件
 *   1、自定义一个事件,该事件的名称为"云三很牛"  
 *   2、把该事件绑定在button上
 *   3、该事件在点击button的时候触发
 */

posted @ 2017-08-15 15:27 杨军威 阅读(79) | 评论 (0)编辑 收藏

hibernate的session缓存和二级缓存和查询缓存

1、session有缓存功能,但是当session关闭后,缓存消失。
2.二级缓存是sessionfactory级别的,当hibernate容器启动后,
二级缓存就存在了,当hibernate关闭后,二级缓存消失。
hibernate本身对于二级缓存是关闭的,而且没有实现二级缓存的机制。
在hibernate.cfg.xml文件中配置:
<!-- 启用二级缓存 -->
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.use_query_cache">true</property>
<!-- 配置缓存提供商 -->
<property name="hibernate.cache.provider_class">
org.hibernate.cache.EhCacheProvider
</property>
在实体类中配置
<class-cache class="com.nacosoft.pda.user.PdaUser" usage="read-write" />
如果想开启集合的二级缓存,需要开启针对集合类的二级缓存。
如果二级缓存的数据量大,可以在src目录下新建ehcache.xml文件,把数据缓存在磁盘上。
3.查询缓存:在二级缓存的基础上,在代码里写:
Query query = session.createQuery("from Person");
query.setCacheable(true);
List list = query.list();
就可以使用查询缓存了

posted @ 2017-08-15 11:51 杨军威 阅读(159) | 评论 (0)编辑 收藏

hibernate的session产生方式

1、sessionFactory.openSession(),只要调用此方法,就会产生一个新的session。
2、sessionFactory.getCurrentSession()产生session的逻辑是:
先判断当前线程中有无session,如果没有,调用sessionFactory.openSession()产生新的session,
并放入到当前线程中。如果session存在,直接取当前线程中的session,当使用此方法产生的session时,
crud操作必须在事务中进行,并且不用关闭session。

posted @ 2017-08-15 10:33 杨军威 阅读(93) | 评论 (0)编辑 收藏

jdbc和hibernate的优缺点

jdbc的缺点:
1.代码太繁琐,2、不是面向对象的数据库操作。
3、资源关闭的代码繁琐,每次都需要打开和关闭。
4、没有数据缓存。5、数据库移植性差。
优点:是最底层的操作,所以效率高。
hibernate优点:
1、代码精简、2、是面向对象的数据库操作
3.只需要关闭一个session对象就可以了
4.数据有缓存,一级缓存和二级缓存用于查询缓存
5.都是面向对象操作,数据库移植性好。
缺点:1、程序无法控制sql的生成,如果系统重视对sql优化,不适合用hibernate。
2、如果单表数据量超过一千万,不适合用hibernate

posted @ 2017-08-14 14:02 杨军威 阅读(116) | 评论 (0)编辑 收藏

jersey面向资源开发5

前端传递json数据,配置第一种方法
<!-- media type -->
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
<version>${jersey.version}</version>
</dependency>
@ApplicationPath("/webapi/*")
public class AirResourceConfig extends ResourceConfig {
    public AirResourceConfig() {
     //   packages("com.example.resource");   
        register(BookResource.class);
    }
}
前端传递json数据,配置第二种方法
  <!-- media type -->
        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-json-jackson</artifactId>
            <version>${jersey.version}</version>
        </dependency>
@ApplicationPath("/api/*")
public class JsonResourceConfig extends ResourceConfig {
    public JsonResourceConfig() {
        register(BookResource.class);
        register(JacksonFeature.class);
        register(JsonContextProvider.class);
    }
}
@Provider
public class JsonContextProvider implements ContextResolver<ObjectMapper> {
    final ObjectMapper d;
    final ObjectMapper c;
    public JsonContextProvider() {
        d = createDefaultMapper();
        c = createCombinedMapper();
    }
    private static ObjectMapper createCombinedMapper() {
        Pair ps = createIntrospector();
        ObjectMapper result = new ObjectMapper();
        //result.configure(Feature.WRAP_ROOT_VALUE, true);
        //result.configure(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE, true);
        result.setDeserializationConfig(result.getDeserializationConfig().withAnnotationIntrospector(ps));
        result.setSerializationConfig(result.getSerializationConfig().withAnnotationIntrospector(ps));
        return result;
    }
    private static ObjectMapper createDefaultMapper() {
        ObjectMapper result = new ObjectMapper();
        result.configure(Feature.INDENT_OUTPUT, true);
        return result;
    }
    private static Pair createIntrospector() {
        AnnotationIntrospector p = new JacksonAnnotationIntrospector();
        AnnotationIntrospector s = new JaxbAnnotationIntrospector();
        return new Pair(p, s);
    }
    @Override
    public ObjectMapper getContext(Class<?> type) {
        if (type == JsonHybridBook.class) {
            return c;
        } else {
            return d;
        }
    }
}

posted @ 2017-07-31 17:44 杨军威 阅读(131) | 评论 (0)编辑 收藏

Java 删除list中的数据

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Test {
private static Iterator<String> iterator;
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
iterator = list.iterator();
while (iterator.hasNext()) {
String next = iterator.next();
if("1".equals(next)){
list.remove(next);
}
}
for(String s : list){
System.out.println(s);
}
}
}

posted @ 2017-07-31 10:48 杨军威 阅读(284) | 评论 (0)编辑 收藏

仅列出标题
共43页: First 上一页 7 8 9 10 11 12 13 14 15 下一页 Last 

导航

统计

常用链接

留言簿

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜