毕业设计-1

很快大学四年时光就只剩下了最后一学期,在大学的最后阶段要完成的就是毕业设计了,在大四上半学期的时候定下的毕设研究课题是:基于算法的配送路线优化系统。确定了研究课题之后,首先开始查找资料,当前路线优化问题主要有几个算法:遗传算法,蚁群算法,禁忌搜索算法,粒子群算法等,以及各种混合算法,经过自己对整个课题的分析和思考,最后是确定使用蚁群算法。同时因为自己在学习java web相关的知识,所以打算在研究蚁群算法的同时,使用java web相关技术加以实现。同时附上课题要求:
现有一配送网络,图中P点配送中心,其余A-I为客户的位置距离固定,各边上的数字为公里数,括号内的数字为需输送到各接货点的货物量,单位为吨。假设有最大载货量为2吨和5吨的两种货车,并限制车辆一次运行路线距离不超过35公里,每个派送点只由一辆车服务一次,每辆车只能服务一条路线,车辆一律由配送中心出发,完成任务之后返回配送中心,快递车辆配送过程中无装货,只考虑卸货。每个卸货点时间固定为5分钟,车辆每小时行驶距离为10千米,每个派送人员工作时间8小时,请参考信息内容通过算法和程序计算所需的车辆数,最优路径和配送时间。
在这里插入图片描述
3.7-3.8
既然整个项目是基于web技术构建,所以web的相关技术是必不可少的,首先是数据问题,web里面常用的数据持久化的工具是Mysql,为了使得自己有更深的映象,所以重新部署了mysql,同时部署web 数据持久框架Mybatis,在搭建mybatis框架的环境时,需要导入三个jar包,如下图:在这里插入图片描述
其中第三个为mysql数据库驱动文件,该文件版本与数据库版本有一个对应关系,由于先导入了jar包,所以后面就去查找了一下,得到了一个对应关系的表,如下:
Connector/J8.0.12支持Mysql8.0.12这些版本。
Connector/J 5.1 支持Mysql 4.1、Mysql 5.0、Mysql 5.1、Mysql 6.0 alpha这些版本。
Connector/J 5.0 支持MySQL 4.1、MySQL 5.0 servers、distributed transaction (XA)。
Connector/J 3.1 支持MySQL 4.1、MySQL 5.0 servers、MySQL 5.0 except distributed transaction (XA) support。
Connector/J 3.0 支持MySQL 3.x or MySQL 4.1。
3.9-3.10
在完成了mysql数据库的的部署之后,首先要解决课题中数据的问题,根据题目提供的信息,首先设计mysql的表,目前暂定的数据表一共有四个,分别是:网点表,车辆表,配送员表,路径表。详细信息如下:
在这里插入图片描述
暂定了要创建的数据表之后,接下来是在数据库中创建表并添加初始数据,初始数据以课题所给要求的数据,具体SQL代码如下:

create database transmission;
use transmission;
create table transNode(
id varchar(10) primary key,
unloadWeight double,
unloadTime double,
nodeType int not null
);
create table truck (
id varchar(10) primary key,
weight double,
length double,
speed double
);
create table driver (
id varchar(10),
hours double
);
create table path(
endPoint1 varchar(10),
endPoint2 varchar(10),
length double,
foreign key(endPoint1) references transNode(id), 
foreign key (endPoint2) references transNode(id)
);
insert into transNode values 
('P',0,0,0),('A',1.7,5,1),('B',0.8,5,1),
('C',1.3,5,1),('D',2.8,5,1),('E',1.9,5,1),
('F',3.5,5,1),('G',0.9,5,1),('H',0.3,5,1),
('I',1.2,5,1),('1',0,0,2);

insert into truck values
('A',2,35,10),('B',5,35,10);

insert into driver value('a',8);

insert into path values
('P','A',5),('P','B',8),('P','C',7),
('P','E',4),('P','F',12),('P','G',9),
('P','H',12),('P','I',6),('A','I',3),
('A','B',4),('B','C',3),('C','D',4),
('D','E',3),('E','F',10),('F','H',7),
('H','I',9),('C','1',5),('D','1',2),('E','1',2);

需要说明的是创建了表之后其中的数据应该由前端相应的数据输入及持久模块添加数据,现在添加的数据一方面是作为初始数据测试数据持久框架能否顺利从数据库读取数据,二是检查之前的设计思路是否有什么漏洞,方便及时修改。
3.16-3.20
完成了数据库相关的设计之后接下来的工作就是要将数据从数据库中取出来。在开始这项工作之前学习数据库持久框架mybatis的相关技术,所以就打算使用mybatis完成这项工作,但是因为学习的时候并没有十分深入,所以在使用的时候遇到了很多问题。mybatis有一个核心配置文件用于配置数据库连接和mybatis运行时所需的各种特性,所以首先需要配置该文件,该文件中有很多元素,具体参考了该文章:Mybatis配置文件详解
重点记录一些自己出错的元素:properties:通过resource属性指定外部文件,用于描述数据库连接的相关配置,该元素指定的外部文件database.properties 中存储着数据库连接的driver,url,username,password。.properties文件为键值对存储方式,如果这几个元素值有错会导致以下错误:

