从0开始入门ssm-crm系统实战

喜欢就点个赞呗!
GitHub项目ssm-learn-crm
show me the code and take to me,做的出来更要说的明白

1.1 克隆

git clone https://github.com/buerbl/ssm-learn-crm.git

1. 2 结果

从0开始入门ssm-crm系统实战_第1张图片

2 分析需求

我们需要做一个客户系统,使用者可以在系统上面保存、编辑、删除、客户信息。

3 技术选型

这次我们选择 ssm 三大框架搭建系统的后端,前端页面的话用 JSP 以及 JQuery EasyUI;数据库使用 MySQL;项目构想使用 Maven 工具。

技术 作用
Spring 管理对象,管理事务等
SpringMVC 路径跳转,请求访问等
Mybatis 数据获取等
JQuery EasyUI 页面展示等
MySQL 存取数据等
IDEA 快速写代码等
Navicat 数据库可视化软件

4 数据库

我们需要保存客户的名字、性别、联系方式和地址,因此我们的数据库脚本如下

CREATE table t_customer(
    id int PRIMARY KEY auto_increment,
    name VARCHAR(20),
    gender char(1),
    telephone VARCHAR(20),
    address VARCHAR(50)
);

5 Maven 管理

5.1 jar 包

一次性导入我们需要的jar,依赖如下

 
        
            junit
            junit
            4.11
            test
        
        
            org.springframework
            spring-web
            4.3.3.RELEASE
        
        
            org.springframework
            spring-webmvc
            4.3.3.RELEASE
        
        
            org.apache.commons
            commons-pool2
            2.4.2
        
        
            commons-dbcp
            commons-dbcp
            1.4
        
        
            org.mybatis
            mybatis
            3.4.6
        
        
            mysql
            mysql-connector-java
            5.1.26
        
        
            org.springframework
            spring-tx
            4.3.3.RELEASE
        
        
            org.springframework
            spring-core
            4.3.3.RELEASE
        
        
            org.springframework
            spring-beans
            4.3.3.RELEASE
        
        
            org.springframework
            spring-context
            4.3.3.RELEASE
        
        
            org.springframework
            spring-context-support
            4.3.3.RELEASE
        
        
            org.springframework
            spring-jdbc
            4.3.3.RELEASE
        
        
            org.springframework
            spring-expression
            4.3.3.RELEASE
        
        
            org.springframework
            spring-aspects
            4.3.3.RELEASE
        
        
            org.mybatis
            mybatis-spring
            1.3.3
        
        
            org.springframework
            spring-aop
            4.3.3.RELEASE
        
        
            org.projectlombok
            lombok
            1.16.12
        
        
            com.fasterxml.jackson.core
            jackson-annotations
            2.6.0
        
        
            com.fasterxml.jackson.core
            jackson-databind
            2.6.0
        
        
            com.fasterxml.jackson.core
            jackson-annotations
            2.6.0
        
    

5.2 编译问题

可能当我们编译的时候,我们发现 webapp 的文件并没有编译进来,我们需要在 pom.xml 中加入如下,告诉 Mavne 需要编译特定文件。


   
        
            src/main/webapp
            true
        
    

6 划分层次

来到这里的话,我们需要建立文件夹,准备开始写代码。一般按照套路的话,我喜欢如下的规则

文件夹 作用
controller 控制层代码
domain 实体类代码
dao Mapper代码
service 服务层代码

7 实体类代码

我们根据数据库字段编写实体类代码,代码如下,我使用了 lombok 框架,这个东西需要 IDEA 安装一个 lombok 插件。

package com.buer.domain;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

/**
 * @Description:
 * @Author: boolean
 * @Date: 2019/12/22 11:51
 */

@Getter
@Setter
@ToString

@AllArgsConstructor
public class Customer {
    private  Integer id;
    private String name;
    private String gender;
    private String telephone;
    private String address;
}

有个问题,这些字段是怎样和数据库字段一一对应的呢?下面揭晓。

8 Mapper代码

这里我们需要的 Mybatis 要上场了,首先我们需要如下Mapper代码

package com.buer.dao;

import com.buer.domain.Customer;

import java.util.List;

public interface CustomerMapper {
    /**
     * 添加客户
     */
    void saveCustomer(Customer customer);

    /**
     * 查询所有客户
     * @return
     */
    List list();

    /***
     * 查找某个客户
     * @param id
     * @return
     */
    Customer findById(Integer id);
}

9 Mapper 对应的 xml

有了 Mapper 代码,我们需要给 Mapper 配上相应的 xml 文件。如下






    
    
        INSERT INTO ssm.t_customer
            (
            NAME,
            gender,
            telephone,
            address
            )
            VALUES
            (
            #{name},
            #{gender},
            #{telephone},
            #{address}
            )
    

    

    

解答上面的问题,实体类字段是怎样和数据库字段一一对应,通过 resultType 来自动映射。

10 服务层代码

先来接口层的代码。代码如下

package com.buer.service;

import com.buer.domain.Customer;

