08 SSM整合案例(企業權限管理系統):06.產品操做

04.AdminLTE的基本介紹css

05.SSM整合案例的基本介紹html

06.產品操做前端

07.訂單操做java

08.用戶操做mysql

09.權限控制git

10.權限關聯與控制github

11.AOP日誌web

 

06.產品操做


SSM 環境搭建與產品操做

 

1.數據庫與表結構介紹

PLSQL Developer 13  是一個集成開發環境,專門面向Oracle數據庫存儲程序單元的開發PL/SQL Developer側重於易用性、代碼品質和生產力 。ajax

鏈接數據庫的配置spring

解決中文??亂碼

在maven bin目錄下運行如下命令:

mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.1.0 -Dpackaging=jar -Dfile=D:\mnt\ojdbc14-10.2.0.1.0.jar

以上地址信息部分,請根據本地jar包的信息自行修改。

 建立用戶與受權
 數據庫咱們使用Oracle

 

 

 

-- 用戶名
ssm08

-- 登陸密碼
itheima
-- Create the user 
create user SSM08 identified by itheima;
-- Grant/Revoke role privileges 
grant connect to SSM08;
grant resource to SSM08;

 

產品表信息描述

 

CREATE TABLE product(
id varchar2(32) default SYS_GUID() PRIMARY KEY,
productNum VARCHAR2(50) NOT NULL,
productName VARCHAR2(50),
cityName VARCHAR2(50),
DepartureTime timestamp,
productPrice Number,
productDesc VARCHAR2(500),
productStatus INT,
CONSTRAINT product UNIQUE (id, productNum)
)

insert into PRODUCT (id, productnum, productname, cityname, departuretime, productprice,productdesc, productstatus)
values ('676C5BD1D35E429A8C2E114939C5685A', 'itcast-002', '北京三日遊', '北京', to_timestamp('10-10-2018 10:10:00.000000', 'dd-mm-yyyy hh24:mi:ss.ff'), 1200, '不錯的旅行', 1);
insert into PRODUCT (id, productnum, productname, cityname, departuretime, productprice,productdesc, productstatus)
values ('12B7ABF2A4C544568B0A7C69F36BF8B7', 'itcast-003', '上海五日遊', '上海', to_timestamp('25-04-2018 14:30:00.000000', 'dd-mm-yyyy hh24:mi:ss.ff'), 1800, '魔都我來了', 0);
insert into PRODUCT (id, productnum, productname, cityname, departuretime, productprice,productdesc, productstatus)
values ('9F71F01CB448476DAFB309AA6DF9497F', 'itcast-001', '北京三日遊', '北京', to_timestamp('10-10-2018 10:10:00.000000', 'dd-mm-yyyy hh24:mi:ss.ff'), 1200, '不錯的旅行', 1);

 

 2.SSM環境搭建maven工程

使用Maven管理項目,建立parent工程和子模塊。

解決maven項目建立archetype過慢的問題:

