ssm 网上商店实训 部分内容

一、 基础的配置文件
  1. 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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd
         http://www.springframework.org/schema/tx
        https://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/aop
        https://www.springframework.org/schema/aop/spring-aop.xsd">


        <!--1.先去读取数据库的配置文件, db.properties-->
           <context:property-placeholder location="classpath:db.properties"/>
            <!--2. [IOC]定义数据源 id class-->
        <bean  id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
                <!--2.2 设置数据源属性 name 数据源驱动-->
            <property name="driverClassName" value="${db.driverClassName}"/>
            <property name="url" value="${db.url}"/>
            <property name="username" value="${db.username}"/>
            <property name="password" value="${db.password}"/>
        </bean>
        <!--3.定义事物管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!--3.1 设置事物的属性-->
        <property name="dataSource" ref="dataSource"/>
    </bean>
        <!--4.开启事物的注解-->
    <tx:annotation-driven transaction-manager="transactionManager"/>
<!--    5定义Mybatis 的控制翻转  降低耦合性 实例化 new的过程-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

        <property name="dataSource" ref="dataSource"/>
            <!-- 文件的位置 -->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
        <!--  配置文件映射-->
        <property name="mapperLocations" value="classpath:mapper/*.xml"></property>
        <!--实体类别名配置-->
        <property name="typeAliasesPackage" value="cn.javabs.phonemall.entity"/>
    </bean>



<!--    6定义Mybatis 映射扫描信息-->
    <bean  id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
                <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
            <property name="basePackage" value="cn.javabs.phonemall.mapper"/>
    </bean>
<!--    7. 扫描service 层 Mapper 层-->
    <context:component-scan base-package="cn.javabs.phonemall"/>
</beans>

2.db.properties

# 数据库 的链接信息参数配置 需要更改数据库名称和密码

db.driverClassName=com.mysql.jdbc.Driver

db.url=jdbc:mysql://127.0.0.1:3306/phonemall
db.username=root

db.password=root
  1. log4j.properties
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
  1. log4j2.properties
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
  1. mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
  1. springmvc-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       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
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        https://www.springframework.org/schema/mvc/spring-mvc.xsd
          http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">
<!--    1.开启springmvc注解扫描-->
    <context:component-scan base-package="cn.javabs.phonemall.controller"/>

<!--    2. 开启MVC注解驱动-->
    <mvc:annotation-driven/>
<!--    3.配置静态资源-->
<!--    后台页面所需静态资源-->
    <mvc:resources mapping="/resource/js/**" location="/resource/js"/>
    <mvc:resources mapping="/resource/css/**" location="/resource/css/"/>
    <mvc:resources mapping="/resource/images/**" location="/resource/images/"/>
    <mvc:resources mapping="/resource/fonts/**" location="/resource/fonts/"/>
    <!--前台资源解析器  -->
    <mvc:resources mapping="/css/**" location="/css/"/>
    <mvc:resources mapping="/fonts/**" location="/fonts/"/>
<!--    <mvc:resources mapping="/pic/**" location="/pic/"/>-->
    <mvc:resources mapping="/images/**" location="/images/"/>
    <mvc:resources mapping="/js/**" location="/js/"/>
    <mvc:resources mapping="/layer/**" location="/layer/"/>

    <!--    4.配置视图解析器-->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value=""/>
        <property name="suffix" value=".jsp"/>
    </bean>
<!--    5.配置拦截器-->
<!--    <mvc:interceptors>-->
<!--        <mvc:interceptor>-->
<!--            <mvc:mapping path="/admin/**/"/>-->
<!--            <bean class="cn.javabs.phonemall.controller.AdminInterceptor"></bean>-->
<!--        </mvc:interceptor>-->
<!--    </mvc:interceptors>-->

<!--    6.配置多媒体文件解析器 用于文件的上传解析器-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--        设置文件上传的大小,最大允许上传尺寸为5MB  1024*1024*10/2= 1MB-->

    <property name="maxUploadSizePerFile" value="5242880"/>
        <property name="defaultEncoding" value="UTF-8"/>
    </bean>
</beans>
  1. web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

  <!--    1.spring 的监听器-->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <!--    2.spring mvc  的前端控制器-->
  <servlet>
    <servlet-name>sprinmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

    <!--        设置初始化值-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc-cofig.xml</param-value>
    </init-param>
    <!--        程序一启动就加载本配置文件-->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>sprinmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  <!--    3.核心过滤器-->
  <filter>
    <filter-name>CharacterEndingFilter</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>CharacterEndingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>
  1. 在配置文件之前必须先进行到坐标 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>org.example</groupId>
  <artifactId>phoneMail_SSM</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>phoneMail_SSM 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>
    <!--1.spring框架的依赖-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>
    <!--AOP 辅助依赖-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>
    <!-- spring的依赖Acpests-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>
    <!--Spring  的test-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>
    <!--2.springmvc框架的依赖-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>
    <!--3.mybatis框架的依赖  核心依赖  辅助依赖-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.4</version>
    </dependency>


    <!--1.mybatis-spring框架整合的依赖-->

    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>2.0.1</version>
    </dependency>
    <!-- 导入logj4 依赖-->
    <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.12.1</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>2.12.1</version>
    </dependency>
    <!-- 日志包   -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.25</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.25</version>
    </dependency>
    <dependency>
      <groupId>ognl</groupId>
      <artifactId>ognl</artifactId>
      <version>3.1.12</version>
    </dependency>

    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.2</version>
    </dependency>
    <!--5.mybati数据库的依赖-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.47</version>
    </dependency>
    <!-- 6.druid 数据库连接的依赖-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.14</version>
    </dependency>
    <!-- 7. mybatis 分页pagegelper 的依赖-->
    <dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper</artifactId>
      <version>5.1.10</version>
    </dependency>
    <!--8. Servlet 4.0 依赖-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
    </dependency>
    <!-- jstl 依赖-->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.taglibs</groupId>
      <artifactId>taglibs-standard-spec</artifactId>
      <version>1.2.5</version>
    </dependency>
    <dependency>
      <groupId>org.apache.taglibs</groupId>
      <artifactId>taglibs-standard-impl</artifactId>
      <version>1.2.5</version>
    </dependency>

    <!--工具类-->
    <dependency>
      <groupId>com.alipay.sdk</groupId>
      <artifactId>alipay-sdk-java</artifactId>
      <version>3.3.49.ALL</version> </dependency>
    <!--    </dependency>-->


    <!--    上传下载-->
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.1</version>
    </dependency>
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.4</version>

    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.6</version>
    </dependency>
    <!-- 单元测试-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13</version>
      <scope>test</scope>
    </dependency>

  </dependencies>

</project>

二 、 先是 实现类 —— service—— service实现体——mapper——mapper.xml—— 控制器 连接页面代码的枢纽
  1. 分类
package cn.javabs.phonemall.entity;

import java.io.Serializable;

/**
 * 分类的实体类
 */
public class Category implements Serializable {
    private Integer cid;
    private String cname;
// alt + insert  生成 有参 无参 getter和setter 方法 toString 方法
    @Override
    public String toString() {
        return "Category{" +
                "cid=" + cid +
                ", cname='" + cname + '\'' +
                '}';
    }

    public Integer getCid() {
        return cid;
    }

    public void setCid(Integer cid) {
        this.cid = cid;
    }

    public String getCname() {
        return cname;
    }

    public void setCname(String cname) {
        this.cname = cname;
    }

    public Category() {
        super();
    }

    public Category(Integer cid, String cname) {
        this.cid = cid;
        this.cname = cname;
    }
}

package cn.javabs.phonemall.mapper;

import cn.javabs.phonemall.entity.Category;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository("categoryMapper")
public interface CategoryMapper {
    /**
     * 是否有名字 全部查询 和模胡查询
     * @param cname
     * @return
     */
    List findAll(String cname);

    /**
     * 根据   cid 模胡查询
     * @param cid
     * @return
     */
    Category findById(Integer cid);

    /**
     * 添加分类
     * @param category
     * @return
     */
    int add(Category category);

    /**
     * 删除分类
     * @param cid
     * @return
     */
    int del(Integer cid);

    /**
     * 修改分类
     * @param category
     * @return
     */
    int update(Category category);
}

package cn.javabs.phonemall.mapper;

import cn.javabs.phonemall.entity.Category;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository("categoryMapper")
public interface CategoryMapper {
    /**
     * 是否有名字 全部查询 和模胡查询
     * @param cname
     * @return
     */
    List findAll(String cname);

    /**
     * 根据   cid 模胡查询
     * @param cid
     * @return
     */
    Category findById(Integer cid);

    /**
     * 添加分类
     * @param category
     * @return
     */
    int add(Category category);

    /**
     * 删除分类
     * @param cid
     * @return
     */
    int del(Integer cid);

    /**
     * 修改分类
     * @param category
     * @return
     */
    int update(Category category);
}


```java
package cn.javabs.phonemall.service.impl;

import cn.javabs.phonemall.entity.Category;
import cn.javabs.phonemall.mapper.CategoryMapper;
import cn.javabs.phonemall.service.CategoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service("categoryService")// 开启service方法
@Transactional //开启方法
public class CategoryServiceImpl implements CategoryService {

    @Autowired
    @Qualifier("categoryMapper")
   private CategoryMapper categoryMapper;
    /**
     * 根据用户 是否 有名字 进行全部查询和模胡查询
     *
     * @param cname
     * @return
     */
    @Override
    public List<Category> finAllCategory(String cname) {
        List list = null;
        System.out.println("cname:"+cname);
        list = categoryMapper.findAll(cname);
        System.out.println("cnmae:"+cname);
        return list;
    }

    /**
     * 根据编号获取分类
     *
     * @param cid
     * @return
     */
    @Override
    public Category findCategoryById(Integer cid) {
        Category category =categoryMapper.findById(cid);
    return category;
    }

    /**
     * 添加分类
     *
     * @param category
     * @return
     */
    @Override
    public int addCategory(Category category) {
       int number = categoryMapper.add(category);
        return number;
    }

    /**
     * 删除分类
     *
     * @param cid
     * @return
     */
    @Override
    public int delCategory(Integer cid) {
        int number = categoryMapper.del(cid);
        return number;
    }

    /**
     * 修改分类
     *
     * @param category
     * @return
     */
    @Override
    public int editCategory(Category category) {
     int number =  categoryMapper.update(category);
        return number;
    }
}


```java
package cn.javabs.phonemall.service;