import java.util.List;

public interface IcustomerService {
    /**
     * 添加客户
     */
    void saveCustomer(Customer customer);

    /**
     * 返回所有数据
     * @return
     */
    List list();

    /**
     * 修数据
     * @return
     */
    Customer findById(Integer id);
}

然后实现接口,代码如下

package com.buer.service.Impl;

import com.buer.dao.CustomerMapper;
import com.buer.domain.Customer;
import com.buer.service.IcustomerService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

/**
 * @Description:
 * @Author: boolean
 * @Date: 2019/12/22 18:28
 */
@Service("customerService")
public class IcustomerServiceImpl implements IcustomerService {
    @Resource
    private CustomerMapper customerMapper;
    @Override
    @Transactional
    public void saveCustomer(Customer customer) {
        customerMapper.saveCustomer(customer);
    }

    @Override
    public List list() {
        return customerMapper.list();
    }

    @Override
    public Customer findById(Integer id) {
        return customerMapper.findById(id);
    }
}

这里我们看到@Service("customerService"),@Resource, @Transactional,这些注解他们的作用是啥子哦?请看下面

注解 作用
@Service("customerService") 告诉 Spring, 这是一个叫 customerService 的东西,你要照顾好她,给他在初始化的时候创建一个对象。
@Resource Java里面的注解,注入对象
@Transactional 告诉 Spring,需要开始事务

11 控制层代码

这里就是 SpringMVC 的舞台了。代码如下

package com.buer.controller;

import com.buer.domain.Customer;
import com.buer.service.IcustomerService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;
import java.util.List;

/**
 * @Description:
 * @Author: boolean
 * @Date: 2019/12/22 18:50
 */

@Controller
@RequestMapping("/customer")
public class CustomerController {

    @Resource
    private IcustomerService service;
    @RequestMapping("/index")
    public String test(){
        System.out.println("ssss");
        return "index";
    }


    @RequestMapping("/save")
    public String save(Customer customer){
        System.out.println("save");
        service.saveCustomer(customer);
        return "success";
    }

    @RequestMapping("/list")
    @ResponseBody
    public List list(){
        System.out.println("list");
        return service.list();
    }

    @RequestMapping("/findById")
    @ResponseBody
    public Customer findById(Integer id){
        System.out.println("findById");
        return service.findById(id);
    }
}
注解 作用
@Controller 告诉 SpringMVC, 这是你负责的代码
@RequestMapping("/save") 告诉 SpringMVC,用 “/save”路径访问
@ResponseBody 告诉 SpringMVC,需要返回JSON

以上就是代码的编写,但是还没有完成哈,我们需要一些配置文件。

12 jdbc.properties

我们要连接数据库,代码如下

jdbc.url=jdbc:mysql://localhost:3306/ssm
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.user=root
jdbc.password=123456

13 applicationContext.xml

我们要告诉 Spring 连接数据库,以及我们写的代码在哪里,怎么去操作我们的代码。代码如下




    
    

    
    
        
        
        
        
        
        
    

    
    
        
        
        
        
    
    
    
    
        
        
    

    
    

    
    
    
        
    
    
    

14 spring-mvc.xml

我们需要告诉 SpringMVC,他需要的代码在哪里,怎么去操作我们的代码

15 web.xml

我们需要启动项目了,以及一些字体指定。代码如下



  01.mybatis
  
  
    CharacterEncodingFilter
    org.springframework.web.filter.CharacterEncodingFilter
    
      encoding
      utf-8
    
  
  
    CharacterEncodingFilter
    /*
  
  
  
    DispatcherServlet
    org.springframework.web.servlet.DispatcherServlet
    
    
      contextConfigLocation
      classpath:spring-mvc.xml
    
  
  
    DispatcherServlet
    *.action
  


  
  
    org.springframework.web.context.ContextLoaderListener
  
  
  
    contextConfigLocation
    classpath:applicationContext.xml
  

这里的话,后端就搭起来了。

16 页面编写

16.1 index.jsp

我们需要编写首页,代码如下

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>



  
    booleanbl 公众号 客户关系管理系统
    
    
    
        
    
    
    
    
    
    
    

    
  
  
   
      
    
欢迎你,[超级管理员],你使用[192.156.21.22]IP登录!
切换风格
default
gray
black
bootstrap
material
metro
booleanbl出品©2018版权所有
欢迎登录booleanbl客户关系管理系统

16.2 customer_manage.jsp

我们需要详情页,代码如下

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>



  
    客户管理   
    
    
        
    
    
    
    
    
    
    
    
  
  
  
    
<%--提供id隐藏域 --%> 客户姓名:
客户性别:
客户手机:
客户住址:
保存

完成

常见问题

java-lang-illegalargumentexception-no-converter-found-for-return-value-of-type

原因是没有转换json返回

  1. 在 CustomerController 上添加 @ResponseBody
  2. 需要添加 jackson 依赖

你可能感兴趣的:(从0开始入门ssm-crm系统实战)