Spring学习总结

这两周入门了Spring框架,接下来就是学习mybatis了,所以在学习新一个框架前,对学习的框架做一个总结,以方便新手进行学习。

主要是学习了Spring的IOC控制反转、AOP、JDBC模板和Spring事物管理。那么我就总结一下这几方面的学习经验,主要是加上代码进行理解。

IOC

IOC就是把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象。在传统中当我们用的对象时通常回去NEW一个对象,但是IOC通过配置文件把对象生成,便宜实现bean的管理和操作。
那么怎么通过配置进行bean对象的生成呢,即IOC过程,我就介绍两种方式吧,一种就是使用无参构造创建对象,另一种就是通过注解的方式生成对象。
(1)使用无参构造生成对象

   
     
    
   
      
  

当然这只是配置类对象的方式而已还不能使用,我们还需配置另一个具有hello这个类为属性的另一个类来调用hello类对象的方法。那么就涉及到注入属性的问题了,注入属性有参构造注入属性和使用Set方法注入等,那么一般都是使用set方法注入,这里以这种方法来写。


     

    
    
   
   -->
            

     

使用demo调用hello方法输出hello world

//调用hello类的对象
  //hello类
   package Uclass;

    public class hello {
          public void sayhello(){
           System.out.println("hello world");
         }
}   




 package Uclass;

 public class Demo {
     //使用set方法注入属性
     private hello hello;
public void sethello(hello hello) {
    this.hello = hello;
}
public void output(){
    System.out.println("use demo...."+hello);
    hello.sayhello();
}

(2)使用注解进行对象生成

 
 
  //扫描指定包注解

 

使用demo

 package Uclass;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component(value="temp")//通过注解创建对象
 public class zhushuxing {
 @Autowired //通过注解创建属性得对象,还有@resource(name="属性名")  
 private  hello hello;

public void output(){
    hello.sayhello ();
}

AOP

AOP可以这么理解,当我们需要在许多类中添加相同逻辑(或记录等其他)代码的时候,一般我们编程会在每一个类中都写上这些代码。当需要修改的时候,我们又必须找出这些类来删除这些逻辑代码。AOP可以帮我们需要这些逻辑代码指定到类中的某个方法前面执行,或者在方法后面执行,又或者我想指定在类的某一个位置去执行它,那么这就不是复用的问题了,而是要修改类了,变成动态的了。

 
   
    
    
    
        
      
    
        
       
            
         
              
                 
               
               

这里的两个类的代码没有保存,所以就不上代码了,通过配置文件即在不用修改aop2的类代码就能调用aop1的方法在aop2进行输出。

JDBC模板

相对于java原生的JDBC,使用Spring的模板对数据库进行管理会更方便

基础模板

 package jdbcTemper;

  import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.List;

 import org.junit.Test;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

public class jdbc {
@Test
public void add(){
   //设置数据库信息
    DriverManagerDataSource dataSource=new DriverManagerDataSource();
    dataSource.setDriverClassName("com.mysql.jdbc.Driver");
    dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/guan");
    dataSource.setUsername("root");
    dataSource.setPassword("123456");       
    //创建template模板对象,设置数据源
    JdbcTemplate jdbc=new JdbcTemplate(dataSource);
    //调用模板对象实现天加操作
    
    //String sql="insert into users value(?)";添加
    //String sql="delete from users where username=?"删除
    //String sql="update users set where username=?" 修改
    //int i=jdbc.update(sql, "spring");
    //System.out.println(i);
///////////////////////
//  查询
    //查询返回某一个值
    //String sql="select count(*) from users";
    //调用jdbc Template的方法
    //int  name=jdbc.queryForObject(sql, Integer.class);
    //System.out.println(name);
/*
 * 查询对象,第一第二步和上面的相同
 * 下面方法中第二个参数使接口rowMapper,需要自己写一个类来实现它,要new你实现接口的类,第三个参数是要查询的变量
 * */   
    //String sql="select * from users where username=?";
//  User user=jdbc.queryForObject(sql, new myrowMapper(), "spring");
//  System.out.println(user.getUsername());
/**
 * 查询发回list集合
 * 
 */
String sql ="select * from users";  
List  list=jdbc.query(sql, new myrowMapper());    
    System.out.println(list);
    
    
    
  }

}
  //实现查询返回对象和list集合的操作
 class myrowMapper implements RowMapper{

        @Override
        //ResultSet和java中jdbc的一样,只是上部分已被封装了,到这一步自己实现查询
    public User mapRow(ResultSet rs, int arg1) throws SQLException {
    // TODO Auto-generated method stub
    String username= rs.getString("username");
     User user=new User();
     user.setUsername(username);
    
    return user;
}
 
 }

对于如何使用这个模板,在我学习的代码中已经注解了过程,看懂应该不难,还有就是使用配置文件和模板一起使用的方法了,这里就不介绍了。

Spring事务管理

Spring事物管理在我理解就是 ,事务就是对一系列的数据库操作(比如插入多条数据)进行统一的提交或回滚操作,
如果插入成功,那么一起成功,如果中间有一条出现异常,那么回滚之前的所有操作。
这样可以防止出现脏数据,防止数据库数据出现问题。 开发中为了避免这种情况一般都会进行事务管理。
在JDBC中是通过Connection对象进行事务管理的,默认是自动提交事务,可以手工将自动提交关闭,
通过commit方法进行提交,rollback方法进行回滚,如果不提交,则数据不会真正的插入到数据库中。

你可能感兴趣的:(Spring学习总结)