Java網上商城的開發--創建實體與SSM框架搭建

系統整體設計

系統功能模塊劃分

系統用到的數據表設計如下,首先head_line用於儲存頭條顯示的信息。shop是店鋪表,area爲其所屬區域表,shop_category爲商店類別表。product爲商品表,product_category爲商品類別表,product_img爲商品圖片信息表。person_info爲用戶信息表,wechat_account爲微信賬戶表,local_account爲本地賬戶表。

創建實體類

首先需要在數據庫中創建以上的表,例如部分表的設計如下

然後利用IDEA的JPA接口可以實現自動創建相應地Java類,如下所示,首先在Project Structure中點擊“+”選擇JPA,然後選擇provider爲Hibernate之後就會在左下角出現Persistence的圖標,選擇創建By data schema,然後選擇類生成的包、導入的數據表即可自動生成一個類,並且自動生成類的get/set方法。

 

package com.tory.shop.entity;

import java.util.Date;

public class Shop {
    private Integer shopId;
    private String shopName;
    private String shopDescribe;
    private String shopAddr;
    private String shopImg;
    private String shopPhone;
    private Date createTime;
    private Date lastEditTime;
    private Integer priority;
    private Integer enableStatus;       //店鋪狀態:-1、不可用,0、審覈中,1、可用
    private String adviceMessage;      //管理員給店鋪的提示信息
    private Area area;
    private PersonInfo owner;
    private ShopCategory shopCategory;

    public Integer getShopId() {
        return shopId;
    }

    public void setShopId(Integer shopId) {
        this.shopId = shopId;
    }

    public String getShopName() {
        return shopName;
    }

    public void setShopName(String shopName) {
        this.shopName = shopName;
    }

    public String getShopDescribe() {
        return shopDescribe;
    }

    public void setShopDescribe(String shopDescribe) {
        this.shopDescribe = shopDescribe;
    }

    public String getShopAddr() {
        return shopAddr;
    }

    public void setShopAddr(String shopAddr) {
        this.shopAddr = shopAddr;
    }

    public String getShopImg() {
        return shopImg;
    }

    public void setShopImg(String shopImg) {
        this.shopImg = shopImg;
    }

    public String getShopPhone() {
        return shopPhone;
    }

    public void setShopPhone(String shopPhone) {
        this.shopPhone = shopPhone;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public Date getLastEditTime() {
        return lastEditTime;
    }

    public void setLastEditTime(Date lastEditTime) {
        this.lastEditTime = lastEditTime;
    }

    public Integer getPriority() {
        return priority;
    }

    public void setPriority(Integer priority) {
        this.priority = priority;
    }

    public Integer getEnableStatus() {
        return enableStatus;
    }

    public void setEnableStatus(Integer enableStatus) {
        this.enableStatus = enableStatus;
    }

    public String getAdviceMessage() {
        return adviceMessage;
    }

    public void setAdviceMessage(String adviceMessage) {
        this.adviceMessage = adviceMessage;
    }

    public Area getArea() {
        return area;
    }

    public void setArea(Area area) {
        this.area = area;
    }

    public PersonInfo getOwner() {
        return owner;
    }

    public void setOwner(PersonInfo owner) {
        this.owner = owner;
    }

    public ShopCategory getShopCategory() {
        return shopCategory;
    }

    public void setShopCategory(ShopCategory shopCategory) {
        this.shopCategory = shopCategory;
    }
}

maven構建項目

創建Java工程項目如下所示。首先src/main/java目錄下存放主要的java文件,例如包括控制器類包controller、dao包、主要實體類entity、枚舉enums、攔截器interceptor、服務類service、工具類util的包。resources文件夾用於存放xml配置文件等資源。webapp爲web應用的文件夾,resources文件夾用於存放web頁面的靜態資源,WEB-INF存放頁面。test目錄爲測試文件的目錄,其中java和resources目錄與src/main下的相對應。

接着通過maven添加項目依賴。首先引入Java項目所需要的基本包:提供servlet服務的javax.servlet-api、提供json解析的jackson-databind、spring所需的Map工具類commons-collections、日誌輸出工具logback-classic包、測試模塊junit

接着引入8個Spring相關的包:核心工具類spring-core、bean管理類spring-beans、上下文管理類spring-context、數據庫訪問類spring-jdbc、事務管理類spring-tx、web開發相關類spring-web、MVC框架類spring-mvc、測試相關類spring-test。

最後引入數據庫交互相關的包:鏈接MySQL的mysql-connector-java、數據庫連接池c3p0、mybatis核心包mybatis、與spring交互的mybatis-spring

SSM框架配置

接着由下到上配置SSM框架的相關文件,首先在resources文件夾下新建數據庫連接配置文件jdbc.properties,在該文件中指定數據庫的連接驅動、url、用戶名和密碼

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/shop_demo
jdbc.username=root
jdbc.password=1234

接着對mybatis進行配置,如下所示爲mybatis-config.xml文件

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

<configuration>
    <settings>
        <!--設置控制檯輸出日誌-->
        <setting name="logImpl" value="STDOUT_LOGGING" />
        <!--獲取自增主鍵值-->
        <setting name="useGeneratedKeys" value="true"/>
        <!--查詢語句使用數據庫字段名-->
        <setting name="useColumnLabel" value="true"/>
        <!--開啓駝峯命名轉換-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
</configuration>

在往上來到了spring的DAO層,在spring-dao.xml文件中首先根據jdbc.properties文件創建c3p0類型的數據庫連接源dataSource,然後將該數據源注入並創建Mybatis的SqlSessionFactory對象,然後完成mybatis對Spring的DAO接口映射。

值得注意的是,在加載xml資源文件時需要在前面增加"classpath:",項目打包之後resource目錄下的文件會放到target/classes目錄下,因此需要從該路徑下加載。否則有時候IDEA的自動提示會找得到該文件,而且在測試代碼中可以正常運行,但是打包發佈項目就會報錯找不到.xml文件。

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

