全网最详细的零基础动态web项目集成mybatis框架实现增删改查系统(案例+源码)

环境准备

此系统使用的环境为

  1. Eclipse
  2. jdk1.8
  3. .mysql数据库
  4. tomcat 8 .5
  5. 数据库工具:navicat

环境不会配置的请挪步到我的另一篇文章
eclipse离线搭建maven项目,配置本地仓库,并创建mybatis项目

问题分析

本案例将针对商品系统中的数据库 db_goods 中的商品表 tb_goods 做一个详细的展示,该表设计如下:

字段 类型 长度 非空 说明
id int 11 主键、自增
name varchar 32 商品名称
price decimal (6,2) 商品价格
store_number int 5 商品库存
goods_type varchar 6 商品类型(实物,虚拟交易物品)
in_time datetime 商品入库时间

在本案例中,将针对该数据表实现增删改查。

实现

创建数据库、数据表、添加测试数据

打开mysql服务

方式1.使用指令打开mysql服务

net start mysql

方式2.从任务管理器中打开(适合小白)
打开任务管理,找到服务选项,往下一直划,找到mysql服务,如果状态显示停止,则右键该服务选择运行。
在这里插入图片描述

连接mysql并创建数据库

服务打开后,使用navicat软件进行连接。
在这里插入图片描述

从问题分析中,我们分析出,数据库名为db_goods,表名为tb_goods。
使用navicat软件创建数据库
在这里插入图片描述
输入数据库名,选择编码和排序规则。

在这里插入图片描述
创建完成后即在数据库列表栏多了一个数据库。
在这里插入图片描述

根据设计创建数据表

双击打开前面创建的数据db_goods。打开后颜色会发生变化,不再是灰色。然后右键选择新建表。
在这里插入图片描述
根据表的设计规则输入表的设计信息。其中id字段需要添加主键和自动递增两个设置。
在这里插入图片描述
表格设计完成,点击保存,在弹出的输入框内输入表名tb_goods(从问题中抽取出来的)。
在这里插入图片描述
点击确定后,该数据库内就会多出一个表。
在这里插入图片描述

添加测试数据

双击该tb_goods数据表进入该表的预览页面。点击面板下方的添加符号即可进行数据的添加。
在这里插入图片描述
备注:在录入数据时,由于id字段是自增的,所以不需要再该列输入值。

导出数据库脚本

当数据添加完成后,可以通过可视化操作导出数据库脚本。右键点击需要导出的数据库,选择转储SQL文件,类型为结构和数据。
在这里插入图片描述
存储位置选择桌面即可。
在这里插入图片描述
导出数据库的目的是为了保存当前设计的表和存储的数据内容。下次需要时可以将该脚本导入到数据库之中,即可使用。

项目实现

创建动态web项目

打开Eclipse,点击左上角的工具栏,找到File选项。找到Dynamic Web Project选项进行创建。
在这里插入图片描述
如果没有该选项,则找到最后一个Other选项。
在这里插入图片描述
在弹出框中先找到web目录进行展开,即可找到Dynamic Web Project选项了。
在这里插入图片描述
然后点击Next选项。
在弹出框内输入项目名即可。当然,其他那些默认配置有需要的请自行更改。
在这里插入图片描述
项目创建成功后,目录结构如下图所示。
在这里插入图片描述
项目创建完成后,导入此次案例需要的jar包。每个jar包对应的介绍如下

jar包 说明
mysql-connector-java-5.1.14.jar mysql连接的jar包
mybatis-3.4.6.jar mybatis数据库框架所依赖的jar包
jstl-1.2.jar jstl标签库,jsp页面中使用
standard-1.1.2.jar 标准库,配合jstl标签库使用

将上述四个标签库添加至项目依赖目录,即WebContent目录下Web-Info内的lib文件夹下。
在这里插入图片描述
初次复制进来,需要右键选中这些标签,然后选择Build Path 选择Add to Build Path。将这些jar包添加至项目构建路径。否则是无法在项目中生效的。

配置mybatis

