博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SSM项目实战 —— 物流管理系统的实现
阅读量:3962 次
发布时间:2019-05-24

本文共 4950 字,大约阅读时间需要 16 分钟。

一 、项目准备

项目分层

  • action 层:数据交互;
  • service 层:访问数据库表的服务类,供 action 调用;
  • dao 层:各实体对象执行数据操作
  • db 层:执行 sql 代码
  • entity 层:对变量的 get./set 封装

项目根据原先的物流管理进行重写,之前是使用的servlet进行编写的,现在使用SSM相关的技术进行实现这个项目。

且是使用eclipes进行编写的,没有使用maven仓库。

二 、数据库的创建

在这里就不过多的累述了,在上面的那篇文章当中是有给出相关的数据库创建的代码,在这里使用的是同一个数据库。建库语句及相关建表等语句如下所示:(这里使用的是mysql数据库,不同的数据库语句有些许出入)

#该库用于 javaweb 物流管理系统项目CREATE DATABASE datadbUSE `datadb`#创建用户信息表CREATE TABLE IF NOT EXISTS user_pass(user_name CHAR(10) NOT NULL,pass CHAR(20) NOT NULL,Firstname CHAR(20) NOT NULL,Lastname CHAR(20) NOT NULL,addr CHAR(50) NOT NULL,PRIMARY KEY(user_name))ENGINE=INNODB DEFAULT CHARSET=utf8mb4;#给该表插入一条默认数据,作为初始的账号密码INSERT INTO user_pass VALUES('admin','123456','jack','Smith','湖南省长沙市雨花区香樟路 22 号');#查询该表的所有数据SELECT * FROM `user_pass`#创建一个订单表CREATE TABLE IF NOT EXISTS t_dingdan(td_id INT NOT NULL AUTO_INCREMENT,#给 id 这一列加上一个自增goods_name CHAR(10) NOT NULL,#货物名称goods_number CHAR(10) NOT NULL,#货物数量goods_baozhuang CHAR(10) NOT NULL,#货物包装goods_weight CHAR(10) NOT NULL,#货物重量goods_volume CHAR(10) NOT NULL,#货物体积fahuo_person CHAR(10) NOT NULL,#发货人shouhuo_person CHAR(10) NOT NULL,#收货人fahuo_date DATE NOT NULL,#发货日期fahuo_addr CHAR(10) NOT NULL,#发货地shouhuo_addr CHAR(10) NOT NULL,#目的地tuoyun_money CHAR(5) NOT NULL,#托运费shonghuo_money CHAR(5) NOT NULL,#送货费baoxian_money CHAR(5) NOT NULL,#保险费jiehuo_money CHAR(5) NOT NULL,#接货费pay_money CHAR(10) NOT NULL,#支付方式pick CHAR(10) NOT NULL,#取货方式single CHAR(10) NOT NULL,#制单PRIMARY KEY (td_id))ENGINE=INNODB DEFAULT CHARSET=utf8mb4;

及字段所代表的含义如下图所示:

在这里插入图片描述

三 、数据库连接及其相关方法实现 SpringJDBC

3.1 添加配置文件

数据库的连接使用Spring的jdbc进行连接。导入spring相关包以及数据库连接包mysql-connector-java-8.0.19.jar。相关的jar包导入之后,在src目录下添加配置文件applicationContext.xml,文件内容如下:

创建一个测试类 SpringDB 进行测试是否可以连接成功