org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: java.sql.SQLException: Error setting driver on UnpooledDataSource. Cause: java.lang.ClassNotFoundException: Cannot find class: "com.mysql.jdbc.Driver"

为了解决这个个问题我在网上查找过很多博客和文章,最后将问题定位在四个元素的值上,不仅值要与用于连接的数据库的连接信息一直,同时还不能有多余的标点符号,否则就会出现上述错误。如果不使用外部文件存储数据库连接配置,也可以直接在配置文件中使用property 来设置,但如果要使用多个数据库的时候就还是使用外部文件更好,不仅使核心配置文件看起来更加的简洁,同时也有利于更改数据库的配置数据;mappers:用于配置具体的sql映射文件路径,sql映射文件可以有多个,用于存储不同的sql语句。在存储这个路径的时候我先使用的是从项目为根的绝对路径,但是在程序运行时却会报错:

Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource webStudy/resource/transNodeMapper.xml

这个问题纠结了我很久,找了很多文章却还是没有解决问题,最后自己想程序读取文件的时候可能是使用的是相对路径的查找方式,然后将路径进行了修改,然后程序突然可以运行了。虽然说读取文件时使用绝对路径和相对路径都是两种常用的方式,但是在这里却出现了绝对路径无法访问的尴尬问题,至于为什么会导致这个问题我尝试去查看了mybatis的源码,但是也没有得到答案,这个问题暂时会作为一个课余思考。
接下来是持久化类和sql映射文件。持久化类通常对应需求中的业务实体,一般采用POJO编程模型实现持久化类,持久化类对象中的属性要与数据库表中的字段名一致,为了能够取到数据库表中的所有数据。sql映射文件定义了sql语句,也是这个文件将sql语句从java代码中分离了出来,实现了sql语句的灵活配置,mapper文件中可以实现数据库表的增删改查,并使用对应返回类型将sql语句的执行结果返回。在编写这个文件时要注意其中的sql语句要能够直接在sql查询中运行,否则mybatis就会报错,其实就是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="transNodeMapper">
	<select id="id" resultType="int">
		select count(1) from transNOde where id="A"
	</select>
</mapper>

然后是mybatis的核心对象,也是在编写代码时必须的一部分。每个mybatis应用程序都已一个SqlSessionFactory对象的实例为核心,而该对象由SqlSessionFactoryBuilder对象构建获得。获得了SqlSessionFactory对象后可以进而获得SqlSession实例,该对象中包含了以数据库为背景的所有执行sql操作的方法,所以使用该实例来直接执行已映射的sql语句。在测试数据库连接的时候我使用Junit4来测试代码,具体如下:

package dao.transNode;

import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.log4j.Logger;
import org.junit.Before;
import org.junit.Test;

public class nodeTest {
	static final String COUNT_STRING = "transNodeMapper.id";
	Logger logger;
	private SqlSessionFactory sessionFactory;

	@Before
	public void setUp() throws Exception {
		try {
			String resource = "mybatis-config.xml";
			InputStream inputStream = Resources.getResourceAsStream(resource);
			sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}

	@Test
	public void test() {
		int count = 0;
		SqlSession session = null;
		session = sessionFactory.openSession();
		count = session.selectOne(COUNT_STRING);
		logger.debug("transNodeCount A:" + count);
		session.close();
	}
}

在完成了以上工作后我开始搭建项目所需的服务器,我使用的是tomcat7服务器,但是在搭建该服务器的时候却遇到了很多问题,首先是服务器文件路径问题,服务器文件存储路径不支持中文路径,存放好了文件之后需要安装服务器的服务,需要使用命令行安装服务,并在控制面板的服务中开启相关服务:
在这里插入图片描述
因为前面安装的时候忘了截图,所以这里会显示安装失败
需要注意的是需要自己手动设置两个环境变量,如上图为:CATALINA_HOME,CATALINA_BASE,都对应服务器文件的安装目录。这一点需要注意,当时安装这个服务器也是弄了我好久,因为eclipse里可以直接安装tomcat服务器,所以最先我是直接在那里面安装的,但是因为没有配置相关的环境变量,最后导致安装失败,服务器怎么也无法正常运行。后来自己手动安装,并且在网上查阅了相关的博客后才顺利完成了安装。
如图,服务中有一个tomcat的服务,安装成功后会有该服务,使用服务器时需要该服务保持启动状态
在这里插入图片描述
完成安装后还需要注意的是tomcat的端口问题,tomcat使用时默认会是用到8005,8009,8080三个端口,但是往往会因为8080端口被占用导致服务器无法正常启动,经过在网上查阅相关资料,一般有两种解决方法:1.关闭其他使用到了这三个端口的程序,为服务器腾出端口。2.在eclipse或服务器的配置文件中修改这三个端口号,改为没有被使用到的端口号,也可以保证服务器的正常使用。
至此,使用mybatis数据持久框架连接数据库并取回数据的这一工作基本完成,在这个过程中自己遇到了很多的问题,感觉自己把这个过程中可能遇到的问题都给踩了一遍,中途也是因为心态爆炸导致停了几天没有做,最后还是继续完成了工作。
如下图,完成了查询工作并返回呢sql语句的查询值:
在这里插入图片描述
后面将继续完成整个项目。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值