在项目的src目录下创建mybaits-config.xml文件。
在这里插入图片描述
其配置内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<!-- 配置实体类所在的包 -->
	<typeAliases>
		<package name="com.lvan.pojo"/>
	</typeAliases>
	<environments default="devlopment">
		<environment id="devlopment">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver"/>
				<property name="url" value="jdbc:mysql://localhost:3306/db_goods"/>
				<property name="username" value="root"/>
				<property name="password" value="root"/>
			</dataSource>
		</environment>
	</environments>
	<!-- 配置映射文件所在的包 -->
	<mappers>
		<package name="com.lvan.mapper"/>
	</mappers>
</configuration>

其中主要记清楚两个包和mysql连接池的配置信息即可。
根据配置文件创建对应的包。
在这里插入图片描述
如上述结构即可。

根据数据表创建实体类

在pojo包下创建的对应的实体类。
类名命名规则一般为数据表前缀去掉,后续单词首字母大写,如有下划线的也去掉,下划线后的首字母大写。遵循驼峰式命名规则。
如tb_goods 的实体类名为Goods
在这里插入图片描述
像这种简单的案例的话,属性名保持和字段名一致即可。但是要注意数据类型兼容。
正常来说 decimal 对应double int 对应int 其他用String基本都可以实现兼容,但是不建议全使用String。

生成实体类中的封装方法

先生成setter和getter方法。
在这里插入图片描述

在这里插入图片描述
选下方的Generate按钮即可生成。
效果图如下。
在这里插入图片描述

生成toString方法

在这里插入图片描述
在这里插入图片描述
效果图如下
在这里插入图片描述
到这一步,实体类即创建完成。

接口编写

根据mybatis-config.xml配置文件所述,映射文件应该写在com.lvan.mapper包内,注意是使用的package标签才能声明扫描范围为包。如果使用mapper标签则需要指定到对应的mapper.xml文件
在这里插入图片描述
在mapper包下,创建一个接口文件。
在这里插入图片描述
接口文件的名字为实体类名后跟Mapper 如下:
在这里插入图片描述
即在该接口文件中声明好要实现的方法即可。
根据需求,本案例中需要实现对商品表的增删改查。因此查询商品声明的接口如下:
在这里插入图片描述
下述是接口示例:

  1. 查询商品 根据关键词进行搜索,如果查询的内容为空字符,那么就为全部查询
List<Goods> query(@Param("key")String key);
  1. 更新商品 更新商品的话使用实体类对象进行更新,即该实体类对象有哪些属性就更改表的哪些字段
int updateGoods(Goods goods);
  1. 添加商品 添加商品也是要实体类对象进行添加,sql语句中使用对象的属性进行取值
int addGoods(Goods goods);
  1. 删除商品 删除商品是根据id进行删除,即删除指定编号的那条数据记录
int deleteGoods(@Param("id")String id);
  1. 根据id获取对应的实体对象,编辑商品时可以回显商品信息到页面
Goods getGoodsById(@Param("id")String id);

代码结构如下:
在这里插入图片描述
也即是上述接口声明完成后,基本可以实现对商品表的管理了。

映射文件编写

在上面的教程中,已根据案例所需编写了对应的接口。本节的内容是对上述接口进行一一实现。

  1. 创建接口对应的映射文件,后缀名是.xml
    其内容大致如下:
<?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="xxx.xxx.XXXMapper">

</mapper>

注意:该文件名需要与接口文件名保持一致,否则会出现无法匹配等问题。
2. 绑定命名空间
需要保持接口文件和映射文件的文件名一致,可以理解为穿情侣装。
在这里插入图片描述
3. 实现接口
查询接口的实现
在这里插入图片描述
实现代码如下:

