文章目录

  • 一、ssm框架整合
    • 1、创建maven的工程
      • 1. 创建ssm_parent父工程(打包方式选择pom,必须的)
      • 2. 创建ssm_dao子模块(打包方式是jar包)
      • 3. 创建ssm_service子模块(打包方式是jar包)
      • 4. 创建ssm_web子模块(打包方式是war包)
      • 5. 创建ssm_domain子模块(打包方式是jar包)
      • 6. 创建ssm_utils子模块(打包方式是jar包)
      • 7. web依赖于service,service依赖于dao,dao依赖于domain
      • 8. 在ssm_parent的pom.xml文件中引入坐标依赖
      • 9. 在ssm_web项目中导入静态页面
      • 10. 部署ssm_web的项目,只要把ssm_web项目加入到tomcat服务器中即可
    • 2、配置Spring的配置文件
      • dao层
        • jdbc.properties
        • applicationContext-dao.xml
      • service层
        • applicationContext-service.xml
      • web层
        • spring-mvc.xml
        • web.xml
  • 二、产品(旅游)模块功能实现
    • 1、创建产品表和实体
      • 1.1 创建数据库和表结构(oracle数据库)
      • 1.2 创建Product实体类
    • 2、查询所有产品功能
      • 2.1 页面入口地址
      • 2.2 编写Controller
      • 2.3 编写Service
      • 2.4 编写Dao
      • 2.5 编写页面product-list.jsp
    • 3、添加产品功能
      • 3.1 页面入口
      • 3.2 编写Controller
      • 3.3 编写Service
      • 3.4 编写Dao
      • 3.5 自定义类型转换器
    • 4、修改产品功能-数据回显
      • 4.1 页面入口
      • 4.2 编写Controller
      • 4.3 编写Service
      • 4.4 编写Dao
      • 4.5 编写页面
        • 时间处理:(否则uodateUI页面回显示的日期格式不一样)
    • 5、修改产品功能-数据修改
      • 5.1 页面入口
      • 5.2 编写Controller
      • 5.3 编写Service
      • 5.4 编写Dao
    • 6、删除单个产品
      • 6.1 页面代码实现 (js代码跳转页面)
      • 6.2 编写Controller
      • 6.3 编写Service
      • 6.4 编写Dao
    • 7、删除多个产品功能
      • 7.1 页面代码实现(js代码提交表单)
      • 7.2 编写Controller
      • 7.3 编写Service
  • 三:订单模块实现
    • 1、创建订单表和实体
      • 1.1 创建数据库和表结构
    • 2、查询所有订单功能
      • 2.1 页面入口地址
      • 2.2 编写Controller
      • 2.3 编写Service
      • 2.4 编写Dao
      • 2.5 编写页面order-list.jsp
    • 3、添加订单功能-添加订单页面数据准备
      • 3.1 页面入口
      • 3.2 编写Controller
      • 3.3 编写页面order-add.jsp
    • 4、添加订单功能-保存订单数据
      • 4.1 页面入口地址
      • 4.2 编写Controller
      • 4.3 编写Service
      • 4.4 编写Dao

一、ssm框架整合

1、创建maven的工程

1. 创建ssm_parent父工程(打包方式选择pom,必须的)

新建无骨架maven项目 ssm_parent

2. 创建ssm_dao子模块(打包方式是jar包)

在ssm_parent工程上右键-new-module
还是无骨架maven
ssm_dao_331


注意手动加层目录

3. 创建ssm_service子模块(打包方式是jar包)

同上,名字不同而已
在ssm_parent工程上右键-new-module
还是无骨架maven
ssm_service_331

注意手动加层目录

4. 创建ssm_web子模块(打包方式是war包)

在ssm_parent工程上右键-new-module
选择maven-webapp骨架
ssm_web_331


手动加一级目录

5. 创建ssm_domain子模块(打包方式是jar包)

在ssm_parent工程上右键-new-module
无骨架maven
ssm_domain_331

6. 创建ssm_utils子模块(打包方式是jar包)

在ssm_parent工程上右键-new-module
无骨架maven
ssm_utils_331

7. web依赖于service,service依赖于dao,dao依赖于domain



