Spring使用与ssh整合

原文链接:http://blog.csdn.net/qq_22329521/article/details/75000091

第一步导包

配置约束

在src下创建applicationContext.xml文件




创建对象




    
    
    
   
       
    
    
    
   
    
    

      
    

public class User {
    private String name;
    private Integer age;

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
    public void init(){
        System.out.println("init");
    }
    public void destory(){
        System.out.println("destory");
    }
}

public class UserFactory {
    public static User createUser(){
        return new User();
    }

    public  User createUser2(){
        return new User();
    }
}


 @Test
    public void fun1(){

        //1.创建容器
        ClassPathXmlApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
        //2.向容器要user对象(第一种)
        User user = (User) ac.getBean("user");
         //2.向容器要user对象(第二种)
        User user = (User) ac.getBean("user1");
         //2.向容器要user对象(第三种)
        User user = (User) ac.getBean("user2");
        //打印user
        System.out.println(user);
        //容器关闭
        ac.close();
    }

属性注入

(set方法注入)
    
        
        
        
    


    
        
        
    

构造函数注入
  
       
        
        
    
    
             
          
        
    

//为了避免有多个构造函数指定不了映入index和type
 
        
        
        
    


 
    

    

 
    
        
        
        
    


  
    
    
        
        
        
        
            
                tom
                jack
                
            
        

        
            
                1
                2
                
            
        

        
           
               
               
               
           
        

        
            
                utf-8
                8m
            
        
    


public class User {
    private String name;
    private Integer age;
    private Car car;

    public User() {
        System.out.println("无参构造函数");
    }

    public User(String name, Integer age, Car car) {
        this.name = name;
        this.age = age;
        this.car = car;
    }
        public User(String name, Car car) {
        System.out.println("User(String name, Car car)!!");
        this.name = name;
        this.car = car;
    }

    public User(Car car,String name) {
        System.out.println("User(Car car,String name)!!");
        this.name = name;
        this.car = car;
    }

    public User(Integer name, Car car) {
        System.out.println("User(Integer name, Car car)!!");
        this.name = name+"";
        this.car = car;
    }
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public void setName(String name) {
        this.name = name;
    }
public void setCar(Car car) {
        this.car = car;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
}

public class Car {

    public String name;
    public String color;

   
    public Car() {
    }

    public Car(String name, String color) {
        this.name = name;
        this.color = color;
        System.out.println("car ");
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setColor(String color) {
        this.color = color;
    }


    @Override
    public String toString() {
        return "Car{" +
                "name='" + name + '\'' +
                ", color='" + color + '\'' +
                '}';
    }
}

public class CollectionBean {
    private Object[] arr;
    private List list;
    private Map  map;
    private Properties properties;


    public Object[] getArr() {
        return arr;
    }

    public void setArr(Object[] arr) {
        this.arr = arr;
    }

    public List getList() {
        return list;
    }

    public void setList(List list) {
        this.list = list;
    }

    public Map getMap() {
        return map;
    }

    public void setMap(Map map) {
        this.map = map;
    }

    public Properties getProperties() {
        return properties;
    }

    public void setProperties(Properties properties) {
        this.properties = properties;
    }

    @Override
    public String toString() {
        return "CollectionBean{" +
                "arr=" + Arrays.toString(arr) +
                ", list=" + list +
                ", map=" + map +
                ", properties=" + properties +
                '}';
    }
}

    @Test
    public void fun4(){

        //1.创建容器
        ApplicationContext ac=new ClassPathXmlApplicationContext("com/fmt/spring/test/applicationContext.xml");
        //2.向容器要user对象
        User user = (User) ac.getBean("user");
        //打印user
        System.out.println(user);
    }

注解

注解是为了代替配置



    
    


    
    
        
        
    

//

aop

public interface UserInterface {
    void save();
    void delete();
    void update();
    void find();
}

public class UserInterfaceImpl implements UserInterface {
    @Override
    public void save() {
        System.out.println("save");
    }

    @Override
    public void delete() {
        System.out.println("delete");
    }

    @Override
    public void update() {
        System.out.println("update");
    }

    @Override
    public void find() {
        System.out.println("find");
    }
}

public class MyAdvice {

    //前置通知:目标方法运行之前调用
    public void before(){
        System.out.println("前置通知");
    }
    //后置通知,如果方法出现异常不会调用
    public void afterReturn(){
        System.out.println("后置通知");
    }

