zoukankan      html  css  js  c++  java
  • SSM框架搭建过程

    1. 引入依赖的jar包(pom.xml)
    a. <!--Spring SpringMVC相关-->  spring-webmvc
    b. <!--Spring事务-->  spring-jdbc
    c. <!--面向切面编程-->  spring-aspects
    d. <!--mybatis-->  mybatis
    e. <!--mybatis 整合 spring-->  mybatis-spring
    f. <!--数据库连接池、驱动-->  c3p0  mysql-connector-java
    g. <!--jstl,servlet-api-->  jstl  javax.servlet-api
    h. <!— MBG-->  mybatis-generator-core
    i. <!— junit-->  junit
    1. webapp/WEB-INF/web.xml 中
    2. src/main/resources目录下新建applicationContext.xml
    3. web.xml同级目录下新建dispatcherServlet-servlet.xml并配置
      1. 扫描控制器
      2. 配置视图解析器
      3. <!--两个标准配置  -->
    a. 服务器一启动就启动Spring 容器
    b. springMVC前端控制器
    c. 字符编码过滤器,一定要放在所有过滤器之前
    d. 使用Rest风格的URI,将页面普通的post请求转为指定的
    delete或者put请求

            <!-- 将springmvc不能处理的请求交给tomcat -->

           <!-- 能支持springmvc更高级的一些功能-->

    1. 配置Spring在applicationContext.xml中

    a. 扫描除控制器以外的其他组件

    b. 配置数据源(同时将dbconfig.properties文件导入到resources目录下)

    c. 配置和MyBatis的整合,同时在src/main/resources下创建mybaitis的配置文件mybatis-config.xml以及mapper文件夹

    d. 配置扫描器,将mybatis接口的实现加入到ioc容器中

    e. 配置一个可以执行批量的sqlSession

    f. 配置事务控制

    g. xml配置事务<!-- 切入点表达式 *表示返回值类型 ,表示com.cn.crud.service包下的,..表示即使有子包仍然可以,表达式表达的是该包下的所有方法都能切入事务-->

    h. 配置事务增强,事务如何切入

    1. 配置MyBatis在mybatis-config.xml中
    2. 在当前工程下创建mbg.xml进行配置,使用mybatis 逆向工程生成对应的bean 、dao和 mapper
    3. mbg.xml文件
    4. <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE generatorConfiguration
      PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
      "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
      <generatorConfiguration>

      <context id="DB2Tables" targetRuntime="MyBatis3">
      <commentGenerator>
      <property name="suppressAllComments" value="true" />
      </commentGenerator>
      <!-- 配置数据库连接 -->
      <jdbcConnection driverClass="com.mysql.jdbc.Driver"
      connectionURL="jdbc:mysql://localhost:3306/ssm_crud" userId="root"
      password="123456">
      </jdbcConnection>

      <javaTypeResolver>
      <property name="forceBigDecimals" value="false" />
      </javaTypeResolver>

      <!-- 指定javaBean生成的位置 -->
      <javaModelGenerator targetPackage="com.atguigu.crud.bean"
      targetProject=".srcmainjava">
      <property name="enableSubPackages" value="true" />
      <property name="trimStrings" value="true" />
      </javaModelGenerator>

      <!--指定sql映射文件生成的位置 -->
      <sqlMapGenerator targetPackage="mapper" targetProject=".srcmain esources">
      <property name="enableSubPackages" value="true" />
      </sqlMapGenerator>

      <!-- 指定dao接口生成的位置,mapper接口 -->
      <javaClientGenerator type="XMLMAPPER"
      targetPackage="com.atguigu.crud.dao" targetProject=".srcmainjava">
      <property name="enableSubPackages" value="true" />
      </javaClientGenerator>


      <!-- table指定每个表的生成策略 -->
      <table tableName="tbl_emp" domainObjectName="Employee"></table>
      <table tableName="tbl_dept" domainObjectName="Department"></table>
      </context>
      </generatorConfiguration>

    5. Mybatis逆向工程测试

    public class MBGTest {

         public static void main(String[] args) throws Exception {

              List<String> warnings = new ArrayList<String>();

              boolean overwrite = true;

              File configFile = new File("mbg.xml");

              ConfigurationParser cp = new ConfigurationParser(warnings);

              Configuration config = cp.parseConfiguration(configFile);

              DefaultShellCallback callback = new DefaultShellCallback(overwrite);

              MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,

                         callback, warnings);

              myBatisGenerator.generate(null);

         }

    }

    1. 修改mapper文件

    其中,<resultMap id="BaseResultMap_Dept" type="com.cn.crud.bean.Employee">
      <result column="emp_id" jdbcType="INTEGER" property="empId" />
      <result column="emp_name" jdbcType="VARCHAR" property="empName" />
      <result column="emp_gender" jdbcType="CHAR" property="empGender" />
      <result column="emp_email" jdbcType="VARCHAR" property="empEmail" />
      <result column="d_id" jdbcType="INTEGER" property="dId" />
      <association

    property="department" javaType="com.cn.crud.bean.Department">
        <id column="dept_id" property="deptId"/>
        <result column="dept_name" property="deptName"/>
    </association>

    </resultMap>

    <association> 关联查询,了解

     10.  * 测试dao层的工作

     *推荐Spring的项目就可以使用Spring的单元测试,可以自动注入我们需要的组件

     *1、导入SpringTest模块

          在pom.xml中引入spring-test依赖

    <!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->

    <dependency>

        <groupId>org.springframework</groupId>

        <artifactId>spring-test</artifactId>

        <version>5.1.3.RELEASE</version>

        <scope>test</scope>

    </dependency>

     *2、@ContextConfiguration指定Spring配置文件的位置

     *3、直接autowired要使用的组件即可

     */

    @RunWith(SpringJUnit4ClassRunner.class)

    @ContextConfiguration(locations={"classpath:applicationContext.xml"})

    public class MapperTest {

        

         @Autowired

         DepartmentMapper departmentMapper;

     

         @Autowired

         EmployeeMapper employeeMapper;

        

         @Autowired

         SqlSession sqlSession;

        

         /**

          * 测试DepartmentMapper

          */

         @Test

         public void testCRUD(){

         /*   //1、创建SpringIOC容器

              ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");

              //2、从容器中获取mapper

              DepartmentMapper bean = ioc.getBean(DepartmentMapper.class);*/

              System.out.println(departmentMapper);

             

              //1、插入几个部门

    //        departmentMapper.insertSelective(new Department(null, "开发部"));

    //        departmentMapper.insertSelective(new Department(null, "测试部"));

             

              //2、生成员工数据,测试员工插入

              employeeMapper.insertSelective(new Employee(null, "Jerry", "M", "Jerry@atguigu.com", 1));

             

              //3、批量插入多个员工;批量,使用可以执行批量操作的sqlSession。

             

    //        for(){

    //              employeeMapper.insertSelective(new Employee(null, , "M", "Jerry@atguigu.com", 1));

    //        }

              EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);

              for(int i = 0;i<1000;i++){

                    String uid = UUID.randomUUID().toString().substring(0,5)+i;

                    mapper.insertSelective(new Employee(null,uid, "M", uid+"@atguigu.com", 1));

              }

              System.out.println("批量完成");

             

         }

     

    }

    11.  分页使用插件pagehelper

    需要在pom.xml中引入依赖

    <!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
    <dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper</artifactId>
      <version>5.1.8</version>
    </dependency>

    其他配置查看:

    https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md

    1. 12.  Spring分页测试代码

    @RunWith(SpringJUnit4ClassRunner.class)

    @WebAppConfiguration

    @ContextConfiguration(locations = { "classpath:applicationContext.xml",

              "file:src/main/webapp/WEB-INF/dispatcherServlet-servlet.xml" })

    public class MvcTest {

         // 传入Springmvc的ioc

         @Autowired

         WebApplicationContext context;

         // 虚拟mvc请求,获取到处理结果。

         MockMvc mockMvc;

     

         @Before

         public void initMokcMvc() {

              mockMvc = MockMvcBuilders.webAppContextSetup(context).build();

         }

     

         @Test

         public void testPage() throws Exception {

              //模拟请求拿到返回值

              MvcResult result = mockMvc.perform(MockMvcRequestBuilders.get("/emps").param("pn", "5"))

                         .andReturn();

             

              //请求成功以后,请求域中会有pageInfo;我们可以取出pageInfo进行验证

              MockHttpServletRequest request = result.getRequest();

              PageInfo pi = (PageInfo) request.getAttribute("pageInfo");

              System.out.println("当前页码:"+pi.getPageNum());

              System.out.println("总页码:"+pi.getPages());

              System.out.println("总记录数:"+pi.getTotal());

              System.out.println("在页面需要连续显示的页码");

              int[] nums = pi.getNavigatepageNums();

              for (int i : nums) {

                    System.out.print(" "+i);

              }

             

              //获取员工数据

              List<Employee> list = pi.getList();

              for (Employee employee : list) {

                    System.out.println("ID:"+employee.getEmpId()+"==>Name:"+employee.getEmpName());

              }

             

         }

     

    }

    13. @ResponseBody
     @ResponseBody 可以把返回的对象转换为json串,要想其正常工作需要导入jackson包:jackson-databind
    <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.8</version>
    </dependency>
     

    14.  rest风格的URI

     

     

  • 相关阅读:
    spring MVC fromeWork 與webwork2 mvc 比較
    JAVA Oauth 认证服务器的搭建
    HTTPS的工作原理
    理解HTTP幂等性
    支付交易一般性准则
    设计模式六大原则
    腾讯微信技术总监周颢:一亿用户增长背后的架构秘密
    Valid Parentheses
    4Sum
    Letter Combinations of a Phone Number
  • 原文地址:https://www.cnblogs.com/cn-chy-com/p/11131155.html
Copyright © 2011-2022 走看看