8. 在ssm_parent的pom.xml文件中引入坐标依赖

     <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><spring.version>5.0.2.RELEASE</spring.version><spring.security.version>5.0.2.RELEASE</spring.security.version></properties><dependencies><!-- spring相关的jar包 --><!-- 容器 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><!-- 事务 --><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency><!-- JDBC --><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><!-- 测试 --><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version></dependency><!-- springMVC --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><!-- mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><!-- mybatis与Spring整合 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.1</version></dependency><!-- AOP切面 --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.7</version></dependency><!-- 数据源 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.9</version></dependency><!-- 单元测试 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!-- servletAPI --><!-- JSP应用 --><dependency><groupId>javax.servlet</groupId><artifactId>jsp-api</artifactId><version>2.0</version><scope>provided</scope></dependency><!-- servlet应用 --><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency><!-- 日志记录工具 --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.10.0</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.10.0</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-web</artifactId><version>2.9.1</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.25</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId><version>2.9.1</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-jcl</artifactId><version>2.9.1</version></dependency><!-- mysql --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.6</version></dependency><!--oracle的jar包--><dependency><groupId>com.oracle</groupId><artifactId>ojdbc14</artifactId><version>10.2.0.3.0</version></dependency><!-- JSTL --><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>1.1.1</version></dependency><!-- 文件上传 --><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.5</version></dependency><dependency><groupId>c3p0</groupId><artifactId>c3p0</artifactId><version>0.9.1.2</version></dependency><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.2</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></dependencies>

ojdbc14:10.2.0.2.0 版本总是报波浪线 改成0.2.0.3.0 即可
可能是本地仓库的xml配置原因:

9. 在ssm_web项目中导入静态页面

复制到webapp目录下即可

10. 部署ssm_web的项目,只要把ssm_web项目加入到tomcat服务器中即可

2、配置Spring的配置文件

dao层

ssm_dao_331中创建包结构和两个配置文件

jdbc.properties

jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:orcl
jdbc.username=ssm331
jdbc.password=123

applicationContext-dao.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"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"><!--引入属性文件--><context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder><!--创建数据源对象--><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="${jdbc.driver}"></property><property name="url" value="${jdbc.url}"></property><property name="username" value="${jdbc.username}"></property><property name="password" value="${jdbc.password}"></property></bean><!--sqlSessionFactoryBean对象--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!--注入数据源对象--><property name="dataSource" ref="dataSource"></property></bean><!--扫描dao包,创建Dao接口的动态代理对象--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!--指定dao层的包路径--><property name="basePackage" value="cn.ahpu.dao"></property></bean></beans>

service层

创建包结构与一个配置文件

applicationContext-service.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:tx="http://www.springframework.org/schema/tx"xmlns:aop="http://www.springframework.org/schema/aop"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/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"><!--引入持久层配置文件 classpath*应该是通配符 寻找工程下所有classpathXX路径 然后文件名唯一 可以正确匹配--><!--<import resource="classpath*:spring/applicationContext-dao.xml"></import>--><!--有简便方法全引入各种spring核心xml--><!--扫描包:创建业务层对象--><context:component-scan base-package="cn.ahpu.service"></context:component-scan><!--事务管理器对象--><bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean><!--事务通知对象--><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="query*" read-only="true" propagation="SUPPORTS"/><tx:method name="get*" read-only="true" propagation="SUPPORTS"/><tx:method name="find*" read-only="true" propagation="SUPPORTS"/><tx:method name="*" read-only="false" propagation="REQUIRED"/></tx:attributes></tx:advice><!--aop切面配置--><aop:config><aop:advisor advice-ref="txAdvice" pointcut="execution(* cn.ahpu.service.impl.*.*(..))"></aop:advisor></aop:config>
</beans>

web层

先将页面复制到webapp目录下
再创建包结构
写spring-mvc.xml和web.xml
注:此处resources目录没有spring目录了 spring-mvc.xml就在resources根目录下,本来就不是spring核心配置文件嘛

spring-mvc.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: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/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"><!--扫描包:创建web层对象--><context:component-scan base-package="cn.ahpu.controller"></context:component-scan><!--视图解析器--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/pages/"></property><property name="suffix" value=".jsp"></property></bean><!--注解驱动--><mvc:annotation-driven></mvc:annotation-driven><!--资源放行--><mvc:default-servlet-handler></mvc:default-servlet-handler><!--可能有拦截器--></beans>

web.xml

