SSM项目实战 —— 物流管理系统的实现

tech2024-10-28  10

一 、项目准备

项目分层

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

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

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

二 、数据库的创建

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

#该库用于 javaweb 物流管理系统项目 CREATE DATABASE datadb USE `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,文件内容如下:

<?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:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd"> <!-- 1.配置数据源 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <!--数据库驱动 --> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <!--连接数据库的url --> <property name="url" value="jdbc:mysql://localhost/datadb?serverTimezone=UTC" /> <!--连接数据库的用户名 --> <property name="username" value="root" /> <!--连接数据库的密码 --> <property name="password" value="root" /> </bean> <!-- 2.配置JDBC模板 --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <!-- 默认必须使用数据源 --> <property name="dataSource" ref="dataSource" /> </bean> </beans>

创建一个测试类 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<Applicant> findAllApplicant(); //获取所有数据的总和 public int GetAll(); // 增删改通用方法 insert delete update都是一个方法 public int update(String sql, Object... obj); }

随后使用一个服务类 ApplicantService 进行对接口实现,即实现接口当中的方法。声明JdbcTemplate属性及其setter方法, 第一个:查询所有账户及其密码

@Override public List<Applicant> findAllApplicant() { String sql = "select * from user_pass"; // 创建一个新的BeanPropertyRowMapper对象 RowMapper<Applicant> rowMapper = new BeanPropertyRowMapper<Applicant>(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<Applicant> 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等文件拦截,使用下述代码段。

<mvc:resources location="/css/" mapping="/css/**" /> <!-- 样式 --> <mvc:resources location="/images/" mapping="/images/**" /> <!-- 图片 --> <mvc:resources location="/js/" mapping="/js/**" /> <!-- javascript -->

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

四 、使用Mybatis对SpringJDBC进行抽离

4.1 mybatis的基本配置

参考此文(MyBatis的第一个程序测试),在这不过多赘述。

4.2 mybatis的相关的查询语句

参考此文(MyBatis的增删改操作 insert update delete)

4.3 数据封装

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

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

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

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

最新回复(0)