    <!--引入jdbc.properties文件中配置的數據庫變量-->
    <context:property-placeholder location="classpath:jdbc.properties"/>

    <!--配置c3p0數據庫連接池-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <!--注入引入jdbc.properties文件中的數據庫變量-->
        <property name="driverClass" value="${jdbc.driver}"/>
        <property name="jdbcUrl" value="${jdbc.url}"/>
        <property name="user" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <!--對c3p0進行設置-->
        <property name="maxPoolSize" value="30"/>
        <property name="checkoutTimeout" value="10000"/>
        <property name="autoCommitOnClose" value="false"/>  <!--關閉連接後不自動提交-->
        <property name="acquireRetryAttempts" value="2"/>   <!--自動重連嘗試次數-->
    </bean>

    <!--配置Mybatis的SqlSessionFactory對象-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--注入數據源-->
        <property name="dataSource" ref="dataSource"/>
        <!--引入配置文件-->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
        <!--掃描數據庫實體的java類-->
        <property name="typeAliasesPackage" value="com.tory.shop.entity"/>
        <!--掃描實體對應的mapper文件-->
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>
    </bean>

    <!--配置DAO接口注入到Spring容器-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--注入sqlSessionFactory對象名,注意是隻是名字,等到spring初始化完成後在創建對象-->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
        <!--掃描DAO類所在的包-->
        <property name="basePackage" value="com.tory.shop.dao"/>
    </bean>
</beans>

接着向上配置spring的服務層,如下所示爲spring-service.xml文件,在其中掃描service類並且開啓Spring的事務管理

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

    <!--掃描service包下所有的service類-->
    <context:component-scan base-package="com.tory.shop.service"/>

    <!-- 事務管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!-- 開啓基於註解的事務管理 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
</beans>

再往上配置spring的MVC管理模塊,如下所示爲spring-mvc.xml,在其中掃描所有的controller類,配置web的靜態資源目錄,並且定義視圖解析器

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

    <!--開啓SpringMVC的註解模式-->
    <mvc:annotation-driven/>
    <!--掃描controller類-->
    <context:component-scan base-package="com.tory.shop.controller"/>
    <!-- 映射靜態資源目錄,將靜態資源交給default-servlet-handler處理 -->
    <mvc:resources mapping="/resources/**" location="/resources"/>
    <mvc:default-servlet-handler/>
    <!--定義視圖解析器-->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/html/"/>
        <property name="suffix" value=".html"/>
    </bean>
</beans>

最後是總的web配置文件,如下所示爲web.xml文件,在其中註冊spring的DispatcherServlet並映射管理所有的路徑請求

<?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_3_1.xsd"
         version="3.1" metadata-complete="true">
  <servlet>
    <servlet-name>DispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring/spring-*.xml</param-value>
    </init-param>
  </servlet>
  <!--映射管理所有的路徑-->
  <servlet-mapping>
    <servlet-name>DispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

驗證測試

首先實現Area的Dao層來完成與數據庫的交互操作,創建AreaDao接口,由於使用Mybatis框架,所以該接口不需要實現

package com.tory.shop.dao;

import com.tory.shop.entity.Area;

import java.util.List;

public interface AreaDao {
    List<Area> queryArea();
}

接着在resources/mapper下創建AreaDao對應的映射配置文件AreaDao.xml,並且實現queryArea方法的SQL語句

<?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="com.tory.shop.dao.AreaDao">
    <select id="queryArea" resultType="com.tory.shop.entity.Area">
        SELECT area_id,area_name,priority,create_time,last_edit_time
        FROM tb_area ORDER BY priority
    </select>
</mapper>

通過Service層調用Dao操作,如下所示爲AreaService接口及其實現類AreaServiceImpl

package com.tory.shop.service;

import com.tory.shop.entity.Area;
import java.util.List;

public interface AreaService {
    List<Area> getAreaList();
}

package com.tory.shop.service.impl;

import com.tory.shop.dao.AreaDao;
import com.tory.shop.entity.Area;
import com.tory.shop.service.AreaService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

@Service                        //添加註解才能被Spring的Bean管理髮現
public class AreaServiceImpl implements AreaService {
    @Autowired
    private AreaDao areaDao;

    public List<Area> getAreaList() {
        return areaDao.queryArea();
    }
}

最後在Controller層定義對特定請求路徑的響應方法,通過調用AreaService獲得數據列表並以Json的形式返回給客戶

package com.tory.shop.controller.superadmin;

import com.tory.shop.entity.Area;
import com.tory.shop.service.AreaService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
@RequestMapping("/area")        //類的路由映射
public class AreaController {
    @Autowired
    private AreaService areaService;

    @RequestMapping("/list")    //方法的路由映射
    @ResponseBody               //返回Json格式的數據
    public List<Area> getList(){
        return areaService.getAreaList();
    }
}

在瀏覽器中訪問上述路徑,得到結果如下,證明SSM框架運行成功並從數據庫中取得數據返回給客戶:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章