SSM集成(导入jar的方式,不是Maven)

1.SSM介绍

Spring+SpringMVC+MyBatis

2.集成步骤

第二步和第三步哪个先集成顺序都无所谓

  1. Spring
  2. Spring+SpringMVC
  3. Spring+Mybtis
  4. Spring+SpringMVC+Mybatis:管理事务

3.jar的准备

模块名 jar包
Spring com.springsource.org.apache.commons.logging-1.1.1.jar
spring-aop-4.1.2.RELEASE.jar
spring-beans-4.1.2.RELEASE.jar
spring-context-4.1.2.RELEASE.jar
spring-core-4.1.2.RELEASE.jar
spring-expression-4.1.2.RELEASE.jar
spring-test-4.1.2.RELEASE.jar
SpringMVC ① commons-fileupload-1.3.1.jar
② commons-io-2.2.jar
③ jackson-annotations-2.5.0.jar
④ jackson-core-2.5.0.jar
⑤ jackson-databind-2.5.0.jar
⑥ spring-web-4.1.2.RELEASE.jar
⑦ spring-webmvc-4.1.2.RELEASE.jar
①②文件上传③④⑤json转换⑥⑦springmvc
MyBatis asm-3.3.1.jar
cglib-2.2.2.jar
commons-logging-1.1.1.jar
javassist-3.17.1-GA.jar
log4j-1.2.17.jar
mybatis-3.2.1.jar
slf4j-api-1.7.2.jar
slf4j-log4j12-1.7.2.jar
Spring+MyBatis+事务 ① com.springsource.org.aopalliance-1.0.0.jar
② com.springsource.org.apache.commons.dbcp-1.2.2.osgi.jar
③ com.springsource.org.apache.commons.pool-1.5.3.jar
④ com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
⑤ spring-jdbc-4.1.2.RELEASE.jar
⑥ spring-tx-4.1.2.RELEASE.jar
①④⑥Aop事务②③⑤spring集成mybatis
other ①mybatis-spring-1.2.0.jar
mysql-connector-java-5.1.26-bin.jar
①mybatis集成spring

4.单独集成Spring

  1. 创建javaweb项目
  2. 导入spring的jar
  3. 准备配置文件applicationContext.xml并且配置对象
  4. 测试
  • 能从spring中或bean

4.1 创建javaweb项目:

  1. 打开idea,点击New Project,点击Java Enterprise,选择jdk1.8,java EE8,tomcat 8.0,点击Next

  2. 勾选Create project from template,点击Next


    2.png
  3. 给项目起个名子,我这里叫 SSM


    3.png
  4. 项目创建成功,配置jsp有改动会主动应用.点击Edit Configurations-->Tomcat Server-->On 'Update' action选择Update classes and resources并且On frame deactivation选择Update classes and resources-->Apply-->OK


    4.png
  5. 测试。在web下的index.jsp里面随便输入点东西,然后启动项目,看到index.jsp里面有输入的东西就算做成功了!

4.2 导入jar包+配置+测试

  1. 导入jar。在WEB-INF下新建lib,把spring的jar拷贝进去,右击lib文件夹-->点击Add as Library
  2. 集成Spring。右击项目-->New-->Directory-->名字叫 resources-->OK。右击resources-->点击Mark Directory as-->Resources Root。
  3. 创建applicationContext.xml。右击resources-->点击New-->点击File-->命名 applicationContext.xml
  4. 拷贝配置到applicationContext.xml。xml的头从官方文档拷贝的。配置个bean


    
    

  1. 创建测试文件夹。右击项目-->New-->Directory-->名字叫 test-->OK。test-->点击Mark Directory as-->Test Resources Root。
  2. 创建测试基类。右击test-->New-->Java Class-->输入 cn.wangningbo.ssm.BaseTest。代码如下
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class BaseTest {
}
  1. 创建SpringTest。SpringTest继承BaseTest
public class SpringTest extends BaseTest {
    @Autowired
    private Date myDate;

    @Test
    public void test() throws Exception {
        System.out.println(myDate);
    }
}
  1. 运行测试方法。打印出时间无误,成功!Spring集成完毕!

5.Spring+SpringMVC

  1. 导入jar
  2. 配置web.xml
    • 字符编码过滤器
  3. applicationContext-mvc.xml
    • 默认控制器
    • 视图解析器
    • 文件上传

5.1导入jar包

  1. 把springmvc的jar拷贝到lib中。在lib中选中刚才拷贝的jar包,右击选择Add as Library

5.2配置web.xml

方案1:独立容器方案,spring和springmvc都有自己的context


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

    
    
        springmvc
        org.springframework.web.servlet.DispatcherServlet
        
            contextConfigLocation
            classpath:applicationContext-mvc.xml
        
        
        1
    
    
        springmvc
        
        /
    

注意:web.xml中的spring容器与springmvc的容器配置形成了‘子从上下文’,所谓子从上下文就是儿子可以拿父亲的,但是父亲不能拿儿子的!RootContext中是Service和Mapper/Repository,而WebAPPContext中是Controller,所以有个特点:Controller可以注入Service,而Service不能注入Controller

5.3配置applicationContext-mvc.xml

  • 在src下创建对应的controller包。
  • 在WEB-INF下创建views文件夹



    
    
    
    
    
    
    
    
        
        
    

  • 在Controller包下创建一个DeptController类,用于测试