    //环绕通知,方法之前之后都会调用
    public void around(ProceedingJoinPoint pjp){

        System.out.println("环绕通知之前的部分");
        try {
            pjp.proceed();//调用目标方法
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        System.out.println("这是后置通知(如果出现异常不会调用)!!");
    }
    //异常通知
    public void afterException(){
        System.out.println("异常时调用");
    }
    //后置通知出现异常也会调用
    public void after(){
        System.out.println("这是后置通知(出现异常也会调用)");
    }



}



    
    
    
    
    
    
    
    
        
        
        
        
            
            
            
            
            
            
            
           
            
        
    

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:com/fmt/spring/springaop/applicationContext.xml")
public class DemoTest {

    @Resource(name= "userServiceTarget")
    private UserInterface us;


    @Test
    public void fun1(){
      us.save();
    }
}

注解配置

//通知类
@Aspect
//表示该类是通知类
public class MyAdvice {

    //前置通知:目标方法运行之前调用
    @Before("execution(* com.fmt.spring.service..*InterfaceImpl.*(..))")
    public void before(){
        System.out.println("前置通知");
    }
    //后置通知,如果方法出现异常不会调用
    @AfterReturning("execution(* com.fmt.spring.service..*InterfaceImpl.*(..))")
    public void afterReturn(){
        System.out.println("后置通知");
    }

    //环绕通知,方法之前之后都会调用
    @Around("execution(* com.fmt.spring.service..*InterfaceImpl.*(..))")
    public void around(ProceedingJoinPoint pjp){

        System.out.println("环绕通知之前的部分");
        try {
            pjp.proceed();//调用目标方法
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        System.out.println("这是后置通知(如果出现异常不会调用)!!");
    }
    //异常通知
    @AfterThrowing("execution(* com.fmt.spring.service..*InterfaceImpl.*(..))")
    public void afterException(){
        System.out.println("异常时调用");
    }
    //后置通知出现异常也会调用
    @After("execution(* com.fmt.spring.service..*InterfaceImpl.*(..))")
    public void after(){
        System.out.println("这是后置通知(出现异常也会调用)");
    }



}

在xml中只需要配置

   
    
    
    
    
    
    
    

    

JDBC

    @Test
    public void fun1(){
        //准备连接池

        ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
        try {
            comboPooledDataSource.setDriverClass("com.jdbc.mysql.jdbc.Driver");
        } catch (PropertyVetoException e) {
            e.printStackTrace();
        }
        comboPooledDataSource.setJdbcUrl("jdbc:mysql:///jdbctest");
        comboPooledDataSource.setUser("root");
        comboPooledDataSource.setPassword("123456");

        //创建JDBC末班对象
        JdbcTemplate jt=new JdbcTemplate();

        jt.setDataSource(comboPooledDataSource);
        //书写sql语句
        String sql="insert into t_user values(null,'rose')";
        jt.update(sql);
    }

xml配置

      
   
       
       
       
       
   



    
        
    

    
     
         
     

public class UserDaoImp implements UserDao {

    private JdbcTemplate jt;

    @Override
    public void save(User user) {
        String sql="insert into t_user values(null,?)";
        jt.update(sql,user.name);
    }

    @Override
    public void find(Integer id) {
        String sql="select * from t_user where id=?";
        jt.queryForObject(sql, (resultSet, i) -> {
            User user = new User();
            user.id=resultSet.getInt("id");
            user.name=resultSet.getString("name");
            return user;
        }, id);
    }

    @Override
    public void delete(Integer id) {
        String sql="delete from t_user where id=?";
        jt.update(sql,1);
    }

    @Override
    public void update(User user) {
        String sql="update  t_user set name=? where id=? ";
        jt.update(sql,user.name,user.id);
    }

    @Override
    public int getTotalCount() {
        String sql="select count(*) from t_user";
        Integer integer = jt.queryForObject(sql, Integer.class);
        return integer;
    }

    @Override
    public List getUserAll() {
        String sql="select * from t_user";
        List list = jt.query(sql, new RowMapper() {
            @Override
            public User mapRow(ResultSet resultSet, int i) throws SQLException {
                User user = new User();
                user.id = resultSet.getInt("id");
                user.name = resultSet.getString("name");
                return user;
            }
        });
        return list;
    }

