ssm项目整合笔记

项目整合

  1. 需求分析
  2. 建立数据库
  3. 创建Maven项目
  4. 导入依赖
  5. 建立基本结构和框架
  6. 编写前端页面,提供需求
  7. Controller层拿到需求,解决并返回处理结果

导入依赖

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.2</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
<!--        jsp-->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
<!--    spring-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.0.RELEASE</version>
        </dependency>
<!--        Mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.2</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.5</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.6</version>
        </dependency>
    </dependencies>

    <!--    解决资源过滤-->
    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>

建立基本结构

  1. 实例类

  2. mapper接口

  3. 实现mapper的xml配置文件,编写QL语句

  4. Servlce业务逻辑层

  5. 编写mapper层的配置文件(创建数据源,创建工厂,将mapper注册到spring容器中,编写扫描包-注释支持)

        <!--    关联数据库配置文件-->
        <context:property-placeholder location="classpath:database.properties"/>
        <!--    连接池
            dbcp: 半自动化操作,不能自动连接
            c3p0:  自动化操作(字动化加载配置文件,并且可以自动设置到对象中!)
            druid:
            hikari:
        -->
        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass" value="${jdbc.driver}"/>
            <property name="jdbcUrl" value="${jdbc.url}"/>
            <property name="user" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>
    
            <!-- c3p0连接池的私有属性 -->
            <property name="maxPoolSize" value="30"/>
            <property name="minPoolSize" value="10"/>
            <!-- 关闭连接后不自动commit -->
            <property name="autoCommitOnClose" value="false"/>
            <!-- 获取连接超时时间 -->
            <property name="checkoutTimeout" value="10000"/>
            <!-- 当获取连接失败重试次数 -->
            <property name="acquireRetryAttempts" value="2"/>
        </bean>
        <!--    SqlSessionFactory-->
        <bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory">
            <property name="dataSource" ref="dataSource"/>
            <property name="configLocation" value="classpath:mybatis-config.xml"/>
        </bean>
    
    
    <!--    配置mapper接口扫描包,动态实现/Mapper接口可以注入到Spring容器中-->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <!--        注入sqlSessionFactory-->
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    <!--        扫描要扫描的包-->
            <property name="basePackage" value="com.bdqn.mapper"/>
        </bean>
    
  6. 编写Servlce层得配置文件(设置扫描包,把mapper注入到Serlvce私有对象中,目的:让业务逻辑层有可以调用mapper层的方法权利!还有事务)

    <!--    扫描包-->
        <context:component-scan base-package="com.bdqn.servlce"/>
    
    <!--    将我们的所有业务类注入到spring 可通过配置和注解-->
        <bean class="com.bdqn.servlce.BookServlceimpl" id="bookServlceimpl">
            <property name="bookMapper" ref="bookMapper"/>
        </bean>
    
    <!--    声明式事务-->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"/>
        </bean>
        <tx:advice id="txAdvice" transaction-manager="transactionManager">
            <!--        给哪些方法配置事务-->
            <!--        配置事务的传播特性-->
            <tx:attributes>
                <tx:method name="*" propagation="REQUIRED"/>
            </tx:attributes>
        </tx:advice>
    <!--    AOP横切事务-->
        <aop:config>
            <aop:pointcut id="txPointcut" expression="execution(* com.bdqn.mapper.*.*(..))"/>
            <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
        </aop:config>
    
  7. 编写Spring-mvc层配置文件(编写扫描包,设置视图解析器)

    <mvc:annotation-driven/>
    <mvc:default-servlet-handler/>
    <context:component-scan base-package="com.bdqn.controller"/>
    
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    
  8. appliactionContext.xml(让三个层的配置文件链接到一起)

    <import resource="classpath:spring-dao.xml"/>
    <import resource="classpath:spring-servlce.xml"/>
    <import resource="classpath:spring-mvc.xml"/>
    
  9. 在WEB-INF包下创建页面提供需求(增删改查)

        <title>书籍展示</title>
        <!-- 引入 Bootstrap -->
        <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
    </head>
    <body>
        <div class="container">
            <div class="row clearfix">
                <div class="clo.md-12 column">
                    <div class="page-header">
                        <h1><small>书籍列表------显示所有书籍</small></h1>
                    </div>
                </div>
                <div class="row">
                    <div class="col-md-4 column">
                        <a class="btn btn-primary" href="${pageContext.request.contextPath}/book/toAddBook">新增书籍</a>
                    </div>
                    <div class="col-md-8 column" style="float: right;">
                        <form method="post" action="${pageContext.request.contextPath}/book/selBook" class="form-inline" style="float: right">
                            <span>${error}</span>
                            <input type="text" name="queryBookName" class="form-control" placeholder="请输入要查询的书籍">
                            <input type="submit" value="查询" class="btn btn-primary">
                        </form>
                    </div>
                </div>
            </div>
    
            <div class="row clearfix">
                <div class="col-md-12 column">
                    <table class="table table-hover table-striped">
                        <thead>
                            <tr>
                                <th>书籍编号</th>
                                <th>书籍名称</th>
                                <th>书籍数量</th>
                                <th>书籍详情</th>
                                <th>&nbsp;&nbsp;</th>
                            </tr>
                        </thead>
    <%--                    书籍从数据库中查询出来--%>
                        <tbody>
                            <c:forEach var="book" items="${books}">
                                <tr>
                                    <td>${book.bookID}</td>
                                    <td>${book.bookName}</td>
                                    <td>${book.bookCounts}</td>
                                    <td>${book.detail}</td>
                                    <td>
                                        <a href="${pageContext.request.contextPath}/book/toUpdBook/${book.bookID}">修改</a>
                                        &nbsp;  |  &nbsp;
                                        <a href="${pageContext.request.contextPath}/book/delBook/${book.bookID}" onClick="return confirm('确定提交?');">删除</a>
                                    </td>
                                </tr>
                            </c:forEach>
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    </body>
    </html>
    
  10. 创建controller层(处理前端的需求,处理后把结果传到Model,创建业务层对象,通过调用业务层,业务层再从mapper层找到相应的SQL语句)

    @Autowired
    @Qualifier("bookServlceimpl")
    private BookServlce bookServlce;
    // 查询全部并返回一个数据显示页面
    @RequestMapping("/allBook")
    public String list(Model model){
        List<Books> books = bookServlce.queryAllBook();
        model.addAttribute("books",books);
        return "allBook";
    }
    