public class SpringDB {
public static void main(String[] args) {
// 加载配置文件 ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); // 获取JdbcTemplate实例 JdbcTemplate jdTemplate = (JdbcTemplate) ac.getBean("jdbcTemplate"); System.out.println("连接成功"); }

3.2 相关实体类的定义及接口的定义

在实现方法之前,我们先构建一个实体类 Applicant,把数据库当中使用到的字段都放在这个类当中并且对这些属性进行 getset 封装。下列代码省略了getset封装以及部分字段。(避免文章的篇幅过于冗长)

private String user_name ; // 账号	private String pass; // 密码	private String Firstname;// 名	private String Lastname;// 姓	private String addr;// 地址	private String pageNo;// 页面编码	private int id;// id编号	private int td_id;// 订单id

再者定义一个接口 ApplicantDao,在接口当中写出这个项目可能会用到的相关方法,

public interface ApplicantDao {
// 带参数的查询 public ResultSet search(String sql, Object... obj); // 通过id查询 public Applicant findApplicantById(int id); // 查询所有账户及其密码 public List
findAllApplicant(); //获取所有数据的总和 public int GetAll(); // 增删改通用方法 insert delete update都是一个方法 public int update(String sql, Object... obj);}

随后使用一个服务类 ApplicantService 进行对接口实现,即实现接口当中的方法。声明JdbcTemplate属性及其setter方法,

第一个:查询所有账户及其密码

@Override	public List
findAllApplicant() {
String sql = "select * from user_pass"; // 创建一个新的BeanPropertyRowMapper对象 RowMapper
rowMapper = new BeanPropertyRowMapper
(Applicant.class); // 执行静态的SQL查询,并通过RowMapper返回结果 return this.jdbcTemplate.query(sql, rowMapper); }

第二个:查询一个表当中有多少条的数据

@Override	public int GetAll() {
String sql = "select count(*) from t_dingdan "; return this.jdbcTemplate.queryForObject(sql, Integer.class); }

在这里就会有一个版本相关的问题吧,在spring3.2.2支持 queryForInt(String) 方法,但spring4.2.0不支持这个方法,他只支持 queryForObject(String sql, class requiredType) 这个方法。所以你的jar包是支持queryForInt方法的话可以直接使用这条语句:

Integer num = jdbcTemplate.queryForInt(sql);

编写了两个方法之后也进行测试一下吧,在前面那个连接数据库的这个类当中进行测试

使用以下代码对这两个方法进行测试:放在main方法当中,运行java代码查看结果(注:数据表当中需要有数据)

ApplicantDao ApplicantDao = (ApplicantDao) ac.getBean("ApplicantDao");	//进行测试,获取用户表所有数据	List
appList = ApplicantDao.findAllApplicant(); for (Applicant applicant : appList) {
System.out.println(applicant); } //测试获取订单表的总条数 int num = ApplicantDao.GetAll(); System.out.println(num);

测试结果如下图所示:

在这里插入图片描述

在这里就可以获取到数据了,其余方法使用相同的代码进行实现。

3.3 控制器类对路由实现

第一,先读取相关的配置文件,并且定义对应的方法,

ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");	JdbcTemplate jdTemplate = (JdbcTemplate) ac.getBean("jdbcTemplate");	System.out.println("连接成功");	ApplicantDao ApplicantDao = (ApplicantDao) ac.getBean("ApplicantDao");

使用SpringMVC当中的控制器进行实现: 下图为登录的方法整体逻辑实现,先获取jsp页面当中的用户输入,再去到数据库当中进行查询。再决定跳转的目标页面。

在这里插入图片描述

在这里进行页面跳转的时候,在配置文件当中还需要对springmvc进行配置,防止其对css等文件拦截,使用下述代码段。

而后续Java代码的实现跨越参考由javaweb 的 servlet 修改过来,基本逻辑不变。

四 、使用Mybatis对SpringJDBC进行抽离

4.1 mybatis的基本配置

4.2 mybatis的相关的查询语句

4.3 数据封装

对配置文件都配置完成之后同理需要进行测试,在这里使用一个Load类进行用于测试,也相当于把这个加载Mybatis当中的语句进行抽离出来,减少控制器代码长度。

在这里插入图片描述

简单的实现,之后我们在控制器当中对原先使用SpringJDBC的代码进行注释,替换上MyBatis实现的代码,先创建这个Load类对象,之后通过对象条用所对应的方法。

在这里插入图片描述

在这里的mybatis的实现过程中,在有where子句且条件为user_name为?的时候,在传入一个String对象任然会报错,在这里我们使用字符串拼接,给字符串加上单引号即可。

至此整个javaweb项目修改完成,这样就是一个有SSM实现的javaweb项目了。

转载地址:http://rwqzi.baihongyu.com/

你可能感兴趣的文章