import cn.javabs.phonemall.entity.Category;

import java.util.List;


public interface CategoryService {

    /**
     *  根据用户 是否 有名字 进行全部查询和模胡查询
     * @param cname
     * @return
     */
    List<Category>  finAllCategory(String cname);

    /**
     * 根据编号获取分类
     * @param cid
     * @return
     */
    Category findCategoryById(Integer cid);

    /**
     * 添加分类
     * @param category
     * @return
     */
    int addCategory(Category category);

    /**
     *  删除分类
     * @param cid
     * @return
     */
    int delCategory(Integer cid);

    /**
     * 修改分类
     * @param category
     * @return
     */
    int editCategory(Category category);
}

<?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 表示命名空间 -->
<mapper namespace="cn.javabs.phonemall.mapper.CategoryMapper">
    <!-- SQL语句 -->
    <!--    查询全部以及模胡查询-->
    <select id="findAll" parameterType="String" resultType="category">
        <!--模胡查询-->
        <if test="cname != null">
            select * from  category where  cname like concat('%',#{cname},'%') order  by cid desc
        </if>
        <!-- 查询全部并以倒序的方式培训-->
        <if test="cname == null">
            select  * from category order  by cid desc
        </if>
    </select>
    <!--    根据cid 进行查询分类-->
    <select id="findById" parameterType="Integer" resultType="Category">
        select * from category where cid = #{cid}
    </select>

    <!--    添加-->
    <insert id="add" parameterType="category">
        insert  into category
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="cname != null">
                cname,
            </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="cname != null">
                #{cname},
            </if>
        </trim>

    </insert>
    <!--    删除-->
    <delete id="del" parameterType="Integer">
        delete  from  category where cid = #{cid}
    </delete>
    <!--    修改-->
    <update id="update" parameterType="category">
        update  category set  cname =#{cname} where  cid =#{cid}
    </update>
</mapper>
  1. 商品
package cn.javabs.phonemall.entity;

/**
 * 商品类
 */
public class Goods {
    private Integer gid;
    private String gname;
    private String images1;
    private String images2;

    private Double price;
    private String intro; //简绍
    private Integer stock; // 库存
    private Integer categoryId; //分类ID
    private Category category;

    private boolean topScroll;// 条幅推荐
    private boolean toplarge;// 大图推荐

    public Integer getGid() {
        return gid;
    }

    public void setGid(Integer gid) {
        this.gid = gid;
    }

    public String getGname() {
        return gname;
    }

    public void setGname(String gname) {
        this.gname = gname;
    }

    public String getImages1() {
        return images1;
    }

    public void setImages1(String images1) {
        this.images1 = images1;
    }

    public String getImages2() {
        return images2;
    }

    public void setImages2(String images2) {
        this.images2 = images2;
    }

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }

    public String getIntro() {
        return intro;
    }

    public void setIntro(String intro) {
        this.intro = intro;
    }

    public Integer getStock() {
        return stock;
    }

    public void setStock(Integer stock) {
        this.stock = stock;
    }

    public Integer getCategoryId() {
        return categoryId;
    }

    public void setCategoryId(Integer categoryId) {
        this.categoryId = categoryId;
    }

    public Category getCategory() {
        return category;
    }

    public void setCategory(Category category) {
        this.category = category;
    }

    public boolean isTopScroll() {
        return topScroll;
    }

    public void setTopScroll(boolean topScroll) {
        this.topScroll = topScroll;
    }

    public boolean isToplarge() {
        return toplarge;
    }

    public void setToplarge(boolean toplarge) {
        this.toplarge = toplarge;
    }

    public boolean isTopSmall() {
        return topSmall;
    }

    public void setTopSmall(boolean topSmall) {
        this.topSmall = topSmall;
    }

    private boolean topSmall;// 小图推荐
    @Override
    public String toString() {
        return "Goods{" +
                "gid=" + gid +
                ", gname='" + gname + '\'' +
                ", images1='" + images1 + '\'' +
                ", images2='" + images2 + '\'' +
                ", price=" + price +
                ", intro='" + intro + '\'' +
                ", stock=" + stock +
                ", categoryId=" + categoryId +
                ", category=" + category +
                ", topScroll=" + topScroll +
                ", toplarge=" + toplarge +
                ", topSmall=" + topSmall +
                '}';
    }

    public Goods() {
        super();
    }

    public Goods(Integer gid, String gname, String images1, String images2, Double price, String intro, Integer stock, Integer categoryId, Category category, boolean topScroll, boolean toplarge, boolean topSmall) {
        this.gid = gid;
        this.gname = gname;
        this.images1 = images1;
        this.images2 = images2;
        this.price = price;
        this.intro = intro;
        this.stock = stock;
        this.categoryId = categoryId;
        this.category = category;
        this.topScroll = topScroll;
        this.toplarge = toplarge;
        this.topSmall = topSmall;
    }







}

package cn.javabs.phonemall.mapper;

import cn.javabs.phonemall.entity.Goods;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 商品的控制器
 */
@Repository("goodsMapper")
public interface GoodsMapper {

    List<Goods> findName(String gname);

    List<Goods> find(Integer categoryId);



//    List<Goods> find(@Param("starIndex") int startIndex,
//                     @Param("pageSize") int pageSize);

//    @Select("select count(*) from goods where categoryId =#{categoryId}")
    int findTotal(Integer categoryId);

//    @Select("select count(*) from goods")
//    int findTotal();

    @Select("select * from  goods where gid=#{gid}")
    Goods findById(Integer gid);

    int add(Goods goods);

    int del(Integer gid);

    int update(Goods goods);
}

package cn.javabs.phonemall.service.impl;

import cn.javabs.phonemall.entity.Category;
import cn.javabs.phonemall.entity.Goods;
import cn.javabs.phonemall.entity.Recommend;
import cn.javabs.phonemall.mapper.CategoryMapper;
import cn.javabs.phonemall.mapper.GoodsMapper;
import cn.javabs.phonemall.service.GoodsService;
import cn.javabs.phonemall.service.RecommendService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

@Service("goodsService")
@Transactional
public class GoodsServiceImpl implements GoodsService {

    @Autowired
    @Qualifier("goodsMapper")
    private GoodsMapper goodsMapper;
    @Autowired
    @Qualifier("categoryMapper")
    private CategoryMapper categoryMapper;

    @Autowired
    @Qualifier("recommendService")
    private RecommendService recommendService;
    /**
     * 迷糊查询商品
     *
     * @param gname
     * @return
     */
    @Override
    public List<Goods> findGoodsByLikeNMae(String gname) {
        List<Goods> goodsList = goodsMapper.findName(gname);
        return goodsList;
    }

    /**
     * 通过分类查询商品
     *
     * @param categoryId
     * @return
     */
    @Override
    public List<Goods> findAllGoods(Integer categoryId, Byte status) {
        if (status == 0) {
            return goodsMapper.find(categoryId);
        }
        List<Recommend> recommendList = recommendService.findAll(status);
        // 判断集合是否为空
        if (recommendList != null && recommendList.size()>0){
            List<Goods> goodsList = new ArrayList<>();
            // 从集合中 循环取出 每一项
            for (Recommend recommend:recommendList){
                // 获取商品id
                Integer goodsId = recommend.getGoodsId();
                // 通过商品id 获取商品对象
                Goods goods = goodsMapper.findById(goodsId);
                // 把商品放入 集合中去
                goodsList.add(goods);
            }
            return goodsList;
        }
        return null;
    }

//        List<Goods> goodsList = null;
//        if (categoryId == null) {
//            goodsList = goodsMapper.find(null, startIndex, pageSize);
//        } else {
//            goodsList = goodsMapper.find(categoryId, startIndex, pageSize);
//      }
//            return goodsList;
//        }

    /**
     * 通过分类获取商品的总条数
     *
     * @param categoryId
     */
    @Override
    public int findTotalRecords(Integer categoryId) {
        return  goodsMapper.findTotal(categoryId) ;
    }

    /**
     * 通过id进行查询
     *
     * @param gid
     * @return
     */
    @Override
    public Goods findGoodsById(Integer gid) {
      Goods goods = goodsMapper.findById(gid);
        System.out.println("goods="+goods);
      Integer categoryId =goods.getCategoryId();
       Category category = categoryMapper.findById(categoryId);
        System.out.println("category:"+category);
        goods.setCategory(category);
        return goods;
    }

    /**
     * 添加商品
     *
     * @param goods
     * @return
     */
    @Override
    public int addGoods(Goods goods) {
        return  goodsMapper.add(goods);
    }

    /**
     * 删除商品
     *
     * @param gid
     * @return
     */
    @Override
    public int delGoods(Integer gid) {

        return goodsMapper.del(gid);
    }

    /**
     * 修改商品
     *
     * @param goods
     * @return
     */
    @Override
    public int editGoods(Goods goods) {
        return goodsMapper.update(goods);
    }
}

package cn.javabs.phonemall.service;

import cn.javabs.phonemall.entity.Goods;

import java.util.List;

public interface GoodsService {