<?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文件就是对应的男朋友,女朋友负责吩咐,男朋友负责做事-->
<mapper namespace="com.lvan.mapper.GoodsMapper">
	<!-- 查询 -->
	<select id="query" resultType="Goods">
		select * from tb_goods where name like concat('%',#{key},'%')
	</select>
</mapper>

更新接口的实现
在这里插入图片描述
更新接口的代码如下:

	<!-- 更新商品的实现-->
	<update id="updateGoods">
		update tb_goods set
		<if test="name!=null">
			name=#{name},
		</if>
		<if test="price!=0.0">
			price=#{price},
		</if>
		<if test="store_number!=0">
			store_number=#{store_number},
		</if>
		<if test="goods_type!=null">
			goods_type=#{goods_type},
		</if>
		<if test="in_time!=null">
			in_time=#{in_time},
		</if>
		id=#{id}
		where id=#{id}
	</update>

添加接口的实现
在这里插入图片描述
具体的实现代码如下:

	<!-- 添加商品 -->
	<insert id="addGoods">
		insert int tb_goods(name,price,store_number,goods_type,in_time)
		values (#{name},#{price},#{store_number},#{goods_type},now())
	</insert>
  1. 删除接口实现
    在这里插入图片描述
    实现代码如下:
<delete id="deleteGoods">
		delete from tb_goods where id=#{id}
</delete>
  1. 根据id获取指定商品接口实现在这里插入图片描述
    代码实现如下:
<!-- 获取指定id的商品 -->
	<select id="getGoodsById" resultType="Goods">
		select * from tb_goods where id=#{id}
	</select>

测试实现的接口

  1. 编写SqlUtil工具包
    创建com.lvan.util包 并创建测试类
    在这里插入图片描述
  2. 编写测试所需的工具类
    在这里插入图片描述
    实现代码如下:
package com.lvan.util;

import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class SqlUtil {
	//1.声明静态的SqlSession对象 用于获取mysql连接
	public static SqlSession sqlSession;
	static {
		try {
			//2.读取mybatis配置文件 
			Reader reader=Resources.getResourceAsReader("mybatis-config.xml");
			//3.根据配置对象生成对应的工厂对象 
			SqlSessionFactory sf=new SqlSessionFactoryBuilder().build(reader);
			//4.打开连接
			sqlSession=sf.openSession();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public static void main(String[] args) {
		System.out.println(sqlSession);
	}
}
  1. 编写测试用例
    创建测试包,编写测试类
    在这里插入图片描述
    测试查询所有商品对象
    在这里插入图片描述
package com.lvan.test;

import java.util.List;

import com.lvan.mapper.GoodsMapper;
import com.lvan.pojo.Goods;
import com.lvan.util.SqlUtil;

public class Test {
	public static void main(String[] args) {
		//获取接口对象 代理对象
		GoodsMapper goodsMapper=SqlUtil.sqlSession.getMapper(GoodsMapper.class);
		List<Goods> goods=goodsMapper.query("");//传递空值 查询所有
		System.out.println("查询全部:"+goods);
	}
}

运行截图如下:
在这里插入图片描述
搜索功能测试用例如下:

GoodsMapper goodsMapper=SqlUtil.sqlSession.getMapper(GoodsMapper.class);
		List<Goods> goods=goodsMapper.query("Q");//传递空值 查询所有
		System.out.println("关键词查询:"+goods);

运行结果如下:
在这里插入图片描述
其他功能便不再测试,各位看官自行根据接口需求编写测试用例。

实现页面

说明:使用一个IndexServlet 进行实现,不同的功能通过参数action进行区分

首先创建一个包,名为com.lvan.servlet 并在该包下创建一个IndexServlet
在这里插入图片描述

在这里插入图片描述

删除其他多余的不要的方法只保留一个doGet方法

在这里插入图片描述

主页内容渲染

  1. 实现跳转到主页的功能
    实现步骤:
    1.1 定义全局代理对象
    在这里插入图片描述
    设置编码规则和响应类型
    在这里插入图片描述
//设置编码规则
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		//设置响应的内容类型
		response.setContentType("text/html");

1.1 取action参数 如果不存在,则代表去首页
在这里插入图片描述
1.2 编写页面
在Web-content目录下创建一个index.jsp页面
在这里插入图片描述

在这里插入图片描述
更改编码规则:
在这里插入图片描述
改为下面的这个
在这里插入图片描述
编写表格标签,用户渲染数据 根据实体类的属性声明对应的表头 以及操作列
在这里插入图片描述
渲染数据之前,需要导入c:foreach标签所需要的标签库
在这里插入图片描述
在这里插入图片描述
这样就实现了页面数据的渲染
效果图如下:
在这里插入图片描述
1.3 搜索功能实现
定义:传入的action值为search 则代表搜索 search可以自定义
在这里插入图片描述
在表格前面加一个搜索栏 内容如下。
在这里插入图片描述
测试效果如下:
在这里插入图片描述
1.4 删除操作
在这里插入图片描述
页面中添加删除按钮 注意请求路径是/项目名/服务名
在这里插入图片描述
测试:
点击编号为4的那一项
在这里插入图片描述
回到主页刷新
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_33183456/article/details/123539885