@Controller
@RequestMapping("/dept")
public class DeptController {

    @RequestMapping("/index")
    public String index() {
        return "dept/index";
    }

    @RequestMapping("/json")
    @ResponseBody
    public String json() {
        return "wangningbo";
    }
}
  • 在views下创建dept文件夹,在dept下创建index.jsp。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


    dept index


  • 测试!启动项目,浏览器地址栏输入 http://localhost/dept/index 和 http://localhost/dept/json 分别访问,拿到数据就代表成功!
  • 在web.xml配置过滤器,处理post请求乱码问题

    
        EncodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            utf-8
        
    
    
        EncodingFilter
        /*
    

6.Spring+MyBatis

jdbc.properties-->Datasource -->SqlSessionFactory-->扫描Repository-->事务管理器-开启注解事务

6.1 导入jar包

  1. 把MyBatis的jar包拷贝到lib
  2. 再把另外两个jar拷贝进去
  3. 继续把MyBatis集成Spring所需要的jar拷贝进去
  4. 在lib中选中刚才拷贝的jar包,右击选择Add as Library。

6.2 jdbc.properties

在resources创建jdbc.properties

jdbc.driverClassName = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql:///mybatis_base
jdbc.username = root
jdbc.password = apy06942

6.3 配置applicationContext.xml

创建包domain、mapper、query、service




    

    
    
    
    

    
    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    

    
    
    
        
        
        
        
        
        
    

    
    

    
    
        
        
        
    

  1. 在mapper包下创建DeptMapper接口
  2. 在resources下创建一个文件夹,名字为 cn/wangningbo/ssm/mapper,在mapper下创建创建一个DeptMapper.xml。(Dept和DeptMapper虽然不在同一个包下,但是DeptMapper.xml在资源文件夹下,而且它与Dept的前面路径一样,都是cn.wangningbo.ssm.mapper,所以最后会编译到一起)




    
    
    
    
        INSERT into t_dept(name) values(#{name})
    

  1. 在domain里创建Dept类
public class Dept {
    private Long id;
    private String name;
    提供构造方法,提供get和set方法,提供toString
}
  1. 在mapper包里写接口
public interface DeptMapper {
    List loadAll();

    void save(Dept dept);
}
  1. 在DeptMapper里写实现接口



    
    
    
    
        INSERT into t_dept(name) values(#{name})
    

  1. 写Service接口
public interface IDeptService {
    List getAll();

    void add(Dept dept);
}
  1. 在Service包下创建一个实现包 impl,在impl下创建一个接口的实现类
@Service
public class DeptServiceImpl implements IDeptService {
    @Autowired
    private DeptMapper deptMapper;

    @Override
    public List getAll() {
        return deptMapper.loadAll();
    }

    @Override
    public void add(Dept dept) {
        deptMapper.save(dept);
    }
}
  1. 测试!在IDeptService接口里右击鼠标Go To创建测试,测试类继承于BaseTest。测试那两个接口方法,测试loadALl方法无误,成功!
public class IDeptServiceTest extends BaseTest {
    @Autowired
    private IDeptService deptService;

    @Test
    public void getAll() {
        List depts = deptService.getAll();
        depts.forEach(dept -> System.out.println(dept));
    }

    @Test
    public void add() {
    }
}

6.4配置事务

  1. 注解式事务:
    • 1)配置事务管理:用jdbc事务管理器
    • 2)开启注解事务
    • 3)在service脑袋上面加@Transational
  2. 在applicationContext.xml尾部配置事务
    
    
        
    
    
    
  • 最终applicationContext.xml如下所示



    

    
    
    
    

    
    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    

    
    
    
        
        
        
        
        
        
    

    
    

    
    
        
        
        
    

    
    
    
        
    
    
    

  1. 在Service层的实现类那里开启事务
@Service
@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
public class DeptServiceImpl implements IDeptService {
    @Autowired
    private DeptMapper deptMapper;

    @Override
    public List getAll() {
        return deptMapper.loadAll();
    }

    @Transactional
    @Override
    public void add(Dept dept) {
        deptMapper.save(dept);
        //int i = 1 / 0; //用于测试事务
    }
}
  1. 测试事务
public class IDeptServiceTest extends BaseTest {
    @Autowired
    private IDeptService deptService;

    @Test
    public void getAll() {
        List depts = deptService.getAll();
        depts.forEach(dept -> System.out.println(dept));
    }

    @Test
    public void add() {
    //测试事务
        deptService.add(new Dept("nb"));
    }
}
  1. 在1/0存在时,事务进行报错回滚,在1/0不存在时,发现已经添加到数据库,成功了!

6.5集成到Controller的DeptController

@Controller
@RequestMapping("/dept")
public class DeptController {
    @Autowired
    private IDeptService deptService;

    @RequestMapping("/index")
    public String index() {
        return "dept/index";
    }

    @RequestMapping("/json")
    @ResponseBody
    public List json() {
        return deptService.getAll();
    }
}

6.6启动项目进行测试

启动项目,打开浏览器,地址栏输入 http://localhost/dept/json 访问,看到从数据库拿到的真实数据。成功!

你可能感兴趣的:(SSM集成(导入jar的方式,不是Maven))