<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><display-name>Archetype Created Web Application</display-name><!--全局参数:指定配置文件路径--><context-param><param-name>contextConfigLocation</param-name><!--所有spring的xml--><param-value>classpath*:spring/*.xml</param-value></context-param><!--编码过滤器--><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><!--监听器:创建spring容器对象  就是加载applicationContext.xml 前面还有一行配套配置--><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!--前端控制器--><servlet><servlet-name>DispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mvc.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>DispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping></web-app>

二、产品(旅游)模块功能实现

1、创建产品表和实体

1.1 创建数据库和表结构(oracle数据库)

create sequence product_seq; -- oracle每创建一张表就创建一个序列CREATE TABLE product(id number PRIMARY KEY ,productNum VARCHAR2(50) NOT NULL UNIQUE,productName VARCHAR2(50),cityName VARCHAR2(50),departureTime date,productPrice number(8,2),productDesc VARCHAR2(500),productStatus INT
)

其中字段描述如下:

序号 字段名称 字段类型 字段描述
1 id number 无意义
2 productNum varchar2(50) 产品编号,唯一,不为空
3 productName varchar2(50) 产品名称(路线名称)
4 cityName varchar2(50) 出发城市
5 departureTime date 出发时间
6 productPrice number(8,2) 产品价格
7 productDesc varchar2(500) 产品描述
8 productStatus int 状态(0 关闭 1 开启)

1.2 创建Product实体类

ssm_domain_331内引入lombok

@Data
public class Product {private Integer id;private String productNum;private String productName;private String cityName;private Date departureTime;private Double productPrice;private String productDesc;private Integer productStatus;
}

2、查询所有产品功能

2.1 页面入口地址

2.2 编写Controller

先写controller 有错误留着 慢慢写 等错误全没了也就写好了 这样不容易忘记东西
ProductController

@Controller
@RequestMapping("/product")
public class ProductController {@AutowiredProductService productService;@RequestMapping("/findAll")public ModelAndView findAll(){ModelAndView modelAndView = new ModelAndView();//数据List<Product> products = productService.findAll();System.out.println("产品:"+products);modelAndView.addObject("products",products);//页面modelAndView.setViewName("product-list");//返回return modelAndView;}}

2.3 编写Service

ProductService接口

public interface ProductService {List<Product> findAll();
}

ProductServiceImpl接口实现

@Service
public class ProductServiceImpl implements ProductService {@AutowiredProductDao productDao;@Overridepublic List<Product> findAll() {return productDao.findAll();}
}

2.4 编写Dao

ProductDao

public interface OrderDao {@Select("select * from orders")/*一对一级联查询*/@Results({@Result(property = "product" ,column = "productId",javaType = Product.class,one = @One(select = "cn.ahpu.dao.ProductDao.findById"))})List<Order> findAll();
}

2.5 编写页面product-list.jsp

引入格式化标签库 用来处理日期格式非常方便

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %><!--数据列表-->
<table id="dataList"class="table table-bordered table-striped table-hover dataTable"><thead><tr><th class="" style="padding-right: 0px;"><inputid="selall" type="checkbox" class="icheckbox_square-blue"></th><th class="sorting_asc">ID</th><th class="sorting">产品编号</th><th class="sorting">产品名称</th><th class="sorting">出发城市</th><th class="sorting">出发时间</th><th class="sorting">产品价格</th><th class="sorting">产品描述</th><th class="sorting">产品状态</th><th class="text-center">操作</th></tr></thead><tbody><c:forEach items="${products}" var="product"><tr><td><input name="ids" type="checkbox"></td><td>${product.id}</td><td>${product.productNum}</td><td>${product.productName}</td><td>${product.cityName}</td><td><%--el标签可以 格式化标签 注意MM大写--%><fmt:formatDate value="${product.departureTime}" pattern="yyyy-MM-dd"></fmt:formatDate></td><td>${product.productPrice}</td><td>${product.productDesc}</td><td>${product.productStatus == 1?'开启':'关闭'}</td><td class="text-center"><button type="button" class="btn bg-olive btn-xs"onclick='location.href="all-order-manage-edit.html"'>删除</button><button type="button" class="btn bg-olive btn-xs"onclick='location.href="all-order-manage-edit.html"'>修改</button></td></tr></c:forEach></tbody></table>
<!--数据列表/-->

3、添加产品功能

3.1 页面入口