    /**
     * 获取商品列表
     * @param startIndex
     * @param pageSize
     * @return
     */
//   List<Goods> findsAllGoods(int startIndex,int pageSize);

    /**
     * 获取商品总条数
     * @return
     */
//   int findTotalRecords();

    /**
     * 迷糊查询商品
     * @param gname
     * @return
     */
   List<Goods> findGoodsByLikeNMae(String gname);

    /**
     * 通过分类查询商品
     * @param categoryId
     * @return
     */
   List<Goods> findAllGoods(Integer categoryId, Byte status);

    /**
     * 通过分类获取商品的总条数
     */
    int findTotalRecords(Integer categoryId);

    /**
     * 通过id进行查询
     * @param gid
     * @return
     */
    Goods findGoodsById(Integer gid);

    /**
     * 添加商品
     * @param goods
     * @return
     */
    int addGoods(Goods goods);

    /**
     * 删除商品
     * @param gid
     * @return
     */
    int delGoods(Integer gid);

    /**
     * 修改商品
     * @param goods
     * @return
     */
    int editGoods(Goods goods);
}

<?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 表示命名空间 -->
<mapper namespace="cn.javabs.phonemall.mapper.GoodsMapper">

    <!-- SQL语句 -->
    <select id="findName" parameterType="String" resultType="Goods">
        <if test="gname == null">
            select  * from goods order gid desc
        </if>
        <if test="gname != null">
            select * from  goods where  gname like concat('%'#{gname}'%') order  by gid desc
        </if>
    </select>

    <select id="find" parameterType="int" resultType="Goods">
        select * from goods
     <where>
         <!--分类分页插查询-->
         <if test=" categoryId == null">

         </if>
         <if test="status == 0">
             status = #{status}
         </if>
         <!-- 分类分页查询-->
         <if test="categoryId != null">
             categoryId = #{categoryId}
         </if>
     </where>
     </select>


    <select id="findTotal" parameterType="int" resultType="int">
        select count (*) from goods
        <!--查询总条数 -->
        <if test="categoryId == null">

        </if>
        <!--查询该分类的总条数-->
        <if test="categoryId != null">
            categoryId = #{categoryId}
        </if>
    </select>

    <!-- 添加商品-->
    <insert id="add" parameterType="goods">
        insert  into goods (gname,images1,images2,price,intro,stock,categoryId)
        values (#{gname},#{images1},#{images2},#{price},#{intro},#{stock},#{categoryId})
<!--        insert into goods-->
<!--        <trim prefix="(" suffix=")" suffixOverrides=",">-->
<!--            <if test="gname != null">-->
<!--                gname,-->
<!--            </if>-->
<!--            <if test="images1 != null">-->
<!--                images1,-->
<!--            </if>-->
<!--            <if test="price != null">-->
<!--                price,-->
<!--            </if>-->
<!--        </trim>-->
<!--        <trim prefix="values (" suffix=")" suffixOverrides=",">-->
<!--            <if test="gname != null">-->
<!--                #{gname},-->
<!--            </if>-->
<!--            <if test=" images1 != null">-->
<!--                #{images1},-->
<!--            </if>-->
<!--            <if test="images2 != null">-->
<!--                images2-->
<!--            </if>-->
<!--            <if test="price != null">-->
<!--                price,-->
<!--            </if>-->

<!--        </trim>-->
    </insert>
        <!--删除商品-->
    <delete id="del" parameterType="int">
        delete  from  goods where  gid = #{gid}
    </delete>

    <!--修改商品-->
    <update id="update" parameterType="goods">
--         update goods set gname=#{gname},images1=#{images1},images2=#{images2},price=#{price},intro=#[intro},stock=#{stock},categoryId=#{categoryId}
--         where  gid =#{gid}
        update goods
        <trim suffixOverrides=",">
            <set>
                <if test="gname != null">
                    gname=#{gname},
                </if>
                <if test="images1 != null">
                    images1=#{images1},
                </if>
                <if test="images2 != null">
                    images2=#{images2},
                </if>
                <if test="price != null ">
                    price=#{price},

                    <if test="intro != null">
                        intro=#[intro},
                    </if>
                </if>
                <if test="stock != null">
                    stock=#{stock},
                </if>


                <if test="categoryId != null">
                    categoryId=#{categoryId}
                </if>
                where  gid =#{gid}
            </set>
        </trim>
    </update>
</mapper>
  1. 订单项
package cn.javabs.phonemall.entity;

/**
 * 订单项
 */
public class orderItem {

    private Integer id;   //订单项编号
    private Double price;//  每一项的小计
    private Integer amount;// 每一项的数量小计
    private Integer orderId;// 订单编号
    private Integer goodsIs;// 商品的id
    private double total;// 总价格
    private Goods goods;// 商品对象

    public orderItem() {
        super();
    }

    @Override
    public String toString() {
        return "orderItem{" +
                "id=" + id +
                ", price=" + price +
                ", amount=" + amount +
                ", orderId=" + orderId +
                ", goodsIs=" + goodsIs +
                ", total=" + total +
                ", goods=" + goods +
                '}';
    }

    public Integer getId() {
        return id;
    }

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

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }

    public Integer getAmount() {
        return amount;
    }

    public void setAmount(Integer amount) {
        this.amount = amount;
    }

    public Integer getOrderId() {
        return orderId;
    }

    public void setOrderId(Integer orderId) {
        this.orderId = orderId;
    }

    public Integer getGoodsIs() {
        return goodsIs;
    }

    public void setGoodsIs(Integer goodsIs) {
        this.goodsIs = goodsIs;
    }

    public double getTotal() {
        return total;
    }

    public void setTotal(double total) {
        this.total = total;
    }

    public Goods getGoods() {
        return goods;
    }

    public void setGoods(Goods goods) {
        this.goods = goods;
    }

    public orderItem(Integer id, Double price, Integer amount, Integer orderId, Integer goodsIs, double total, Goods goods) {
        this.id = id;
        this.price = price;
        this.amount = amount;
        this.orderId = orderId;
        this.goodsIs = goodsIs;
        this.total = total;
        this.goods = goods;
    }
}

package cn.javabs.phonemall.mapper;

import cn.javabs.phonemall.entity.orderItem;
import com.alipay.api.domain.OrderItem;

public interface OrderItemMapper {


    int deleteByPrimaryKey(Integer id);

    int insert(orderItem record);

    int insertSelective(OrderItem record);


    OrderItem selectByPrimaryKey(Integer id);



    int updateByPrimaryKeySelective(OrderItem record);

    int updateByPrimaryKey(OrderItem record);
}
package cn.javabs.phonemall.service.impl;


import cn.javabs.phonemall.entity.Goods;
import cn.javabs.phonemall.entity.Orders;
import cn.javabs.phonemall.entity.Users;
import cn.javabs.phonemall.entity.orderItem;
import cn.javabs.phonemall.mapper.OrderItemMapper;
import cn.javabs.phonemall.mapper.OrdersMapper;
import cn.javabs.phonemall.service.GoodsService;
import cn.javabs.phonemall.service.OrdersService;
import cn.javabs.phonemall.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Service("ordesService")
@Transactional
public class OrdersServiceImpl implements OrdersService {
    @Autowired
    @Qualifier("ordersMapper")
    private OrdersMapper ordersMapper;

    @Autowired
    @Qualifier("goodsService")
    private GoodsService goodsService;

    @Autowired
    @Qualifier("userService")
    private UserService userService;

    @Autowired
    @Qualifier("orderItemMapper")
    private OrderItemMapper orderItemMapper;
    /**
     * 查询所有订单
     *
     * @param status
     * @return
     */
    @Override
    public List<Orders> findAllOrders(Integer status) {
        List<Orders> ordersList=ordersMapper.findAllByStatuts(status);
        for (Orders order: ordersList){
            // 获取订单的编号
            Integer orderId = order.getOid();
            // 调用 获取所有订单 方法 返回 所有订单订单项
            List<orderItem> orderItemList = this.findAllItem(orderId);
            // 将所有的订单项 放入到订单中
            order.setorderItems(orderItemList);

            // 获取用户编号
            Integer userId  =  order.getUserid();
            // 根据用户编号  获取 用户对象
            Users user = userService.findUserById(userId);
            // 将用户对象封装订单中
            order.setUsers(user);

        }
        return ordersList;
    }

    /**
     * 根据 订单编号查询订单信息
     *
     * @param orderId
     * @return
     */
    @Override
    public Orders findOrdersById(Integer orderId) {
        Orders orders=  ordersMapper.selectByPrimaryKey(orderId);

        return orders;
    }

    /**
     * 获取某用户的所有订单
     *
     * @param userId
     * @return
     */
    @Override
    public List<Orders> findOrdersByUserId(Integer userId) {
        List<Orders>  Orderslist = ordersMapper.getOrdersByUserId(userId);
        return null;
    }

    /**
     * 添加订单
     *
     * @param goods
     * @return
     */
    @Override
    public Orders addOrder(Goods goods) {
        ArrayList<orderItem> orderItems = new ArrayList<>();
        orderItem o = addItem(goods);
        orderItems.add(o);
        Orders orders = new Orders();
        orders.setorderItems(orderItems);
        return orders;

    }

    @Override
    public Orders find(int number) {
        return ordersMapper.selectByPrimaryKey(number);
    }


    /**
     * 保存订单
     *
     * @param orders
     * @return
     */
    @Override
    public int saveOrder(Orders orders) {
        orders.setStatus(Orders.STATUS_UPAY);  // 未付款
        // 设置下单时间
        Date date = new Date(); // 系统时间
        orders.setSystime(date); // 时间戳
        ordersMapper.insert(orders);
        // 获取订单的编号
        Integer orderId = orders.getOid();
        // 获取订单项
        List<orderItem>  orderItem = orders.getorderItems();
        for (cn.javabs.phonemall.entity.orderItem item: orderItem){
            item.setOrderId(orderId);
            orderItemMapper.insert(item);
        }
        return 0;
    }


    /**
     * 创建订单项
     */
    public orderItem addItem(Goods goods){
        orderItem item = new orderItem();
        item.setGoodsIs(goods.getGid());
        item.setAmount(1);
        item.setPrice(goods.getPrice());
        item.setTotal(goods.getPrice());
        Goods good = goodsService.findGoodsById(goods.getGid());
        item.setGoods(goods);
        return item;
    }

    /**
     * 获取订单项
     */

    public  List<orderItem> findAllItem(int orderId){
        List<orderItem> orderItemList =  ordersMapper.findorderItemList();
        for (orderItem item : orderItemList){
            Integer gid = item.getGoodsIs();
            Goods goods = goodsService.findGoodsById(gid);
            item.setGoods(goods);
        }
        return  orderItemList;
    }
}

package cn.javabs.phonemall.service;

import cn.javabs.phonemall.entity.Goods;
import cn.javabs.phonemall.entity.Orders;

import java.util.List;

public interface OrdersService {

    /**
     * 查询所有订单
     * @param status
     * @return
     */
    List<Orders> findAllOrders(Integer status);

    /**
     * 根据 订单编号查询订单信息
     * @param oid
     * @return
     */
    Orders findOrdersById(Integer oid);

    /**
     * 获取某用户的所有订单
     * @param userId
     * @return
     */
    List<Orders> findOrdersByUserId(Integer userId);

    /**
     * 添加订单
     * @param goods
     * @return
     */
    Orders addOrder(Goods goods);

    Orders find(int number);

    /**
     * 保存订单
     * @param orders
     * @return
     */
    int saveOrder(Orders orders);
}

<?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.javabs.phonemall.mapper.OrderItemMapper">
  <resultMap id="BaseResultMap" type="cn.javabs.phonemall.entity.orderItem">
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="price" jdbcType="DOUBLE" property="price" />
    <result column="amount" jdbcType="INTEGER" property="amount" />
    <result column="orderId" jdbcType="INTEGER" property="orderid" />
    <result column="goodsId" jdbcType="INTEGER" property="goodsid" />
  </resultMap>
  <sql id="Update_By_Example_Where_Clause">
    <where>
      <foreach collection="example.oredCriteria" item="criteria" separator="or">
        <if test="criteria.valid">
          <trim prefix="(" prefixOverrides="and" suffix=")">
            <foreach collection="criteria.criteria" item="criterion">
              <choose>
                <when test="criterion.noValue">
                  and ${criterion.condition}
                </when>
                <when test="criterion.singleValue">
                  and ${criterion.condition} #{criterion.value}
                </when>
                <when test="criterion.betweenValue">
                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
                </when>
                <when test="criterion.listValue">
                  and ${criterion.condition}
                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
                    #{listItem}
                  </foreach>
                </when>
              </choose>
            </foreach>
          </trim>
        </if>
      </foreach>
    </where>
  </sql>

  <insert id="insert" keyColumn="id" keyProperty="id" parameterType="orderItem" useGeneratedKeys="true">
    insert into ordersitem (price, amount, orderId, 
      goodsId)
    values (#{price,jdbcType=DOUBLE}, #{amount,jdbcType=INTEGER}, #{orderid,jdbcType=INTEGER}, 
      #{goodsid,jdbcType=INTEGER})
  </insert>
  <insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="orderItem" useGeneratedKeys="true">
    insert into ordersitem
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="price != null">
        price,
      </if>
      <if test="amount != null">
        amount,
      </if>
      <if test="orderid != null">
        orderId,
      </if>
      <if test="goodsid != null">
        goodsId,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
      <if test="price != null">
        #{price,jdbcType=DOUBLE},
      </if>
      <if test="amount != null">
        #{amount,jdbcType=INTEGER},
      </if>
      <if test="orderid != null">
        #{orderid,jdbcType=INTEGER},
      </if>
      <if test="goodsid != null">
        #{goodsid,jdbcType=INTEGER},
      </if>
    </trim>
  </insert>

  <update id="updateByExampleSelective" parameterType="map">
    update ordersitem
    <set>
      <if test="record.id != null">
        id = #{record.id,jdbcType=INTEGER},
      </if>
      <if test="record.price != null">
        price = #{record.price,jdbcType=DOUBLE},
      </if>
      <if test="record.amount != null">
        amount = #{record.amount,jdbcType=INTEGER},
      </if>
      <if test="record.orderid != null">
        orderId = #{record.orderid,jdbcType=INTEGER},
      </if>
      <if test="record.goodsid != null">
        goodsId = #{record.goodsid,jdbcType=INTEGER},
      </if>
    </set>
    <if test="_parameter != null">
      <include refid="Update_By_Example_Where_Clause" />
    </if>
  </update>

  <update id="updateByExample" parameterType="map">
    update ordersitem
    set id = #{record.id,jdbcType=INTEGER},
      price = #{record.price,jdbcType=DOUBLE},
      amount = #{record.amount,jdbcType=INTEGER},
      orderId = #{record.orderid,jdbcType=INTEGER},
      goodsId = #{record.goodsid,jdbcType=INTEGER}
    <if test="_parameter != null">
      <include refid="Update_By_Example_Where_Clause" />
    </if>
  </update>

  <update id="updateByPrimaryKeySelective" parameterType="orderItem">
    update ordersitem
    <set>
      <if test="price != null">
        price = #{price,jdbcType=DOUBLE},
      </if>
      <if test="amount != null">
        amount = #{amount,jdbcType=INTEGER},
      </if>
      <if test="orderid != null">
        orderId = #{orderid,jdbcType=INTEGER},
      </if>
      <if test="goodsid != null">
        goodsId = #{goodsid,jdbcType=INTEGER},
      </if>
    </set>
    where id = #{id,jdbcType=INTEGER}
  </update>

  <update id="updateByPrimaryKey" parameterType="orderItem">
    update ordersitem
    set price = #{price,jdbcType=DOUBLE},
      amount = #{amount,jdbcType=INTEGER},
      orderId = #{orderid,jdbcType=INTEGER},
      goodsId = #{goodsid,jdbcType=INTEGER}
    where id = #{id,jdbcType=INTEGER}
  </update>

</mapper>

4 订单

package cn.javabs.phonemall.entity;


import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
 * orders
 * @author 
 */
public class Orders implements Serializable{
    // 订单状态
     public  static  final  int STATUS_UPAY=1;// 未付款
     public  static  final  int STATUS_PAYED=2;// 已付款
     public  static  final  int STATUS_SEND=3;// 已发货
     public  static  final  int STATUS_FINISH=4;// 已完成

    //支付方式
    public static  final  int PAYTYPE_WECHAT = 1 ;//微笑支付
    public static  final  int PAYTYPE_ALIPAY = 2 ;//支付宝支付
    public static  final  int PAYTYPE_OFFINE = 3 ;//货到付款



    private Integer oid; //订单表
    private Integer total;//总价格
    private Integer amount;//商品总价

    private Integer status;// 订单状态(1未付款/2已付款/ 3已发货/ 4已完成)

    private Integer paytype;//支付方式(1微信/2支付宝/3货到付款)

    private String realname;//收货人

    private String phone;//收货电话

    private String address; //收货地址

    private Date systime; //下单时间

    private Integer userid; //下单用户

    private Users users;  // 用户对象

    public Integer getOid() {
        return oid;
    }

    public void setOid(Integer oid) {
        this.oid = oid;
    }

    public Integer getTotal() {
        return total;
    }

    public void setTotal(Integer total) {
        this.total = total;
    }

    public Integer getAmount() {
        return amount;
    }

    public void setAmount(Integer amount) {
        this.amount = amount;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public Integer getPaytype() {
        return paytype;
    }

    public void setPaytype(Integer paytype) {
        this.paytype = paytype;
    }

    public String getRealname() {
        return realname;
    }

    /**
     *  设置下单用户
     * @param realname
     */
    public void setRealname(String realname) {
        this.realname = realname==null?null:realname.trim();//trim() 去掉字符串两端的空格

    }

    public String getPhone() {
        return phone;
    }

    /**
     * 设置客户电话
     * @param phone
     */
    public void setPhone(String phone) {
        this.phone = phone==null?null:phone.trim();
    }

    public String getAddress() {
        return address;
    }

    /**
     * 设置客户地址
     * @param address
     */
    public void setAddress(String address) {
        this.address = address==null?null:address.trim();
    }

    public Date getSystime() {
        return systime;
    }

    public void setSystime(Date systime) {
        this.systime = systime;
    }

    public Integer getUserid() {
        return userid;
    }

    public void setUserid(Integer userid) {
        this.userid = userid;
    }

    public Users getUsers() {
        return users;
    }

    public void setUsers(Users users) {
        this.users = users;
    }

    public List<orderItem> getorderItems() {
        return orderItems;
    }

    public void setorderItems(List<orderItem> orderItems) {
        this.orderItems = orderItems;
    }

    private List<orderItem> orderItems; // 订单项




    }

package cn.javabs.phonemall.mapper;

import cn.javabs.phonemall.entity.Orders;
import cn.javabs.phonemall.entity.orderItem;
import org.apache.ibatis.annotations.Select;

import java.util.List;

//import cn.javabs.phonemall.entity.OrdersExample;

public interface OrdersMapper {
//    long countByExample(OrdersExample example);

//    int deleteByExample(OrdersExample example);

    int deleteByPrimaryKey(Integer oid);

    int insert(Orders record);

    int insertSelective(Orders record);

//    List<Orders> selectByExample(OrdersExample example);

    Orders selectByPrimaryKey(Integer oid);

//    int updateByExampleSelective(@Param("record") Orders record, @Param("example") OrdersExample example);

//    int updateByExample(@Param("record") Orders record, @Param("example") OrdersExample example);

    int updateByPrimaryKeySelective(Orders record);

    int updateByPrimaryKey(Orders record);

    /**
     * 查询所有订单
     * @param status
     * @return
     */
    @Select("select * from orders where status = #{status}")
    List<Orders> findAllByStatuts(Integer status);

    @Select("select * from orders where orderId = #{orderId} ")
    List<orderItem> findorderItemList();

    @Select("select * from orders where userId={userId}")
    List<Orders> getOrdersByUserId(Integer userId);

    /**
     * 保存订单
     * @param orders
     */
    int add(Orders orders);

    int add(orderItem item);
}
package cn.javabs.phonemall.service.impl;


import cn.javabs.phonemall.entity.Goods;
import cn.javabs.phonemall.entity.Orders;
import cn.javabs.phonemall.entity.Users;
import cn.javabs.phonemall.entity.orderItem;
import cn.javabs.phonemall.mapper.OrderItemMapper;
import cn.javabs.phonemall.mapper.OrdersMapper;
import cn.javabs.phonemall.service.GoodsService;
import cn.javabs.phonemall.service.OrdersService;
import cn.javabs.phonemall.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Service("ordesService")
@Transactional
public class OrdersServiceImpl implements OrdersService {
    @Autowired
    @Qualifier("ordersMapper")
    private OrdersMapper ordersMapper;

    @Autowired
    @Qualifier("goodsService")
    private GoodsService goodsService;

    @Autowired
    @Qualifier("userService")
    private UserService userService;

    @Autowired
    @Qualifier("orderItemMapper")
    private OrderItemMapper orderItemMapper;
    /**
     * 查询所有订单
     *
     * @param status
     * @return
     */
    @Override
    public List<Orders> findAllOrders(Integer status) {
        List<Orders> ordersList=ordersMapper.findAllByStatuts(status);
        for (Orders order: ordersList){
            // 获取订单的编号
            Integer orderId = order.getOid();
            // 调用 获取所有订单 方法 返回 所有订单订单项
            List<orderItem> orderItemList = this.findAllItem(orderId);
            // 将所有的订单项 放入到订单中
            order.setorderItems(orderItemList);

            // 获取用户编号
            Integer userId  =  order.getUserid();
            // 根据用户编号  获取 用户对象
            Users user = userService.findUserById(userId);
            // 将用户对象封装订单中
            order.setUsers(user);

        }
        return ordersList;
    }

    /**
     * 根据 订单编号查询订单信息
     *
     * @param orderId
     * @return
     */
    @Override
    public Orders findOrdersById(Integer orderId) {
        Orders orders=  ordersMapper.selectByPrimaryKey(orderId);

        return orders;
    }

    /**
     * 获取某用户的所有订单
     *
     * @param userId
     * @return
     */
    @Override
    public List<Orders> findOrdersByUserId(Integer userId) {
        List<Orders>  Orderslist = ordersMapper.getOrdersByUserId(userId);
        return null;
    }

    /**
     * 添加订单
     *
     * @param goods
     * @return
     */
    @Override
    public Orders addOrder(Goods goods) {
        ArrayList<orderItem> orderItems = new ArrayList<>();
        orderItem o = addItem(goods);
        orderItems.add(o);
        Orders orders = new Orders();
        orders.setorderItems(orderItems);
        return orders;

    }

    @Override
    public Orders find(int number) {
        return ordersMapper.selectByPrimaryKey(number);
    }


    /**
     * 保存订单
     *
     * @param orders
     * @return
     */
    @Override
    public int saveOrder(Orders orders) {
        orders.setStatus(Orders.STATUS_UPAY);  // 未付款
        // 设置下单时间
        Date date = new Date(); // 系统时间
        orders.setSystime(date); // 时间戳
        ordersMapper.insert(orders);
        // 获取订单的编号
        Integer orderId = orders.getOid();
        // 获取订单项
        List<orderItem>  orderItem = orders.getorderItems();
        for (cn.javabs.phonemall.entity.orderItem item: orderItem){
            item.setOrderId(orderId);
            orderItemMapper.insert(item);
        }
        return 0;
    }


    /**
     * 创建订单项
     */
    public orderItem addItem(Goods goods){
        orderItem item = new orderItem();
        item.setGoodsIs(goods.getGid());
        item.setAmount(1);
        item.setPrice(goods.getPrice());
        item.setTotal(goods.getPrice());
        Goods good = goodsService.findGoodsById(goods.getGid());
        item.setGoods(goods);
        return item;
    }

    /**
     * 获取订单项
     */

    public  List<orderItem> findAllItem(int orderId){
        List<orderItem> orderItemList =  ordersMapper.findorderItemList();
        for (orderItem item : orderItemList){
            Integer gid = item.getGoodsIs();
            Goods goods = goodsService.findGoodsById(gid);
            item.setGoods(goods);
        }
        return  orderItemList;
    }
}

package cn.javabs.phonemall.service;

import cn.javabs.phonemall.entity.Goods;
import cn.javabs.phonemall.entity.Orders;

import java.util.List;

public interface OrdersService {

    /**
     * 查询所有订单
     * @param status
     * @return
     */
    List<Orders> findAllOrders(Integer status);

    /**
     * 根据 订单编号查询订单信息
     * @param oid
     * @return
     */
    Orders findOrdersById(Integer oid);

    /**
     * 获取某用户的所有订单
     * @param userId
     * @return
     */
    List<Orders> findOrdersByUserId(Integer userId);

    /**
     * 添加订单
     * @param goods
     * @return
     */
    Orders addOrder(Goods goods);

    Orders find(int number);

    /**
     * 保存订单
     * @param orders
     * @return
     */
    int saveOrder(Orders orders);
}

<?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.javabs.phonemall.mapper.OrdersMapper">
  <resultMap id="BaseResultMap" type="cn.javabs.phonemall.entity.Orders">
    <id column="oid" jdbcType="INTEGER" property="oid" />
    <result column="total" jdbcType="INTEGER" property="total" />
    <result column="amount" jdbcType="INTEGER" property="amount" />
    <result column="status" jdbcType="INTEGER" property="status" />
    <result column="paytype" jdbcType="INTEGER" property="paytype" />
    <result column="realname" jdbcType="VARCHAR" property="realname" />
    <result column="phone" jdbcType="VARCHAR" property="phone" />
    <result column="address" jdbcType="VARCHAR" property="address" />
    <result column="systime" jdbcType="TIMESTAMP" property="systime" />
    <result column="userId" jdbcType="INTEGER" property="userid" />
  </resultMap>
  <sql id="Example_Where_Clause">
    <where>
      <foreach collection="oredCriteria" item="criteria" separator="or">
        <if test="criteria.valid">
          <trim prefix="(" prefixOverrides="and" suffix=")">
            <foreach collection="criteria.criteria" item="criterion">
              <choose>
                <when test="criterion.noValue">
                  and ${criterion.condition}
                </when>
                <when test="criterion.singleValue">
                  and ${criterion.condition} #{criterion.value}
                </when>
                <when test="criterion.betweenValue">
                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
                </when>
                <when test="criterion.listValue">
                  and ${criterion.condition}
                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
                    #{listItem}
                  </foreach>
                </when>
              </choose>
            </foreach>
          </trim>
        </if>
      </foreach>
    </where>
  </sql>
  <sql id="Update_By_Example_Where_Clause">
    <where>
      <foreach collection="example.oredCriteria" item="criteria" separator="or">
        <if test="criteria.valid">
          <trim prefix="(" prefixOverrides="and" suffix=")">
            <foreach collection="criteria.criteria" item="criterion">
              <choose>
                <when test="criterion.noValue">
                  and ${criterion.condition}
                </when>
                <when test="criterion.singleValue">
                  and ${criterion.condition} #{criterion.value}
                </when>
                <when test="criterion.betweenValue">
                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
                </when>
                <when test="criterion.listValue">
                  and ${criterion.condition}
                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
                    #{listItem}
                  </foreach>
                </when>
              </choose>
            </foreach>
          </trim>
        </if>
      </foreach>
    </where>
  </sql>
  <sql id="Base_Column_List">
    oid, total, amount, `status`, paytype, realname, phone, address, systime, userId
  </sql>
<!--  <select id="selectByExample" parameterType="OrdersExample" resultMap="BaseResultMap">-->
<!--    select-->
<!--    <if test="distinct">-->
<!--      distinct-->
<!--    </if>-->
<!--    <include refid="Base_Column_List" />-->
<!--    from orders-->
<!--    <if test="_parameter != null">-->
<!--      <include refid="Example_Where_Clause" />-->
<!--    </if>-->
<!--    <if test="orderByClause != null">-->
<!--      order by ${orderByClause}-->
<!--    </if>-->
<!--    <if test="limit != null">-->
<!--      <if test="offset != null">-->
<!--        limit ${offset}, ${limit}-->
<!--      </if>-->
<!--      <if test="offset == null">-->
<!--        limit ${limit}-->
<!--      </if>-->
<!--    </if>-->
<!--  </select>-->
  <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
    select 
    <include refid="Base_Column_List" />
    from orders
    where oid = #{oid,jdbcType=INTEGER}
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
    delete from orders
    where oid = #{oid,jdbcType=INTEGER}
  </delete>
<!--  <delete id="deleteByExample" parameterType="OrdersExample">-->
<!--    delete from orders-->
<!--    <if test="_parameter != null">-->
<!--      <include refid="Example_Where_Clause" />-->
<!--    </if>-->
<!--  </delete>-->
  <insert id="insert" keyColumn="oid" keyProperty="oid" parameterType="Orders" useGeneratedKeys="true">
--     在语句插入之后执行
    <selectKey order="AFTER" resultType="int" keyProperty="oid">
      select  last_insert_id()
    </selectKey>
    insert into orders (total, amount, `status`,
      paytype, realname, phone, 
      address, systime, userId
      )
    values (#{total,jdbcType=INTEGER}, #{amount,jdbcType=INTEGER}, #{status,jdbcType=INTEGER}, 
      #{paytype,jdbcType=INTEGER}, #{realname,jdbcType=VARCHAR}, #{phone,jdbcType=VARCHAR}, 
      #{address,jdbcType=VARCHAR}, #{systime,jdbcType=TIMESTAMP}, #{userid,jdbcType=INTEGER}
      )
  </insert>
  <insert id="insertSelective" keyColumn="oid" keyProperty="oid" parameterType="Orders" useGeneratedKeys="true">
    insert into orders
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="total != null">
        total,
      </if>
      <if test="amount != null">
        amount,
      </if>
      <if test="status != null">
        `status`,
      </if>
      <if test="paytype != null">
        paytype,
      </if>
      <if test="realname != null">
        realname,
      </if>
      <if test="phone != null">
        phone,
      </if>
      <if test="address != null">
        address,
      </if>
      <if test="systime != null">
        systime,
      </if>
      <if test="userid != null">
        userId,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
      <if test="total != null">
        #{total,jdbcType=INTEGER},
      </if>
      <if test="amount != null">
        #{amount,jdbcType=INTEGER},
      </if>
      <if test="status != null">
        #{status,jdbcType=INTEGER},
      </if>
      <if test="paytype != null">
        #{paytype,jdbcType=INTEGER},
      </if>
      <if test="realname != null">
        #{realname,jdbcType=VARCHAR},
      </if>
      <if test="phone != null">
        #{phone,jdbcType=VARCHAR},
      </if>
      <if test="address != null">
        #{address,jdbcType=VARCHAR},
      </if>
      <if test="systime != null">
        #{systime,jdbcType=TIMESTAMP},
      </if>
      <if test="userid != null">
        #{userid,jdbcType=INTEGER},
      </if>
    </trim>
  </insert>
<!--  <select id="countByExample" parameterType="OrdersExample" resultType="java.lang.Long">-->
<!--    select count(*) from orders-->
<!--    <if test="_parameter != null">-->
<!--      <include refid="Example_Where_Clause" />-->
<!--    </if>-->
<!--  </select>-->
  <update id="updateByExampleSelective" parameterType="map">
    update orders
    <set>
      <if test="record.oid != null">
        oid = #{record.oid,jdbcType=INTEGER},
      </if>
      <if test="record.total != null">
        total = #{record.total,jdbcType=INTEGER},
      </if>
      <if test="record.amount != null">
        amount = #{record.amount,jdbcType=INTEGER},
      </if>
      <if test="record.status != null">
        `status` = #{record.status,jdbcType=INTEGER},
      </if>
      <if test="record.paytype != null">
        paytype = #{record.paytype,jdbcType=INTEGER},
      </if>
      <if test="record.realname != null">
        realname = #{record.realname,jdbcType=VARCHAR},
      </if>
      <if test="record.phone != null">
        phone = #{record.phone,jdbcType=VARCHAR},
      </if>
      <if test="record.address != null">
        address = #{record.address,jdbcType=VARCHAR},
      </if>
      <if test="record.systime != null">
        systime = #{record.systime,jdbcType=TIMESTAMP},
      </if>
      <if test="record.userid != null">
        userId = #{record.userid,jdbcType=INTEGER},
      </if>
    </set>
    <if test="_parameter != null">
      <include refid="Update_By_Example_Where_Clause" />
    </if>
  </update>
  <update id="updateByExample" parameterType="map">
    update orders
    set oid = #{record.oid,jdbcType=INTEGER},
      total = #{record.total,jdbcType=INTEGER},
      amount = #{record.amount,jdbcType=INTEGER},
      `status` = #{record.status,jdbcType=INTEGER},
      paytype = #{record.paytype,jdbcType=INTEGER},
      realname = #{record.realname,jdbcType=VARCHAR},
      phone = #{record.phone,jdbcType=VARCHAR},
      address = #{record.address,jdbcType=VARCHAR},
      systime = #{record.systime,jdbcType=TIMESTAMP},
      userId = #{record.userid,jdbcType=INTEGER}
    <if test="_parameter != null">
      <include refid="Update_By_Example_Where_Clause" />
    </if>
  </update>
  <update id="updateByPrimaryKeySelective" parameterType="Orders">
    update orders
    <set>
      <if test="total != null">
        total = #{total,jdbcType=INTEGER},
      </if>
      <if test="amount != null">
        amount = #{amount,jdbcType=INTEGER},
      </if>
      <if test="status != null">
        `status` = #{status,jdbcType=INTEGER},
      </if>
      <if test="paytype != null">
        paytype = #{paytype,jdbcType=INTEGER},
      </if>
      <if test="realname != null">
        realname = #{realname,jdbcType=VARCHAR},
      </if>
      <if test="phone != null">
        phone = #{phone,jdbcType=VARCHAR},
      </if>
      <if test="address != null">
        address = #{address,jdbcType=VARCHAR},
      </if>
      <if test="systime != null">
        systime = #{systime,jdbcType=TIMESTAMP},
      </if>
      <if test="userid != null">
        userId = #{userid,jdbcType=INTEGER},
      </if>
    </set>
    where oid = #{oid,jdbcType=INTEGER}
  </update>
  <update id="updateByPrimaryKey" parameterType="Orders">
    update orders
    set total = #{total,jdbcType=INTEGER},
      amount = #{amount,jdbcType=INTEGER},
      `status` = #{status,jdbcType=INTEGER},
      paytype = #{paytype,jdbcType=INTEGER},
      realname = #{realname,jdbcType=VARCHAR},
      phone = #{phone,jdbcType=VARCHAR},
      address = #{address,jdbcType=VARCHAR},
      systime = #{systime,jdbcType=TIMESTAMP},
      userId = #{userid,jdbcType=INTEGER}
    where oid = #{oid,jdbcType=INTEGER}
  </update>
</mapper>
  1. 推荐
package cn.javabs.phonemall.entity;

/**
 * 推荐实体类
 */
public class Recommend {

    public static final Byte CATEGORY_SCROLL = 1; //条幅推荐

    public static final Byte CATEGORY_FASHIONL = 2;// 热销推荐
    public static final Byte CATEGORY_PERFONHACE = 3;//性价比




    private Integer rid;

    private Byte type;
    private Integer goodsId;
    private Goods goods;

    @Override
    public String toString() {
        return "Recommend{" +
                "rid=" + rid +
                ", type=" + type +
                ", goodsId=" + goodsId +
                ", goods=" + goods +
                '}';
    }

    public Integer getRid() {
        return rid;
    }

    public void setRid(Integer rid) {
        this.rid = rid;
    }

    public Byte getType() {
        return type;
    }

    public void setType(Byte type) {
        this.type = type;
    }

    public Integer getGoodsId() {
        return goodsId;
    }

    public void setGoodsId(Integer goodsId) {
        this.goodsId = goodsId;
    }

    public Goods getGoods() {
        return goods;
    }

    public void setGoods(Goods goods) {
        this.goods = goods;
    }
}

package cn.javabs.phonemall.mapper;

import cn.javabs.phonemall.entity.Recommend;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository("recommendMapper")
public interface RecommendMapper {
    /**
     * 根据id商品 ,可以有都个推荐
     * @param goodsId
     * @return
     */
    @Select("select * from recommend where goodsId")
    List<Recommend> findGoodsId(Integer goodsId);

    /**
     *  根据推荐id查询
     * @param rid
     * @return
     */
    @Select("select * from  recommend where rid=#{rid}")
    Recommend findById(Integer rid);

    /**
     * 获取所有
     * @param type
     * @return
     */
    @Select("select * from recommend where type=#{type} order by rid")
    List<Recommend> findAll(Byte type);

    /**
     * 添加推荐
     * @param recommend
     * @return
     */
    int insert(Recommend recommend);

    /**
     * 删除推荐
     * @param rid
     * @return
     */
    int del(Integer rid);

    /**
     * 修改推荐
     * @param recommend
     * @return
     */
    int update(Recommend recommend);
}

package cn.javabs.phonemall.service.impl;

import cn.javabs.phonemall.entity.Goods;
import cn.javabs.phonemall.entity.Recommend;
import cn.javabs.phonemall.mapper.RecommendMapper;
import cn.javabs.phonemall.service.GoodsService;
import cn.javabs.phonemall.service.RecommendService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service("recommendService")
@Transactional
public class RecommendServiceImpl implements RecommendService {

   @Autowired
   @Qualifier("recommendMapper")
   private RecommendMapper recommendMapper;

   @Autowired
   @Qualifier("goodsService")
   private GoodsService goodsService;
    /**
     * 获取所有
     *
     * @param type
     * @return
     */
    @Override
    public List<Recommend> findAll(Byte type) {
      // 1.根据类型获取推荐
        List<Recommend> recommendList= recommendMapper.findAll(type);
       // 通过循环 取出所有推荐
        for (Recommend recommend:recommendList){
         // 从每一个推荐取出商品的id
           Integer goodsId = recommend.getGoodsId();
           // 通过商品id 获取商品
           Goods goods = goodsService.findGoodsById(goodsId);
            // 将商品对象放到推荐中表
           recommend.setGoods(goods);
       }
        return recommendList;
    }

    /**
     * 根据id商品 ,可以有都个推荐
     *
     * @param goodsId
     * @return
     */
    @Override
    public List<Recommend> finaRecommendByGoodsId(Integer goodsId) {

        return recommendMapper.findGoodsId(goodsId);
    }

    /**
     * 根据推荐id查询
     *
     * @param rid
     * @return
     */
    @Override
    public Recommend findRecommendById(Integer rid) {
        return recommendMapper.findById(rid);
    }

    /**
     * 添加推荐
     *
     * @param recommend
     * @return
     */
    @Override
    public int addRecommend(Recommend recommend) {
        return recommendMapper.insert(recommend);
    }

    /**
     * 删除推荐
     *
     * @param rid
     * @return
     */
    @Override
    public int delRecommend(Integer rid) {
        return recommendMapper.del(rid);
    }

    /**
     * 修改推荐
     *
     * @param recommend
     * @return
     */
    @Override
    public int editRecommend(Recommend recommend) {
        return recommendMapper.update(recommend);
    }
}

package cn.javabs.phonemall.service;

import cn.javabs.phonemall.entity.Recommend;

import java.util.List;

/**
 *  条幅推荐
 *  热销推荐
 *  性价比(海报推荐,轮播推荐)
 */
public interface RecommendService {

    /**
     * 获取所有
     * @param type
     * @return
     */
    List<Recommend> findAll(Byte type);

    /**
     * 根据id商品 ,可以有都个推荐
     * @param goodsId
     * @return
     */
   List<Recommend> finaRecommendByGoodsId(Integer goodsId);

    /**
     * 根据推荐id查询
     * @param rid
     * @return
     */
   Recommend findRecommendById(Integer rid);

    /**
     *  添加推荐
     * @param recommend
     * @return
     */
   int addRecommend(Recommend recommend);

    /**
     * 删除推荐
     * @param rid
     * @return
     */
   int delRecommend(Integer rid);

    /**
     * 修改推荐
     * @param recommend
     * @return
     */
   int editRecommend(Recommend recommend);
}

<?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 表示命名空间 -->
<mapper namespace="cn.javabs.phonemall.mapper.RecommendMapper">
    <!-- SQL语句 -->
<!--    添加推荐-->
<insert id="insert">
    insert into recommend
 <trim prefix="(" suffix=")" suffixOverrides=",">
     <if test="rid != null">
         rid,
     </if>
     <if test="type != null">
         type ,
     </if>
     <if test="goodsId != null">
         goodsId,
     </if>
 </trim>
 <trim prefix="values (" suffix=")" suffixOverrides=",">
     <if test="rid != null">
         #{rid},
     </if>
     <if test="type != null">
         #{type},
     </if>
     <if test="goodsId != null">
         #{goodId},
     </if>
 </trim>
</insert>

<!--    删除推荐-->
    <delete id="det">
        delete  from recommend
    <where>
        <if test="rid != null">
           rid= #{rid}
        </if>
    </where>
    </delete>

<!--    修改推荐-->
    <update id="update">
        update  recommend
      <trim suffixOverrides=",">
          <set>
              <if test="type != null">
                  type = #{type},
              </if>
              <if test="goodsId != null">
                  goodsId =#{goodsId},
              </if>
          </set>
      </trim>
      where rid = #{rid}
    </update>
</mapper>
  1. 用户
package cn.javabs.phonemall.entity;

import java.io.Serializable;

/**
 * users
 * @author 
 */
public class Users implements Serializable {
    private Integer uid;

    private String username;

    private String password;

    private String realname;

    private String phone;

    private String address;

    public Users() {
        super();
    }

    @Override
    public String toString() {
        return "Users{" +
                "uid=" + uid +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", realname='" + realname + '\'' +
                ", phone='" + phone + '\'' +
                ", address='" + address + '\'' +
                '}';
    }

    public Users(Integer uid, String username, String password, String realname, String phone, String address) {
        this.uid = uid;
        this.username = username;
        this.password = password;
        this.realname = realname;
        this.phone = phone;
        this.address = address;
    }

    public Integer getUid() {
        return uid;
    }

    public void setUid(Integer uid) {
        this.uid = uid;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getRealname() {
        return realname;
    }

    public void setRealname(String realname) {
        this.realname = realname;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

```java
package cn.javabs.phonemall.mapper;

import cn.javabs.phonemall.entity.Users;
import cn.javabs.phonemall.entity.UsersExample;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface UsersMapper {

    /**
     * 查询总条数
     * @param example
     * @return
     */
    long countByExample(UsersExample example);

    int deleteByExample(UsersExample example);

    /**
     * 删除用户
     * @param uid
     * @return
     */
    int deleteByPrimaryKey(Integer uid);

    /**
     * 添加用户
     * @param record
     * @return
     */
    int insert(Users record);

    int insertSelective(Users record);

//    List<Users> selectByExample(UsersExample example);

    /**
     *  根据id 查找
     * @param uid
     * @return
     */
    Users selectByPrimaryKey(Integer uid);

//    int updateByExampleSelective(@Param("record") Users record, @Param("example") UsersExample example);

//    int updateByExample(@Param("record") Users record, @Param("example") UsersExample example);
    /**
     *  修改用户
     * @param record
     * @return
     */
    int updateByPrimaryKeySelective(Users record);


    int updateByPrimaryKey(Users record);

    /**
     *  验证用户密码
     * @param username
     * @param password
     * @return
     */
    @Select("select * from users where username= #{username} and password = #{password")
    Users findUserByUsernameAndPassword(@Param("username") String username,
                                        @Param("password") String password);

    /**
     * 用户是否存在
     * @param username
     * @return
     */
    @Select("select * from users where username=#{username}")
    Users findUsername(String username);

    /**
     * 分页查询用户(分页)
     * @param startIndex
     * @param pageSize
     * @return
     */
    @Select("select * from users order by uid limit #{startIndex},#{pageSize}")
    List<Users> findAll(@Param("startIndex") int startIndex,
                        @Param("pageSize") int pageSize);

    /**
     * 模糊查询
     * @param username
     * @return
     */
    @Select("select * from users where username like concat('%',#{username},'%')")
    List<Users> findUsernameByLikeUsername(String username);
}


```java
package cn.javabs.phonemall.service.impl;

import cn.javabs.phonemall.entity.Users;
import cn.javabs.phonemall.mapper.UsersMapper;
import cn.javabs.phonemall.service.UserService;
import cn.javabs.phonemall.util.Md55Util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service("userService")
@Transactional
public class UsersServiceImpl implements UserService {

    @Autowired
    @Qualifier("usersMapper")
    private UsersMapper usersMapper;
   /**
     * 验证用户密码
     *
     * @param username
     * @param password
     * @return
     */
    @Override
    public boolean checkUser(String username, String password) {
        return  usersMapper.findUserByUsernameAndPassword(username, Md55Util.encode(password))!=null;
    }

    /**
     * 判断用户是否存在
     *
     * @param username
     * @return
     */
    @Override
    public boolean isExist(String username) {
        return usersMapper.findUsername(username) != null;
    }


    /**
     * 添加用户
     *
     * @param users
     * @return
     */
    @Override
    public int addUser(Users users) {
        // 先获取密码
        String password = users.getPassword();
        // 再将密码进行加密
        String encode = Md55Util.encode(password);
       // 得到加密后的密码设置
        users.setPassword(encode);
        return usersMapper.insert(users);
    }

    /**
     * 删除用户
     *
     * @param uid
     * @return
     */
    @Override
    public int delUser(Integer uid) {
        return usersMapper.deleteByPrimaryKey(uid);
    }

    /**
     * 修改用户
     *
     * @param users
     * @return
     */
    @Override
    public int editUser(Users users) {
        return usersMapper.updateByPrimaryKeySelective(users);
    }

    /**
     * 根据用户 UID 查询用户
     *
     * @param uid
     * @return
     */
    @Override
    public Users findUserById(Integer uid) {
        return usersMapper.selectByPrimaryKey(uid);
    }

    /**
     * 分页查询用户(分页)
     *
     * @param startIndex
     * @param pageSize
     * @return
     */
    @Override
    public List<Users> findAllUsers(int startIndex, int pageSize) {
        return usersMapper.findAll(startIndex,pageSize);
    }

    /**
     * 模胡查询
     *
     * @param username
     * @return
     */
    @Override
    public List<Users> findUserByLikeName(String username) {
        return usersMapper.findUsernameByLikeUsername(username);
    }

    /**
     * 查询用户的总条数
     *
     * @return
     */
    @Override
    public int findTotalItem() {
        Long num = usersMapper.countByExample(null);
        int number = num.intValue();
        return number;
    }
}

package cn.javabs.phonemall.service;

import cn.javabs.phonemall.entity.Users;

import java.util.List;

public interface UserService {

    /**
     *  验证用户密码
     * @param username
     * @param password
     * @return
     */
 boolean   checkUser(String username,String password);

    /**
     * 判断用户是否存在
     * @param username
     * @return
     */
    boolean isExist(String username);

    /**
     * 添加用户
     * @param users
     * @return
     */
    int addUser(Users users);

    /**
     * 删除用户
     * @param uid
     * @return
     */
    int delUser(Integer uid);

    /**
     * 修改用户
     * @param users
     * @return
     */
    int editUser(Users users);

    /**
     * 根据用户 UID 查询用户
     * @param uid
     * @return
     */
    Users findUserById(Integer uid);

    /**
     * 分页查询用户
     * @param startIndex
     * @param pageSize
     * @return
     */
    List<Users> findAllUsers(int startIndex, int pageSize);

    /**
     * 模胡查询
     * @param username
     * @return
     */
    List<Users> findUserByLikeName(String username);


    /**
     * 查询用户的总条数
     * @return
     */
    int findTotalItem();
}

<?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.javabs.phonemall.entity.Users">
  <resultMap id="BaseResultMap" type="Users">
    <id column="uid" jdbcType="INTEGER" property="uid" />
    <result column="username" jdbcType="VARCHAR" property="username" />
    <result column="password" jdbcType="VARCHAR" property="password" />
    <result column="realname" jdbcType="VARCHAR" property="realname" />
    <result column="phone" jdbcType="VARCHAR" property="phone" />
    <result column="address" jdbcType="VARCHAR" property="address" />
  </resultMap>

  <sql id="Example_Where_Clause">
    <where>
      <foreach collection="oredCriteria" item="criteria" separator="or">
        <if test="criteria.valid">
          <trim prefix="(" prefixOverrides="and" suffix=")">
            <foreach collection="criteria.criteria" item="criterion">
              <choose>
                <when test="criterion.noValue">
                  and ${criterion.condition}
                </when>
                <when test="criterion.singleValue">
                  and ${criterion.condition} #{criterion.value}
                </when>
                <when test="criterion.betweenValue">
                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
                </when>
                <when test="criterion.listValue">
                  and ${criterion.condition}
                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
                    #{listItem}
                  </foreach>
                </when>
              </choose>
            </foreach>
          </trim>
        </if>
      </foreach>
    </where>
  </sql>
  <sql id="Update_By_Example_Where_Clause">
    <where>
      <foreach collection="example.oredCriteria" item="criteria" separator="or">
        <if test="criteria.valid">
          <trim prefix="(" prefixOverrides="and" suffix=")">
            <foreach collection="criteria.criteria" item="criterion">
              <choose>
                <when test="criterion.noValue">
                  and ${criterion.condition}
                </when>
                <when test="criterion.singleValue">
                  and ${criterion.condition} #{criterion.value}
                </when>
                <when test="criterion.betweenValue">
                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
                </when>
                <when test="criterion.listValue">
                  and ${criterion.condition}
                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
                    #{listItem}
                  </foreach>
                </when>
              </choose>
            </foreach>
          </trim>
        </if>
      </foreach>
    </where>
  </sql>
  <sql id="Base_Column_List">
    `uid`, username, `password`, realname, phone, address
  </sql>

  <select id="selectByExample" parameterType="cn.javabs.phonemall.entity.UsersExample" resultMap="BaseResultMap">
    select
    <if test="distinct">
      distinct
    </if>
    <include refid="Base_Column_List" />
    from users
    <if test="_parameter != null">
      <include refid="Example_Where_Clause" />
    </if>
    <if test="orderByClause != null">
      order by ${orderByClause}
    </if>
    <if test="limit != null">
      <if test="offset != null">
        limit ${offset}, ${limit}
      </if>
      <if test="offset == null">
        limit ${limit}
      </if>
    </if>
  </select>
  <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
    select 
    <include refid="Base_Column_List" />
    from users
    where `uid` = #{uid,jdbcType=INTEGER}
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
    delete from users
    where `uid` = #{uid,jdbcType=INTEGER}
  </delete>

  <delete id="deleteByExample" parameterType="cn.javabs.phonemall.entity.UsersExample">
    delete from users
    <if test="_parameter != null">
      <include refid="Example_Where_Clause" />
    </if>
  </delete>

  <insert id="insert" keyColumn="uid" keyProperty="uid" parameterType="Users" useGeneratedKeys="true">
    insert into users (username, `password`, realname, 
      phone, address)
    values (#{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, #{realname,jdbcType=VARCHAR}, 
      #{phone,jdbcType=VARCHAR}, #{address,jdbcType=VARCHAR})
  </insert>

  <insert id="insertSelective" keyColumn="uid" keyProperty="uid" parameterType="Users" useGeneratedKeys="true">
    insert into users
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="username != null">
        username,
      </if>
      <if test="password != null">
        `password`,
      </if>
      <if test="realname != null">
        realname,
      </if>
      <if test="phone != null">
        phone,
      </if>
      <if test="address != null">
        address,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
      <if test="username != null">
        #{username,jdbcType=VARCHAR},
      </if>
      <if test="password != null">
        #{password,jdbcType=VARCHAR},
      </if>
      <if test="realname != null">
        #{realname,jdbcType=VARCHAR},
      </if>
      <if test="phone != null">
        #{phone,jdbcType=VARCHAR},
      </if>
      <if test="address != null">
        #{address,jdbcType=VARCHAR},
      </if>
    </trim>
  </insert>

  <select id="countByExample" parameterType="cn.javabs.phonemall.entity.UsersExample" resultType="java.lang.Long">
    select count(*) from users
    <if test="_parameter != null">
      <include refid="Example_Where_Clause" />
    </if>
  </select>

  <update id="updateByExampleSelective" parameterType="map">
    update users
    <set>
      <if test="record.uid != null">
        `uid` = #{record.uid,jdbcType=INTEGER},
      </if>
      <if test="record.username != null">
        username = #{record.username,jdbcType=VARCHAR},
      </if>
      <if test="record.password != null">
        `password` = #{record.password,jdbcType=VARCHAR},
      </if>
      <if test="record.realname != null">
        realname = #{record.realname,jdbcType=VARCHAR},
      </if>
      <if test="record.phone != null">
        phone = #{record.phone,jdbcType=VARCHAR},
      </if>
      <if test="record.address != null">
        address = #{record.address,jdbcType=VARCHAR},
      </if>
    </set>
    <if test="_parameter != null">
      <include refid="Update_By_Example_Where_Clause" />
    </if>
  </update>

  <update id="updateByExample" parameterType="map">
    update users
    set `uid` = #{record.uid,jdbcType=INTEGER},
      username = #{record.username,jdbcType=VARCHAR},
      `password` = #{record.password,jdbcType=VARCHAR},
      realname = #{record.realname,jdbcType=VARCHAR},
      phone = #{record.phone,jdbcType=VARCHAR},
      address = #{record.address,jdbcType=VARCHAR}
    <if test="_parameter != null">
      <include refid="Update_By_Example_Where_Clause" />
    </if>
  </update>

  <update id="updateByPrimaryKeySelective" parameterType="cn.javabs.phonemall.entity.Users">
    update users
    <set>
      <if test="username != null">
        username = #{username,jdbcType=VARCHAR},
      </if>
      <if test="password != null">
        `password` = #{password,jdbcType=VARCHAR},
      </if>
      <if test="realname != null">
        realname = #{realname,jdbcType=VARCHAR},
      </if>
      <if test="phone != null">
        phone = #{phone,jdbcType=VARCHAR},
      </if>
      <if test="address != null">
        address = #{address,jdbcType=VARCHAR},
      </if>
    </set>
    where `uid` = #{uid,jdbcType=INTEGER}
  </update>

  <update id="updateByPrimaryKey" parameterType="cn.javabs.phonemall.entity.Users">
    update users
    set username = #{username,jdbcType=VARCHAR},
      `password` = #{password,jdbcType=VARCHAR},
      realname = #{realname,jdbcType=VARCHAR},
      phone = #{phone,jdbcType=VARCHAR},
      address = #{address,jdbcType=VARCHAR}
    where `uid` = #{uid,jdbcType=INTEGER}
  </update>

</mapper>
  1. 工具类
package cn.javabs.phonemall.util;

import org.springframework.util.Base64Utils;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * 密码加密安全工具箱
 */
public class Md55Util {

    public final static String md5(String pass){
        MessageDigest messageDigest = null;

        try {
            messageDigest = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        }

//        byte[] bytes = pass.getBytes();
//        messageDigest.update(bytes);

//        byte[] digest = messageDigest.digest();
//        Base64Utils.encodeToString(digest)

        messageDigest.update(pass.getBytes());
        return  Base64Utils.encodeToString(messageDigest.digest());

    }

    /**
     *  机密成字符串
     * @param pass
     * @return
     */
    public final static String shai(String pass){
        MessageDigest messageDigest = null;
        try {
            messageDigest = MessageDigest.getInstance("SHA-1");
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        }
        messageDigest.update(pass.getBytes());
        return  Base64Utils.encodeToString(messageDigest.digest());
    }
    /**
     * 通过特点的方式加密
     * @param pass
     * @return
     */
    public final static String encode(String pass){
        return  md5(shai(md5(pass)));

    }

}

package cn.javabs.phonemall.util;

import org.springframework.web.context.ContextLoader;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Objects;
import java.util.Random;

/**
 * 上传的工具类
 */
public class UploadUtil {

    /**
     * 图片上传
     * @param file
     * @return
     */
    public static String fileUpload(MultipartFile file) throws IOException {

        // 1.是否有上传文件
        // 2. 文件是不是空的,上传的文件名是不是空的
        if (Objects.nonNull(file) || file.isEmpty() || Objects.isNull(file.getOriginalFilename())){
            // 如果是空接是空的
            return null;
        }
        // 2.明确有上传文件
            String savePath="pic";// 保存文件的目录
        String filename = file.getOriginalFilename();// 获取上传文件的文件名称

       String path = ContextLoader.getCurrentWebApplicationContext().getServletContext().getRealPath("/")+savePath;

        // 上传文件一样就报 500
//        Date date = new Date();
//        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmss");
//        String currentTime = sdf.format(date);


        // 获取文件的后缀名
        String suffix = filename.substring(filename.lastIndexOf(".") + 1, filename.length());
        // 简设 currenTime 时间戳
        String currentTime  = new SimpleDateFormat("yyyyMMddhhmmss").format(new Date())+new Random().nextInt(899)+100;// 随机范围:100-999

        filename = currentTime + "."+suffix;

        File saveFile = new File(path, filename);

        // 如果不存在创建 mkdirs.makeeDirectores
        if (!saveFile.exists()){
            saveFile.mkdirs();
        }
        System.out.println("输出文件路径:"+saveFile.getPath());
        file.transferTo(saveFile);
        return savePath+"/"+filename ;
    }
}

三、文件构造

在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值