喜欢就点个赞呗!
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 结果
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 公众号 客户关系管理系统
booleanbl出品©2018版权所有
16.2 customer_manage.jsp
我们需要详情页,代码如下
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
客户管理
完成
常见问题
java-lang-illegalargumentexception-no-converter-found-for-return-value-of-type
原因是没有转换json返回
- 在 CustomerController 上添加
@ResponseBody
- 需要添加 jackson 依赖