3.2 编写Controller

    @RequestMapping("/save")public String save(Product product){productService.save(product);return "redirect:/product/findAll";//防止别的模块内也有findAll方法 写绝对路径}

3.3 编写Service

public interface ProductService {List<Product> findAll();void save(Product product);
}
    @Overridepublic void save(Product product) {productDao.save(product);}

3.4 编写Dao

    @Insert("insert into product values(product_seq.nextval,#{productNum},#{productName}," +"#{cityName},#{departureTime},#{productPrice},#{productDesc},#{productStatus})")void save(Product product);

也可以这么写sql 先查询下主键 直接就到了Product里 然后再去插入

3.5 自定义类型转换器

StringToDateConverter

public class StringToDateConverter implements Converter<String,Date> {@Overridepublic Date convert(String source) {SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm");try {Date date = sdf.parse(source);return date;} catch (ParseException e) {e.printStackTrace();}return null;}
}

spring-mvc.xml

    <!--扫描包:创建web层对象--><context:component-scan base-package="cn.ahpu.controller"></context:component-scan><!--创建类型转换器 工厂类对象 前端:string->Controller:date写完 上面的注解驱动别忘记引用--><bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"><property name="converters"><set><bean class="cn.ahpu.converter.StringToDateConverter"></bean></set></property></bean>

4、修改产品功能-数据回显

4.1 页面入口

4.2 编写Controller

@RequestMapping("/updateUI")
public ModelAndView updateUI(Integer productId){ModelAndView modelAndView = new ModelAndView();System.out.println(productId);Product product=productService.findById(productId);System.out.println(product);modelAndView.addObject("product",product);modelAndView.setViewName("product-update");return modelAndView;}

4.3 编写Service

void update(Product product);

ProductServiceImpl实现

    @Overridepublic Product findById(Integer id) {return productDao.findById(id);}

4.4 编写Dao

    @Select("select * from product where id = #{id}")Product findById(Integer id);

4.5 编写页面

<form action="${pageContext.request.contextPath}/product/update"method="post"><input type="hidden" name="id" value="${product.id}"><!-- 正文区域 --><section class="content"> <!--产品信息--><div class="panel panel-default"><div class="panel-heading">产品信息</div><div class="row data-type"><div class="col-md-2 title">产品编号</div><div class="col-md-4 data"><input type="text" class="form-control" name="productNum"placeholder="产品编号" value="${product.productNum}"readonly="readonly"></div><div class="col-md-2 title">产品名称</div><div class="col-md-4 data"><input type="text" class="form-control" name="productName"placeholder="产品名称" value="${product.productName}"></div><div class="col-md-2 title">出发时间</div><div class="col-md-4 data"><div class="input-group date"><div class="input-group-addon"><i class="fa fa-calendar"></i></div><input type="text" class="form-control pull-right"id="datepicker-a3" name="departureTime"value="${product.departureTimeStr}"></div></div><div class="col-md-2 title">出发城市</div><div class="col-md-4 data"><input type="text" class="form-control" name="cityName"placeholder="出发城市" value="${product.cityName}"></div><div class="col-md-2 title">产品价格</div><div class="col-md-4 data"><input type="text" class="form-control" placeholder="产品价格"name="productPrice" value="${product.productPrice}"></div><div class="col-md-2 title">产品状态</div><div class="col-md-4 data"><select id="productStatus" class="form-control select2" style="width: 100%"name="productStatus"><%--<option value="0" <c:if test="${product.productStatus == 0}">selected="selected"</c:if> >关闭</option><option value="1" <c:if test="${product.productStatus == 1}">selected="selected"</c:if> >开启</option>--%><%-- 用jquery写最方便 --%><option value="0" >关闭</option><option value="1" >开启</option></select></div><div class="col-md-2 title rowHeight2x">其他信息</div><div class="col-md-10 data rowHeight2x"><textarea class="form-control" rows="3" placeholder="其他信息"name="productDesc">${product.productDesc}</textarea></div></div></div><!--订单信息/--> <!--工具栏--><div class="box-tools text-center"><button type="submit" class="btn bg-maroon">修改</button><button type="button" class="btn bg-default"onclick="history.back(-1);">返回</button></div><!--工具栏/--> </section><!-- 正文区域 /-->
</form><scriptsrc="${pageContext.request.contextPath}/plugins/jQuery/jquery-2.2.3.min.js"></script>
<scriptsrc="${pageContext.request.contextPath}/plugins/jQueryUI/jquery-ui.min.js"></script>
<script>$.widget.bridge('uibutton', $.ui.button);//千万注意编码位置 引入的jquery之下//修改界面 selected option的默认选项$("#productStatus option[value=${product.productStatus}]").prop("selected","selected");
</script>

时间处理:(否则uodateUI页面回显示的日期格式不一样)

页面入口value=“字符串内无法写el表达式 于是乎最简单的方法 直接在javaBean内多加一个get方法即可”
sql语句查询多自定义一个查询列 然后取个别名也行

value="${product.departureTimeStr}"
@Data
public class Product {//...private Date departureTime;private String departureTimeStr;//方便前端显示 所以说直接写成string多好 前端提交的都是string//...public String getDepartureTimeStr() {SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm");String timeStr = sdf.format(departureTime);return timeStr;}
}

数据库改成timestamp类型,否则时间查不到

5、修改产品功能-数据修改

5.1 页面入口

5.2 编写Controller

@RequestMapping("/update")
public String update(Product product){System.out.println(product);productService.update(product);return "redirect:/product/findAll";
}

5.3 编写Service

ProductService接口

void update(Product product);

ProductServiceImpl实现

@Override
public void update(Product product) {productDao.update(product);
}

5.4 编写Dao

@Update("update product set productNum=#{productNum},productName=#{productName}," +"cityName=#{cityName},departureTime=#{departureTime},productPrice=#{productPrice}" +",productDesc=#{productDesc},productStatus=#{productStatus} where id=#{id}")
void update(Product product);

6、删除单个产品

6.1 页面代码实现 (js代码跳转页面)

<button type="button" class="btn bg-olive btn-xs" onclick='delOne(${product.id})'>删除</button>
<script type="text/javascript">function delOne(id){if(confirm("您确定要删除吗?")){location.href="${pageContext.request.contextPath}/product/delOne?id="+id;}}
</script>

6.2 编写Controller

@RequestMapping("/delOne")
public String delOne(Integer id){System.out.println(id);productService.delById(id);return "redirect:/product/findAll";
}

6.3 编写Service

void delById(Integer id);
@Override
public void delById(Integer id) {productDao.delById(id);
}

6.4 编写Dao

@Delete("delete from product where id=#{id}")
void delById(Integer id);

7、删除多个产品功能

7.1 页面代码实现(js代码提交表单)


点删除之后提交表单最方便,哪些选中了,哪些未选中自动获取了!
注意form表单的标签只能放到table标签里面 不能放在否则报空指针 因为table标签内只允许有tr和td标签

<form action="${pageContext.request.contextPath}/product/delMany?" id="delForm"><button type="button" class="btn btn-default" title="删除" onclick='delMany()'><i class="fa fa-trash-o"></i> 删除</button>
</form>

js删除

//TODO
//删除多个 直接提交表单最为方便
function delMany() {//获取选中的复选框数量var len = $("input:checkbox:checked").length;//alert("你一共选中了"+len+"个复选框");if(len>0&&confirm("您确定删除这些吗?")){//获取表单//document.forms 获取所有的表单  只有一个就是document.forms[0]var delForm=$("#delForm");//表单提交delForm.submit();//提交了 和点submit效果一样}
}

7.2 编写Controller

    @RequestMapping("/delMany")public String delMany(Integer[] ids){System.out.println("删除所有:被删编号 "+Arrays.toString(ids));productService.delMany(ids);return "redirect:findAll";}

7.3 编写Service

ProductService接口

    void delMany(Integer[] ids);

ProductServiceImpl实现

    //根据ids数组删除多个@Overridepublic void delMany(Integer[] ids) {//dao内不需要再写个delMany方法了 in(1,2,3) 动态sql在注解内不大好写 不如把麻烦留在业务层 最灵活了for (Integer id : ids) {productDao.delById(id);}}

三:订单模块实现

1、创建订单表和实体

1.1 创建数据库和表结构

create sequence order_seq;CREATE TABLE orders(id number PRIMARY KEY,orderNum VARCHAR2(20) NOT NULL UNIQUE,orderTime DATE,peopleCount number,orderDesc VARCHAR2(500),payType number,orderStatus number,productId int,FOREIGN KEY (productId) REFERENCES product(id)
)

其中字段描述如下:

序号 字段名称 字段类型 字段描述
1 id bigint 无意义、主键自动增长
2 orderNum varchar(50) 订单编号 不为空 唯一
3 orderTime DATE 下单时间
4 peopleCount int 出行人数
5 orderDesc varchar(500) 订单描述(其它信息)
6 payType int 支付方式(0 支付宝 1 微信 2其它)
7 orderStatus int 订单状态(0 未支付 1 已支付)
8 productId int 产品id 外键

2、查询所有订单功能

2.1 页面入口地址

2.2 编写Controller

@Controller
@RequestMapping("/order")
public class OrderController {@AutowiredOrderService orderService;@RequestMapping("/findAll")public ModelAndView findAll(){List<Order> orders= orderService.findAll();ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("orders",orders);modelAndView.setViewName("order-list");return modelAndView;}
}

2.3 编写Service

OrderService接口

public interface OrderService {List<Order> findAll();
}

OrderServiceImpl接口实现

@Service
public class OrderServiceImpl implements OrderService {@AutowiredOrderDao orderDao;@Overridepublic List<Order> findAll() {return orderDao.findAll();}
}

2.4 编写Dao

public interface OrderDao {@Select("select * from orders")List<Order> findAll();
}

2.5 编写页面order-list.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %><table id="dataList" class="table table-bordered table-striped table-hover dataTable"><thead><tr><th class="" style="padding-right: 0px;"><inputid="selall" type="checkbox" class="icheckbox_square-blue"></th><th class="sorting_asc">ID</th><th class="sorting">订单编号</th><th class="sorting">下单时间</th><th class="sorting">出行人数</th><th class="sorting">支付方式</th><th class="sorting">订单状态</th><th class="sorting">产品名称</th><th class="text-center">操作</th></tr></thead><tbody><c:forEach items="${orders}" var="order"><tr><td><input name="ids" type="checkbox"></td><td>${order.id}</td><td>${order.orderNum}</td><td><fmt:formatDate value="${order.orderTime}" pattern="yyyy-MM-dd HH:mm"></fmt:formatDate></td><td>${order.peopleCount}</td><%--支付宝 0微信 1其他 2--%><td>${order.payType==0?"支付宝":order.payType==1?"微信":"其他"}</td><td>${order.orderStatus==0?"未支付":"已支付"}</td><td>${order.product.productName}</td><td class="text-center"><button type="button" class="btn bg-olive btn-xs"onclick='location.href="${pageContext.request.contextPath}/pages/order-show.jsp"'>订单</button><button type="button" class="btn bg-olive btn-xs"onclick='location.href="${pageContext.request.contextPath}/pages/order-show.jsp"'>查看</button></td></tr></c:forEach></tbody></table>

3、添加订单功能-添加订单页面数据准备

3.1 页面入口

新增订单页面需要准备产品的数据列表(选择产品的下拉选要从数据库中查,本次就不用ajax了,直接加个addUI还是简单的controller先查询再跳转 )


3.2 编写Controller

//要用就注入 别婆婆妈妈的@AutowiredProductService productService;@RequestMapping("/addUI")public ModelAndView addUI(){List<Product> products = productService.findAll();ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("products",products);modelAndView.setViewName("order-add");return modelAndView;}

3.3 编写页面order-add.jsp

<div class="col-md-2 title">选择产品</div>
<div class="col-md-4 data"><select class="form-control select2" style="width: 100%" name="product.id"><c:forEach items="${ products }" var="p"><option value="${ p.id }" >${ p.productName }</option></c:forEach></select>
</div>

4、添加订单功能-保存订单数据

4.1 页面入口地址

4.2 编写Controller

    @RequestMapping("/save")public String save(Order order){orderService.save(order);return "redirect:/order/findAll";}

4.3 编写Service

OrderService接口

void save(Order order);

OrderServiceImpl接口实现

@Override
public void save(Order order) {orderDao.save(order);
}

4.4 编写Dao

@Insert("insert into orders values(order_seq.nextval,#{orderNum},#{orderTime},#{peopleCount},#{orderDesc},#{payType},#{orderStatus},#{product.id})")
void save(Order order);

ssm练习第二天_项目拆分moudle_基本增删改查_批量删除_一对一级联查询相关推荐

  1. 基于 abp vNext 和 .NET Core 开发博客项目 - 自定义仓储之增删改查

    基于 abp vNext 和 .NET Core 开发博客项目 - 自定义仓储之增删改查 转载于:https://github.com/Meowv/Blog 本篇说一下自定义仓储的实现方式,其实在ab ...

  2. Spring+SpringMVC+MyBatis明日方舟版人员信息管理系统前端页面代码前后端交互+SSM框架 管理员登录 游客登录 普通用户登录 人员的增删改查 信息更新 图片上传 分页查询)

    Spring+SpringMVC+MyBatis明日方舟版人员信息管理系统前端页面代码(前后端交互+SSM框架 管理员登录 游客登录 普通用户登录 人员的增删改查 信息更新 图片上传 分页查询 修改密 ...

  3. 第二章 第八节:列表的增删改查

    Python基础入门(全套保姆级教程) 第二章 第八节:列表的增删改查 列表的增删改查(*) 增加: 向列表中添加内容 1.append() 追加(*) 2.insert() 插入 3.extend( ...

  4. 使用eclipse创建基于SSM+Maven的小项目(简单的增删改查)

    使用eclipse创建基于SSM+Maven的增删改查 开发环境 效果图 数据库 项目如下: 项目结构及pom.xml 资源文件夹 db.properties mybatis-config.xml a ...

  5. 复习JavaWeb的小项目书籍信息的增删改查分页功能实现Java面试题Session和Cookie的基础概念生活【记录一个咸鱼大学生三个月的奋进生活】034

    记录一个咸鱼大学生三个月的奋进生活034 JavaWeb的增删改查分页功能实现 前期准备工作(数据库连接类和实体类) 数据库建立 数据库连接类(DBManager) 书籍信息的实体类(Book) 操作 ...

  6. python增删改查的框架_简单的Django框架增删改查操作

    Django之orm对MysqL数据库的增删改查操作简介: 利用Django中orm来查找数据库中的数据,对数据库进行增.删.改.查: 增:新增数据 # 操作数据库user表新增记录 # 方式1: u ...

  7. Java项目——模拟电话薄联系人增删改查

    该项目模拟了电话本记录联系人的业务功能,用来练习对数据库的增删改查等操作. 菜单类:Menu -- 用来封装主菜单和个选项的子菜单 Person类: Person--联系人的实体类 TelNoteRe ...

  8. linux系统中mysql表中能添加中文_数据库学习之数据库增删改查(另外解决Mysql在linux下不能插入中文的问题)(二)...

    数据库增删改查 增加 首先我们创建一个数据库user,然后创建一张表employee create table employee( id int primary key auto_increment, ...

  9. mybatis创建oracle用户,搭建Mybatis+Oracle项目以及简单的增删改查语法

    1.项目的相关路径 2.Mybatis的配置文件 3.Mybatis的工具类 /** * */ /** * @author lmy * */ package com.util; import java ...

最新文章

  1. RStudio环境或者ggsave函数保存生成的图像为指定文件格式(pdf、jpeg、tiff、png、svg、wmf)、指定图像宽度、高度、分辨率(width、height、dpi)
  2. Linux command: ps -ef |grep java
  3. 在moss页面出错时,显示详细的错误信息.
  4. 1143 Lowest Common Ancestor (30 分)【难度: 中 / 知识点: 最低公共祖先 未完成】
  5. 计组-控制器的功能和工作原理
  6. 轮距和轴距有什么区别_迈巴赫S级推“婚庆版”?轴距超3.3米 612马力配全时四驱...
  7. away3d创建基础view世界(基础 一)
  8. 学生学籍管理系统python_使用Python实现 学生学籍管理系统
  9. RoundedUITableView
  10. python 数学计算库_数学计算工具库-Numpy
  11. 190327每日一句
  12. SQL SERVER 2005 批量收缩数据库
  13. 错误:形状数与表记录数不匹配
  14. linux 关闭防火墙,关闭8081端口防火墙
  15. Endnote常见错误
  16. 实验02 使用网络模拟器Packet Tracer
  17. 【转】RTF格式分析
  18. python把数据生成图表_python从Oracle读取数据生成图表
  19. Mysql复习资料整理
  20. bat 直接运行vue项目命令

热门文章

  1. #教你从零制作拟辉光管时钟#
  2. C. Electrification(尺取)
  3. Android MTK三方算法集成学习
  4. 如何下载npm离线安装包
  5. 如何判断浏览器的类型?
  6. Spring Data JPA 4.方法定义规范
  7. 启发式算法求解混合整数线性优化问题—— 生产计划安排和资源分配
  8. 《弃子长安》第十五章 人断惊崖
  9. ellipse()用法
  10. 手机终于可以看到正在上映的院线电影了