archetypeCatalog
internal

  heima_ssm_parent父工程

  pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!--
        子模塊天生集成父工程,可使用父工程全部資源。
        子模塊之間天生是沒有任何關係的。

        父子工程直接不用創建關係,繼承關係是先天的,不須要手動創建。

        平級直接的引用叫依賴,依賴不是先天的,依賴是須要後天創建的。
        -->
    <groupId>cn.bjut</groupId>
    <artifactId>heima_ssm</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>

    <!-- 統一管理jar包版本 -->
    <properties>
        <spring.version>5.0.15.RELEASE</spring.version>
        <slf4j.version>1.7.12</slf4j.version>
        <log4j.version>1.2.17</log4j.version>
        <shiro.version>1.2.3</shiro.version>
        <mybatis.version>3.5.2</mybatis.version>
        <mysql.version>8.0.17</mysql.version>
        <oracle.version>10.2.0.1.0</oracle.version>
        <spring.security.version>5.0.10.RELEASE</spring.security.version>
    </properties>

    <!-- 鎖定jar包版本 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>${mybatis.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <!-- 項目依賴jar包 -->
    <dependencies>
        <!-- spring -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>

        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <!-- log start -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <!-- log end -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.2</version>
        </dependency>
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1.2</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.10</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>${spring.security.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
            <version>${spring.security.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-core</artifactId>
            <version>${spring.security.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-taglibs</artifactId>
            <version>${spring.security.version}</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.9</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
        <!--oracle數據庫驅動-->
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc14</artifactId>
            <version>${oracle.version}</version>
        </dependency>

        <dependency>
            <groupId>javax.annotation</groupId>
            <artifactId>jsr250-api</artifactId>
            <version>1.0</version>
        </dependency>
    </dependencies>
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.6.1</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                        <encoding>UTF-8</encoding>
                        <showWarnings>true</showWarnings>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <!-- 添加tomcat7插件 -->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
            </plugin>
        </plugins>
    </build>
    <modules>
        <module>heima_ssm_dao</module>
        <module>heima_ssm_domain</module>
        <module>heima_ssm_utils</module>
        <module>heima_ssm_service</module>
        <module>heima_ssm_web</module>
    </modules>


</project>

 

 1.3在domain編寫實體類

package cn.bjut.ssm.domain;

import java.util.Date;

/**
 * 商品信息
 */
public class Product {
    private String id; // 主鍵
    private String productNum; // 編號 惟一
    private String productName; // 名稱
    private String cityName; // 出發城市
    private Date departureTime; // 出發時間
    private String departureTimeStr; //方便網頁展現,數據庫裏沒有對應字段
    private double productPrice; // 產品價格
    private String productDesc; // 產品描述
    private Integer productStatus; // 狀態 0 關閉 1 開啓
    private String productStatusStr; //方便網頁展現,數據庫裏沒有對應字段

實體類的pom.xml添加對後面步驟編寫的工具類的依賴座標

    <dependencies>
        <dependency>
            <groupId>cn.bjut</groupId>
            <artifactId>heima_ssm_utils</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

 

選擇子模塊heima_ssm_dao ,在它的pom.xml裏引入兄弟模塊的依賴座標。

    <dependencies>
        <dependency>
            <groupId>cn.bjut</groupId>
            <artifactId>heima_ssm_domain</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

  新建兩個package在java&resources目錄下

cn.bjut.ssm.dao

  新建一個接口,IProductDao

package cn.bjut.ssm.dao;

import cn.bjut.ssm.domain.Product;

import java.util.List;

public interface IProductDao {

    //查詢全部的產品信息
    public List<Product> findAll() throws Exception;
}

 

 選擇子模塊heima_ssm_service ,在它的pom.xml裏引入兄弟模塊(dao層)的依賴座標。

    <dependencies>
        <dependency>
            <groupId>cn.bjut</groupId>
            <artifactId>heima_ssm_dao</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

 在java目錄下新建一個package ,在裏面新建一個實現類的包impl

 cn.bjut.ssm.service

 編寫接口 IProductService

package cn.bjut.ssm.service;

import cn.bjut.ssm.domain.Product;

import java.util.List;

public interface IProductService {

    //查詢全部的產品信息
    public List<Product> findAll() throws Exception;
}

編寫接口的實現類  ProductServiceImpl

@Service
@Transactional  //註解的方式配置spring事務管理
public class ProductServiceImpl implements IProductService {

    @Autowired
    private IProductDao productDao;

    @Override
    public List<Product> findAll()throws Exception{


        return productDao.findAll();
    }


}

 1.SSM環境搭建與產品操做.pdf 裏面是用mybatis的註解方式查詢操做數據庫,如今我選擇用.xml配置文件的方式使用mybatis

   MyBatis從入門到精通(第3章): MyBatis註解方式的基本使用

   MyBatis從入門到精通(第2章):MyBatis XML方式的基本用法

 

  在 heima_ssm_dao 子模塊的resources目錄下,新建一個cn.bjut.ssm.dao包(package),而後在其中新建一個文件:

  IProductDao.xml   【若是是mybatis整合spring框架,這裏的.xml配置文件的文件名必須和與之對應接口的文件名徹底一致!】

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >

 

 namespace屬性的值爲:接口的全限定類名。resultType是實體類的全限定類名。【測試後發現整合spring框架而且分父子工程依賴模塊,resultType就必須寫全限定類名】數據庫的字段名放前面,實體類的成員變量名放後面。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="cn.bjut.ssm.dao.IProductDao">
    <select id="findAll()" resultType="cn.bjut.ssm.domain.Product">
        select id,
            productNum productNum,
            productName productName,
            cityName cityName,
            DepartureTime DepartureTime,
            productPrice productPrice,
            productDesc productDesc,
            productStatus productStatus
        from product
    </select>
</mapper>

 


 

下面將引入框架用到的各類配置文件

db.properties

\day02\資料

heima_ssm_dao子模塊的resources目錄

jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@192.168.0.104:1521:orcl
jdbc.username=ssm08
jdbc.password=itheima

ip地址能夠經過ipconfig命令在cmd中得到,1521是oracle數據庫的默認端口號。

 

 log4j.properties

heima_ssm_web子模塊的resources目錄

# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE            debug   info   warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE

# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE

# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

# LOGFILE is set to be a File appender using a PatternLayout.
# log4j.appender.LOGFILE=org.apache.log4j.FileAppender
# log4j.appender.LOGFILE.File=d:\axis.log
# log4j.appender.LOGFILE.Append=true
# log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
# log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

 

 

applicationContext-dao.xml

heima_ssm_dao子模塊的resources目錄下新建的spring目錄

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                http://www.springframework.org/schema/beans/spring-beans.xsd
                http://www.springframework.org/schema/context
                http://www.springframework.org/schema/context/spring-context.xsd
                http://www.springframework.org/schema/aop
                http://www.springframework.org/schema/aop/spring-aop.xsd
                http://www.springframework.org/schema/tx
                http://www.springframework.org/schema/tx/spring-tx.xsd
                http://www.springframework.org/schema/mvc
                http://www.springframework.org/schema/mvc/spring-mvc.xsd">

使用c3p0數據庫鏈接池

    <!--配置c3p0數據庫鏈接池 -->
    <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}"/>
    </bean>

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                http://www.springframework.org/schema/beans/spring-beans.xsd
                http://www.springframework.org/schema/context
                http://www.springframework.org/schema/context/spring-context.xsd
                http://www.springframework.org/schema/aop
                http://www.springframework.org/schema/aop/spring-aop.xsd
                http://www.springframework.org/schema/tx
                http://www.springframework.org/schema/tx/spring-tx.xsd
                http://www.springframework.org/schema/mvc
                http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--DAO層配置文件開始-->
    <!--加載數據庫配置文件 -->
    <context:property-placeholder location="classpath:db.properties" />
    <!--配置c3p0數據庫鏈接池 -->
    <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}"/>
    </bean>
    <!-- 讓spring管理sqlsessionfactory 使用mybatis和spring整合包中的 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 數據庫鏈接池 -->
        <property name="dataSource" ref="dataSource" />
        <!-- 加載mybatis的全局配置文件 -->
        <property name="configLocation" value="classpath:mybatis/sqlMapConfig.xml" />
        <!--掃描pojo包,給包下全部pojo對象起別名-->
        <property name="typeAliasesPackage" value="cn.bjut.ssm.domian"/>
    </bean>
    <!--掃描dao接口包路徑,生成包下全部接口的代理對象,而且放入spring容器中-->
    <bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="cn.bjut.ssm.dao"/>
    </bean>
    <!--DAO層配置文件結束-->

</beans>

 

sqlMapConfig.xml

heima_ssm_dao子模塊的resources目錄下新建的mybatis目錄的裏面。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

 

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
            <!-- 配置日誌輸出類型 -->
            <setting name="logImpl" value="LOG4J"/>

    </settings>
</configuration>

 

 

在heima_ssm_service子模塊的resources目錄下,新建一個Directory目錄名爲spring裏面放着

applicationContext-trans.xml  方案一

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                http://www.springframework.org/schema/beans/spring-beans.xsd
                http://www.springframework.org/schema/context
                http://www.springframework.org/schema/context/spring-context.xsd
                http://www.springframework.org/schema/aop
                http://www.springframework.org/schema/aop/spring-aop.xsd
                http://www.springframework.org/schema/tx
                http://www.springframework.org/schema/tx/spring-tx.xsd
                http://www.springframework.org/schema/mvc
                http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--service層配置文件開始-->
    <!-- 配置spring建立容器時註解要掃描的包-->
    <context:component-scan base-package="cn.bjut.ssm.service"/>

    <!--aop面向切面編程,切面就是切入點和通知的組合-->
    <!--配置事務管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!--配置事務的通知-->
    <tx:advice id="txadvice" transaction-manager="transactionManager">
        <!-- 配置事務的屬性
                propagation:用於指定事務的傳播行爲。默認值是REQUIRED,表示必定會有事務,增刪改的選擇。
                查詢方法能夠選擇SUPPORTS。
                read-only:用於指定事務是否只讀。只有查詢方法才能設置爲true。默認值是false,表示讀寫。
        -->
        <tx:attributes>
            <!-- 傳播行爲 -->
            <tx:method name="save*" propagation="REQUIRED" />
            <tx:method name="insert*" propagation="REQUIRED" />
            <tx:method name="add*" propagation="REQUIRED" />
            <tx:method name="create*" propagation="REQUIRED" />
            <tx:method name="delete*" propagation="REQUIRED" />
            <tx:method name="update*" propagation="REQUIRED" />
            <tx:method name="find*" propagation="SUPPORTS" read-only="true" />
            <tx:method name="select*" propagation="SUPPORTS" read-only="true" />
            <tx:method name="get*" propagation="SUPPORTS" read-only="true" />
        </tx:attributes>
    </tx:advice>

    <!--配置切面-->
    <aop:config>
        <!-- 配置切入點表達式-->
        <aop:pointcut id="pointcut1" expression="execution(* cn.bjut.ssm.service.impl.*.*(..))"/>
        <!--創建切入點表達式和事務通知的對應關係 -->
        <aop:advisor advice-ref="txadvice" pointcut-ref="pointcut1"/>
    </aop:config>
    <!--service層配置文件結束-->


</beans>

 

applicationContext-trans.xml  方案二

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                http://www.springframework.org/schema/beans/spring-beans.xsd
                http://www.springframework.org/schema/context
                http://www.springframework.org/schema/context/spring-context.xsd
                http://www.springframework.org/schema/aop
                http://www.springframework.org/schema/aop/spring-aop.xsd
                http://www.springframework.org/schema/tx
                http://www.springframework.org/schema/tx/spring-tx.xsd
                http://www.springframework.org/schema/mvc
                http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--service層配置文件開始-->
    <!-- 配置spring建立容器時,開啓註解要掃描的包-->
    <context:component-scan base-package="cn.bjut.ssm.dao"/>
    <context:component-scan base-package="cn.bjut.ssm.service"/>

    <!--aop面向切面編程,切面就是切入點和通知的組合-->
    <!--配置事務管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!-- 配置Spring的聲明式事務管理 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
    <!--service層配置文件結束-->


</beans>

web子模塊的resources目錄

applicationContext.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                http://www.springframework.org/schema/beans/spring-beans.xsd
                http://www.springframework.org/schema/context
                http://www.springframework.org/schema/context/spring-context.xsd
                http://www.springframework.org/schema/aop
                http://www.springframework.org/schema/aop/spring-aop.xsd
                http://www.springframework.org/schema/tx
                http://www.springframework.org/schema/tx/spring-tx.xsd
                http://www.springframework.org/schema/mvc
                http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <import resource="classpath:spring/applicationContext-dao.xml"/>
    <import resource="classpath:spring/applicationContext-service.xml"/>
</beans>

 

webapp\WEB-INF目錄下

web.xml 未分頁方案

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <!-- 配置加載類路徑的配置文件 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>

    <!-- 配置spring核心監聽器 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- 前端控制器(加載classpath:springmvc.xml 服務器啓動建立servlet) -->
    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 配置初始化參數,建立完DispatcherServlet對象,加載springmvc.xml配置文件 -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <!-- 服務器啓動的時候,讓DispatcherServlet對象建立 -->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

    <!-- 解決中文亂碼過濾器 -->
    <filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
</web-app>

 

springmvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                http://www.springframework.org/schema/beans/spring-beans.xsd
                http://www.springframework.org/schema/context
                http://www.springframework.org/schema/context/spring-context.xsd
                http://www.springframework.org/schema/aop
                http://www.springframework.org/schema/aop/spring-aop.xsd
                http://www.springframework.org/schema/tx
                http://www.springframework.org/schema/tx/spring-tx.xsd
                http://www.springframework.org/schema/mvc
                http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- 掃描controller的註解,別的不掃描 -->
    <context:component-scan base-package="cn.bjut.ssm.controller"/>

    <!--開啓對SpringMVC註解的支持:處理器映射器,處理器適配器-->
    <mvc:annotation-driven/>

    <!-- 配置視圖解析器 -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- JSP文件所在的目錄 -->
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

    <!--釋放靜態資源,哪些靜態資源不攔截-->
    <mvc:resources location="/css/" mapping="/css/**"/>
    <mvc:resources location="/images/" mapping="/images/**"/>
    <mvc:resources location="/js/" mapping="/js/**"/>
    <mvc:resources location="/plugins/" mapping="/plugins/**" />

    <!--
        支持AOP的註解支持,AOP底層使用代理技術
        JDK動態代理,要求必須有接口
        cglib代理,生成子類對象,proxy-target-class="true" 默認使用cglib的方式
    -->
    <aop:aspectj-autoproxy proxy-target-class="true"/>


</beans>

 

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<html>
<head>

    <title>主頁</title>
</head>
<body>
<a href="${pageContext.request.contextPath}/product/findAll.do">查詢全部的產品信息</a>

</body>
</html>

 

把靜態資源文件夾  css、img、plugins文件夾拷貝到webapp目錄下;

把pages文件夾放入 WEB-INF目錄下。

 

 

 

最後開始編寫web子模塊的controller類:

ProductController

package cn.bjut.ssm.controller;

import cn.bjut.ssm.service.IProductService;
import cn.bjut.ssm.domain.Product;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import java.util.List;

@Controller
@RequestMapping("/product")
public class ProductController {

    @Autowired
    private IProductService productService;

    //產品添加
//    @RequestMapping("/save.do")
//    public String save(Product product) throws Exception {
//        productService.save(product);
//        return "redirect:findAll.do";
//    }

    //查詢所有產品
    @RequestMapping("/findAll.do")
    public ModelAndView findAll() throws Exception {
        ModelAndView mv = new ModelAndView();
        List<Product> ps = productService.findAll();
        mv.addObject("productList", ps);
        mv.setViewName("product-list1");
        return mv;

    }
}

 

 回到heima_ssm_utils這個子模塊下,新建一個工具類。

 cn.bjut.ssm.utils.DateUtils

 

package cn.bjut.ssm.utils;

import java.text.ParseException;  //
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateUtils {

    //日期轉換成字符串
    public static String date2String(Date date, String patt) {
        SimpleDateFormat sdf = new SimpleDateFormat(patt);
        String format = sdf.format(date);
        return format;
    }

    //字符串轉換成日期
    public static Date string2Date(String str, String patt) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat(patt);
        Date parse = sdf.parse(str);
        return parse;
    }
}

 

  heima_ssm_web的pom.xml裏面能夠添加一個Tomcat7的插件。

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>heima_ssm</artifactId>
        <groupId>cn.bjut</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>heima_ssm_web</artifactId>
    <packaging>war</packaging>

    <name>heima_ssm_web Maven Webapp</name>
    <!-- FIXME change it to the project's website -->
    <url>http://www.example.com</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>cn.bjut</groupId>
            <artifactId>heima_ssm_service</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>heima_ssm_web</finalName>
        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
            <plugins>
                <plugin>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>3.0.0</version>
                </plugin>
                <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.0.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.7.0</version>
                </plugin>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.20.1</version>
                </plugin>
                <plugin>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>3.2.0</version>
                </plugin>
                <plugin>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>2.5.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.8.2</version>
                </plugin>
            </plugins>

        </pluginManagement>


        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <port>8888</port>
                </configuration>
            </plugin>
        </plugins>


    </build>
</project>

  使用IDEA而且指定Tomcat7插件測試運行的 網頁訪問路徑以下

  http://localhost:8888/heima_ssm_web/


 

 6.產品操做-查詢所有產品3

根據.jsp頁面的須要,從新編輯cn.bjut.ssm.domain
Product.java
package cn.bjut.ssm.domain;

import cn.bjut.ssm.utils.DateUtils;
import org.springframework.format.annotation.DateTimeFormat;

import java.util.Date;

/**
 * 商品信息
 */

public class Product {

    private String id; // 主鍵
    private String productNum; // 編號 惟一
    private String productName; // 名稱
    private String cityName; // 出發城市
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
    private Date departureTime; // 出發時間
    private String departureTimeStr;  //爲了頁面顯示,數據庫裏沒有的字段
    private double productPrice; // 產品價格
    private String productDesc; // 產品描述
    private Integer productStatus; // 狀態 0 關閉 1 開啓
    private String productStatusStr;  //爲了頁面顯示,數據庫裏沒有的字段


    public String getDepartureTimeStr() {
        if(departureTime!=null){
            departureTimeStr= DateUtils.date2String(departureTime,"yyyy-MM-dd HH:mm:ss");
        }
        return departureTimeStr;
    }

    public void setDepartureTimeStr(String departureTimeStr) {
        this.departureTimeStr = departureTimeStr;
    }

    public String getProductStatusStr() {
        if (productStatus != null) {
            // 狀態 0 關閉 1 開啓
            if(productStatus==0)
                productStatusStr="關閉";
            if(productStatus==1)
                productStatusStr="開啓";
        }
        return productStatusStr;
    }

    public void setProductStatusStr(String productStatusStr) {
        this.productStatusStr = productStatusStr;
    }
    //===============================================================================//
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getProductNum() {
        return productNum;
    }

    public void setProductNum(String productNum) {
        this.productNum = productNum;
    }

    public String getProductName() {
        return productName;
    }

    public void setProductName(String productName) {
        this.productName = productName;
    }

    public String getCityName() {
        return cityName;
    }

    public void setCityName(String cityName) {
        this.cityName = cityName;
    }

    public Date getDepartureTime() {
        return departureTime;
    }

    public void setDepartureTime(Date departureTime) {
        this.departureTime = departureTime;
    }

    public double getProductPrice() {
        return productPrice;
    }

    public void setProductPrice(double productPrice) {
        this.productPrice = productPrice;
    }

    public String getProductDesc() {
        return productDesc;
    }

    public void setProductDesc(String productDesc) {
        this.productDesc = productDesc;
    }

    public Integer getProductStatus() {
        return productStatus;
    }

    public void setProductStatus(Integer productStatus) {
        this.productStatus = productStatus;
    }

    //========================================================================================//

}

HTTP Status 500 - Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

 
    <!-- 讓spring管理sqlsessionfactory 使用mybatis和spring整合包中的 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 數據庫鏈接池 -->
        <property name="dataSource" ref="dataSource" />
        <!-- 加載mybatis的全局配置文件 -->
        <property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml" />
        <!--接口+XML配置使用mybatis時的那些sql語句放置的路徑-->
        <property name="mapperLocations" value="classpath:cn/bjut/ssm/dao/*.xml"/>
    </bean>
    <!--掃描dao接口包路徑,生成包下全部接口的代理對象,而且放入spring容器中-->
    <bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="cn.bjut.ssm.dao"/>
    </bean>

 此時測試SSM項目會提示報錯,理由是找不到findall()方法。由於講師用的是註解開發mybatis ,而我這裏是用:接口類+.xml配置文件的方式。

  前面在給oracle數據庫建立users ssm08時候,沒有指定tablespace,會致使後面沒有權限查到數據表。ITHEIMA是DBA權限建立PRODUCT表時所在的表空間。
-- alter user username default tablespace userspace
   alter user ssm08 default tablespace ITHEIMA; 

   查詢所有產品的

   ProductController

@Controller
@RequestMapping("/product")
public class ProductController {

    @Autowired
    private IProductService productService;

    //查詢所有產品
    @RequestMapping("/findAll.do")
    public ModelAndView findAll() throws Exception {
        ModelAndView mv = new ModelAndView();
        List<Product> ps = productService.findAll();
        mv.addObject("productList", ps);
        mv.setViewName("product-list");
        return mv;

    }

}

7.product-list.jsp頁面製做

 使用IDEA處理JSP頁面的腳本內容,替換的快捷鍵是  Ctrl+R

 Except Comments能夠排除註釋的內容。

 

 

 ../

 被替換爲

${pageContext.request.contextPath}

 

 若是使用MySQL作數據庫,那麼語句語法是有不一樣的要注意。

use itheima;
drop table  if exists `product`;
-- 建立1個表
CREATE TABLE `product`(
`id` varchar(32) NOT NULL,
`productNum` varchar(50) NOT NULL, 
`productName` varchar(50), 
`cityName` varchar(50), 
`departureTime` timestamp, 
`productPrice` INT, 
`productDesc` varchar(500), 
`productStatus` INT,
 PRIMARY KEY (`id`)
);

-- 插入測試數據
insert into product (id, productNum, productName, cityName, departureTime, productPrice,productDesc, productStatus)
values ('676C5BD1D35E429A8C2E114939C5685A', 'itcast-002', '北京三日遊', '北京', '2018-10-10 10:10:00', 1200, '不錯的旅行', 1);
insert into product (id, productNum, productName, cityName, departureTime, productPrice,productDesc, productStatus)
values ('9F71F01CB448476DAFB309AA6DF9497F', 'itcast-001', '北京三日遊', '北京', '2018-10-10 10:10:00', 1200, '不錯的旅行', 1);
insert into product (id, productNum, productName, cityName, departureTime, productPrice,productDesc, productStatus)
values ('12B7ABF2A4C544568B0A7C69F36BF8B7', 'itcast-003', '上海五日遊', '上海', '2019-10-10 14:30:00', 1800, '魔都我來了', 0);

 db.properties

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/itheima?serverTimezone=Asia/Shanghai
jdbc.username=root
jdbc.password=root

 

8.main.jsp頁面製做

當前項目默認的index.jsp長得比較簡陋,咱們但願從index.jsp直接跳轉到視覺效果更好的 main.jsp 前端頁面。

註釋掉超連接<a標籤,引入一個 <jsp:forward 標籤

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<html>
<head>

    <title>主頁</title>
</head>
<body>
<%--<a href="${pageContext.request.contextPath}/product/findAll.do">查詢全部的產品信息</a>--%>
<jsp:forward page="WEB-INF/pages/main.jsp"></jsp:forward>
</body>
</html>

 

 圖片資源加載不成功,最後把images目錄移動到webapp目錄下。

 

        <!-- 內容區域 -->
        <div class="content-wrapper">
            <%--資源相對路徑--%>
            <img src="${pageContext.request.contextPath}/images/center.jpg"
                width="100%" height="100%" />

        </div>

 

 

 9.產品操做-添加產品流程描述

 

  10.產品操做-產品添加操做

  添加產品用資料裏給的product-add.jsp頁面文件,我把它重命名爲product-add2.jsp放到webapp/page/目錄下。

  在WEB-INF/pages/product-list2.jsp頁面的「新建」按鈕處添加一個onclick屬性,寫入瀏覽器直接跳轉文件資源路徑。

<button type="button" class="btn btn-default" title="新建" onclick="location.href='../page/product-add2.jsp'"><i class="fa fa-file-o"></i> 新建</button>

 

控制類方法的添加

ProductController

 

@Controller
@RequestMapping("/product")
public class ProductController {

    @Autowired
    private IProductService productService;

    //查詢所有產品
    @RequestMapping("/findAll.do")
    public ModelAndView findAll() throws Exception {
        ModelAndView mv = new ModelAndView();
        List<Product> ps = productService.findAll();
        mv.addObject("productList", ps);
        mv.setViewName("product-list2");
        return mv;

    }

    //產品添加後跳轉查詢產品
    @RequestMapping("/save.do")
    public String save(Product product)throws Exception{
        productService.save(product);
        return "redirect:findall.do";
    }

}

Service層

ProductServiceImpl

@Service
@Transactional  //註解的方式配置spring事務管理
public class ProductServiceImpl implements IProductService {

    @Autowired
    private IProductDao productDao;

    @Override
    public List<Product> findAll()throws Exception{

        return productDao.findAll();
    }
    
    //服務層保存添加產品調用了DAO層對象的方法
    @Override
    public void save (Product product){
        productDao.save(product);
    }


}

DAO層接口的@Insert註解插入數據

public interface IProductDao {

    //查詢全部的產品信息
    @Select("select * from product")
    public List<Product> findAll() throws Exception;

    //  https://www.cnblogs.com/MarlonKang/p/11491217.html
    @Insert({"insert into product(productNum,productName,cityName,departureTime,productPrice,productDesc,productStatus)",
    "values(#{productNum},#{productName},#{cityName},#{departureTime},#{productPrice},#{productDesc},#{productStatus})"})
    public void save(Product product);

}

SQL語句不在一行會報錯,因此在每一行都用一對 英文雙引號,而後在外側添加一對{ } ,第一行SQL末尾有一個英文,

  

  

 

 

//在springMVC框架下的實體類的Date類型的成員變量上使用
//能夠實現頁面表單提交字符串數據轉化成Date類型JAVA數據
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")

 

拓展練習: 刪除按鈕,經過網頁上的 checkbox選中的實現。

-- 查詢PRODUCT表中數據
select * from product t;
-- 刪除PRODUCT表中數據經過productNum值
delete from PRODUCT where PRODUCTNUM = '1234567890';

使用PL/SQL Developer再Commit一下,提交事務。

如今咱們須要在product-list.jsp這個用來展現查詢全部產品信息的網頁上,添加刪除按鈕的功能實現。首先要解決的是,那一組自動產生的checkbox的value值的獲取和選中狀態的判斷。這裏使用了jQurey技術。

參考教程: checkbox 複選框全選代碼

                  Jquery 數組操做

                            <c:forEach var="product" items="${productList}" varStatus="s" >
                            <tr>
                                <td><input   type="checkbox"  value="${product.id}" name="Ids" id ="${s.index}" ></td>
                                <td>${product.id}</td>
                                <td>${product.productNum}
                                </td>
                                <td>${product.productName}</td>
                                <td>${product.cityName}</td>
                                <td>${product.departureTimeStr}</td>
                                <td class="text-center">${product.productPrice}</td>
                                <td class="text-center">${product.productDesc}</td>
                                <td class="text-center">${product.productStatusStr}</td>
                                <td class="text-center">
                                    <button type="button" class="btn bg-olive btn-xs">訂單</button>
                                    <button type="button" class="btn bg-olive btn-xs">詳情</button>
                                    <button type="button" class="btn bg-olive btn-xs">編輯</button>
                                </td>
                            </tr>
                            </c:forEach>

 工具欄那部分按鈕代碼以下。

 

       <button type="button" class="btn btn-default" title="新建" onclick="location.href='../page/product-add2.jsp'"><i class="fa fa-file-o"></i> 新建</button>
       <button type="button" class="btn btn-default" title="刪除" onclick="deleteProduct()"><i class="fa fa-trash-o"></i> 刪除</button>

 

  測試jQuery獲取checkbox數組對象,並提取數組元素checkbox的value值。

  

    <script>
        function deleteProduct() {
                var arrayObj =document.getElementsByName("Ids");
                //s.index從0開始,因此第一行的checkbox的id=0
                var checkbox =document.getElementById("0");
                //第一彈出的是checkbox的總行數
                alert(arrayObj.length);
                //第二彈出的是第一行的產品ID值
                alert(checkbox.value);

                //獲取數組的元素,經過數組索引
                //數組索引值爲顯示的checkbox行數減一
                var testGetArrValue=arrayObj[1];
                //第三彈出整個checkbox數組中被索引的第2個元素的value值
                alert(testGetArrValue.value);
            
                var selectList = [];
                alert(selectList.length);  //第四彈出數組初始長度0

                $('input[name=Ids]:checked ').each(function () {
                    //這裏用所選複選框或運算後的值

                    //jQuery數組的push方法
                    selectList.push($(this).val());
                    });

                alert(selectList.length);  //第五彈出選中的checkbox個數
            

        }


    </script>

  如今的需求是:如何把JSP頁面裏的字符串數組-->後臺的數組變量。

  \02 JavaWeb+黑馬旅遊網\javaweb\2-15Jquery\第1節 JQuery基礎\04_JQuery對象和JS對象區別與轉換.mp4

  服務器端沒法直接使用瀏覽器客戶端內容,必須先提交到服務器才行,用表單或者ajax來提交var變量。

  \02 JavaWeb+黑馬旅遊網\javaweb\2-16Ajax和JSON\第2節 JQuery方式實現Ajax

  經過ajax提交數組時,後端spring MVC中的@RequestParam獲取不到參數。ajax請求時增長:traditional: true 就能夠正常提交了。

  關於Ajax請求傳遞數組參數的解決辦法

 

    

  product-list2.jsp

    <script>
        function deleteProduct() {
                var arrayObj =document.getElementsByName("Ids");
                //s.index從0開始,因此第一行的checkbox的id=0
                var checkbox =document.getElementById("0");
                //第一彈出的是checkbox的總行數
                alert(arrayObj.length);
                //第二彈出的是第一行的產品ID值
                alert(checkbox.value);

                //獲取數組的元素,經過數組索引
                //數組索引值爲顯示的checkbox行數減一
                var testGetArrValue=arrayObj[1];
                //第三彈出整個的checkbox數組中第二行的產品ID值
                alert(testGetArrValue.value);


                var selectList = [];
                alert(selectList.length);  //第四彈出數組初始長度0

                $('input[name=Ids]:checked ').each(function () {
                    //這裏用所選複選框或運算後的值

                    //jQuery數組的push方法
                    selectList.push($(this).val());
                    });

                alert(selectList.length);  //第五彈出選中的checkbox總個數


            //用jQuery實現AJAX請求提交數據到服務器端
            //保存數據到服務器,成功時控制檯打印顯示信息
            var selectListTest = new Array();
            selectListTest[0] = "param1";
            selectListTest[1] = "param2";
            selectListTest[2] = "param3";
            $.ajax({
                    type:"POST",
                    url:"${pageContext.request.contextPath}/product/delete.do",
                    contentType:"application/json",//jQuery的ajax提交數組使得springMVC使用必填參數
                    //接收用@requestBody
                    data:JSON.stringify(selectList),  //數組經過JSON.stringify格式化
                    success:function (data) {
                        alert(data);
                    }

                });



        }
        

    </script>

 

  Web層的Controler控制類的method

    //刪除產品的某個分類經過產品ID編號
    @RequestMapping("/delete.do")
    public String deleteByNum(@RequestBody List<String> selectList)throws Exception{
        System.out.println( "JSP頁面經過AJAX技術提交POST請求的路徑找到。" );
        System.out.println( selectList );

        //從List中遍歷字符串完成刪除操做
        for (String productId :selectList
             ) {
            System.out.println( productId );
            productService.deleteByNum(productId);
        }

        System.out.println( "JSP頁面經過AJAX技術提交字符串數組成功實現。" );

        return"redirect:findAll.do";
    }

  DAO層接口

package cn.bjut.ssm.dao;

import cn.bjut.ssm.domain.Product;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface IProductDao {

    //查詢全部的產品信息
    @Select("select * from product")
    public List<Product> findAll() throws Exception;

    //  http://www.javashuo.com/article/p-tdolyflg-hq.html
    @Insert({"insert into product(productNum,productName,cityName,departureTime,productPrice,productDesc,productStatus)",
    "values(#{productNum},#{productName},#{cityName},#{departureTime},#{productPrice},#{productDesc},#{productStatus})"})
    public void save(Product product);

    //刪除產品經過產品的ID屬性值,oracle數據庫的TABLE列的別名字段不區分大小寫。
    @Delete("delete from PRODUCT where ID = #{id}")
    public void deleteByNum(String id);

}

 

通過測試,實現了經過瀏覽器頁面上的「刪除」按鈕+checkbox 來刪除oracle數據庫的產品表中的信息。



==================================================

若是須要上面提到的前端頁面資料請點擊關注私信我您的郵箱。

end

相關文章
相關標籤/搜索