    public void setJt(JdbcTemplate jt) {
        this.jt = jt;
    }

    public JdbcTemplate getJt() {
        return jt;
    }
}

   @Test
    public void fun2(){
        //准备连接池

        User user = new User();
        user.name="xxx";
        userDao.delete(1);


    }

JdbcDaoSupport

public class UserDaoImp extends JdbcDaoSupport implements UserDao {


    @Override
    public void save(User user) {
        String sql="insert into t_user values(null,?)";
        super.getJdbcTemplate().update(sql,user.name);
    }

}
  
       
       
       
       
   
   
     
         
     

读取配置文件

db.properties

jdbc.jdbcUrl=jdbc:mysql:///jdbctest
jdbc.driverClass=com.jdbc.mysql.jdbc.Driver
jdbc.user=root
jdbc.password=123456
    
         
   
       
       
       
       
   

事务

  
        
        
        
        
    

    
    
        
    

    
    
        
    

    
    
            
    
    
    
        
        
    
 private TransactionTemplate transactionTemplate;

    public void setTransactionTemplate(TransactionTemplate transactionTemplate) {
        this.transactionTemplate = transactionTemplate;
    }

    private AccountDao ad;
    @Override
    public void transfer(Integer from, Integer to, Double money) {
    //事务操作
        transactionTemplate.execute(new TransactionCallbackWithoutResult() {
            @Override
            protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) {
                ad.decreaseMoeny(from,money);
                ad.addMoney(to,money);
            }
        });
    }

xml配置事务

 
    
        
            
            
            
            
        
    
    
    
        
        
         
        

注解配置
非常非常容易

xml中加入
 
    

@Transactional(isolation = Isolation.REPEATABLE_READ,propagation = Propagation.REQUIRED)
public class AcountServiceImp implements AcountService{



    public void setAd(AccountDao ad) {
        this.ad = ad;
    }


    private AccountDao ad;
    @Override
    @Transactional(isolation = Isolation.REPEATABLE_READ)
    public void transfer(Integer from, Integer to, Double money) {
        ad.decreaseMoeny(from,money);
        int i=20/0;
        ad.addMoney(to,money);
    }
}

SSH整合

  • spring与struct2整合,是将action对象 交给spring容器负责创建
  • spring与hibernate整合,是将sessionFactory交给spring来负责维护spring,来维护以及aop事务

基本目录结构


Spring使用与ssh整合_第1张图片
这里写图片描述

Spring整合struts2

配置 web.xml






    
    
        org.springframework.web.context.ContextLoaderListener
    
    
    
        contextConfigLocation
        classpath:applicationContext.xml
    


    
    