项目结构图
在这里插入图片描述

Bootstrap中文官网:https://v3.bootcss.com/css/#overview

Bootstrap可视化系统:http://www.ibootstrap.cn/

分页查询

  1. 导入依赖

    <!--分页插件-->
    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper</artifactId>
        <version>5.2.0</version>
    </dependency>
    
  2. 配置分页拦截器件

    <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            <property name="helperDialect" value="mysql"/>
        </plugin>
    </plugins>
    
  3. 在Controller中查询全部中使用分页(在)

    @RequestMapping("/allBook/{num}/{size}")
    public String list(@PathVariable int num,@PathVariable int size,Model model){
        PageHelper.startPage(num,size);						*
        List<Books> books = bookServlce.queryAllBook();
        PageInfo<Books> info = new PageInfo<Books>(books);	*
        model.addAttribute("books",info);
        return "allBook";
    }
    
  4. 修改增删改中return的地址,因为路径发生了改变

    return "redirect:/book/allBook/1/4";

  5. 查询一本书功能也需要把查询出来的结果用分页形式展出

    //    查询一本书
    @RequestMapping("/selBook")
    public String delBook(Model model,String queryBookName){
        //        执行单个查询
        Books book = bookServlce.selNameBook(queryBookName);
        //        设置起始页和行数
        PageHelper.startPage(1,4);
        //        创建集合,把查询出来的结果放到集合中
        List<Books> booksList = new ArrayList<Books>();
        booksList.add(book);
        //        判断是否为空,为空代表没有查出结果,则执行查询全部操作
        if (book == null){
            //            给前端提示信息,没有查询到结果
            model.addAttribute("error","未查到");
            //            查询全部,返回到集合中
            booksList = bookServlce.queryAllBook();
        }
        //        把要用分页展示的集合放入PageInfo中,就会按照之前设置好的页数分割1/4
        PageInfo<Books> info = new PageInfo<Books>(booksList);
        //        将PageInfo对象放到Model中
        model.addAttribute("books",info);
        //        返回allBook页面
        return "allBook";
    
  6. 在前端设置上下页

    <!--books.list 分页集合中调用list类型的集合,-->
    
    当前页面:${books.pageNum}
    <a href="${pageContext.request.contextPath}/book/allBook/${books.pageNum-1}/4">上一页</a>
    <a href="${pageContext.request.contextPath}/book/allBook/${books.pageNum+1}/4">下一页</a>
    共${books.pages}页
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值