        struts2
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
    
    
        struts2
        /*
    

struts.xml




    

    
    
        
        
            
         
        
        
            /hehe.jsp
        
    






    
        
    

    
    

    


    
    //此处是spring手动配置,需要在上方struts.xml中配置class="userAction" ,如果class设置为包名+类名,此处可以不配置,但是如果要把UserServiceImp加载进来,bean中的name需要和userAction中的 UserService 名字相同
        
    

    
    

    


public class UserAction extends ActionSupport{

    private UserService us;

    public void setUs(UserService us) {
        this.us = us;
    }

    @Override
    public String execute() throws Exception {
        System.out.println(us);
        return super.execute();
    }
}

配置到这访问http://localhost:8080/UserAction_execute 看是否成功

spring 整合hibernate

hibernate.cfg.xml




    
    
         
        com.mysql.jdbc.Driver
         
        jdbc:mysql:///jdbctest
         
        root
         
        123456
        
        org.hibernate.dialect.MySQLDialect
        
        
        
        true
        
        true
        
        update
         
         
        

    

applicationContext.xml





    
    

    
        
    
     
    
        
            
            
                
                com.mysql.jdbc.Driver
                jdbc:mysql:///jdbctest
                root
                123456
                org.hibernate.dialect.MySQLDialect
                
                true
                true
                update
            
        
        
        
    




public class User {
    /*
     * CREATE TABLE `sys_user` (
      `user_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '用户id',
      `user_code` varchar(32) NOT NULL COMMENT '用户账号',
      `user_name` varchar(64) NOT NULL COMMENT '用户名称',
      `user_password` varchar(32) NOT NULL COMMENT '用户密码',
      `user_state` char(1) NOT NULL COMMENT '1:正常,0:暂停',
      PRIMARY KEY (`user_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
     */
    private Long user_id;
    private String user_code;
    private String user_name;
    private String user_password;
    private Character user_state;
    public Long getUser_id() {
        return user_id;
    }
    public void setUser_id(Long user_id) {
        this.user_id = user_id;
    }
    public String getUser_code() {
        return user_code;
    }
    public void setUser_code(String user_code) {
        this.user_code = user_code;
    }
    public String getUser_name() {
        return user_name;
    }
    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }
    public String getUser_password() {
        return user_password;
    }
    public void setUser_password(String user_password) {
        this.user_password = user_password;
    }
    public Character getUser_state() {
        return user_state;
    }
    public void setUser_state(Character user_state) {
        this.user_state = user_state;
    }
    @Override
    public String toString() {
        return "User [user_id=" + user_id + ", user_code=" + user_code + ", user_name=" + user_name + ", user_password="
                + user_password + "]";
    }
    
    
}

User.hbm.xml




    
        
            
        
        
        
        
        
    
    

测试Hibernate配置是否成功

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class HibernateTest {

    @Resource(name="sessionFactory")
    private SessionFactory sessionFactory;

    @Test
    public void fun1(){
        Configuration conf=new Configuration();
        conf.configure();
        Session session = conf.buildSessionFactory().openSession();

        Transaction transaction = session.beginTransaction();

        User user = new User();
        user.setUser_code("tom");
        user.setUser_name("tom");
        user.setUser_password("1234");
        session.save(user);
        transaction.commit();
        session.close();
    }

    @Test
    public void fun2(){
        Session session = sessionFactory.openSession();

        Transaction transaction = session.beginTransaction();

        User user = new User();
        user.setUser_code("jack");
        user.setUser_name("jack");
        user.setUser_password("1234");
        session.save(user);
        transaction.commit();
        session.close();
    }
    @Test
    public void fun3(){
        Session session = sessionFactory.openSession();

        Transaction transaction = session.beginTransaction();

        User user = new User();
        user.setUser_code("jock");
        user.setUser_name("jock");
        user.setUser_password("1234");
        session.save(user);
        transaction.commit();
        session.close();
    }
}

添加连接池

创建db.properties

jdbc.jdbcUrl=jdbc:mysql:///jdbctest
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.user=root
jdbc.password=1234

修改applicationContext


    
    
    
    
        
        
        
        
    
   
        
        
        
            
            
                

                org.hibernate.dialect.MySQLDialect
                
                true
                true
                update
            
        
        
        
    

使用HibernateDaoSupport

//为HibernateDaoSupport 注入sessionFactory
public class UserServiceImp extends HibernateDaoSupport implements UserService{


    @Override
    public User getUserByCodePassWord(String pwd) {
//        //hql
//      return   getHibernateTemplate().execute(session -> {
//            String hql="from User where user_code=?";
//            Query query = session.createQuery(hql);
//            query.setParameter(0,pwd);
//            User user = (User) query.uniqueResult();
//            return user;
//        });

        DetachedCriteria detachedCriteria = DetachedCriteria.forClass(User.class);
        detachedCriteria.add(Restrictions.eq("user_code",pwd));
        List criteria = (List) getHibernateTemplate().findByCriteria(detachedCriteria);
        if (criteria!=null&&criteria.size()>0){
            return criteria.get(0);
        }
        return null;
    }
}

    
    
        
        
    

事务aop

    
    
        
            
            
            
            
            
            
            
            
        
    
    
      
      
  
        
        
    

    
    

    @Transactional(isolation = Isolation.REPEATABLE_READ,propagation = Propagation.REQUIRED,readOnly = true)
public class UserServiceImp extends HibernateDaoSupport implements UserService{
}

扩大session作用范围
在web.xml




    
    
        org.springframework.web.context.ContextLoaderListener
    
    
    
        contextConfigLocation
        classpath:applicationContext.xml
    

    
    
        openSessionInView
        org.springframework.orm.hibernate5.support.OpenSessionInViewFilter
    


    
    
        struts2
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
    

    
        openSessionInView
        /*
    

    
        struts2
        /*
    

你可能感兴趣的:(Spring使用与ssh整合)