文章目录

  • 环境准备
  • 问题分析
  • 实现
    • 创建数据库、数据表、添加测试数据
      • 打开mysql服务
      • 连接mysql并创建数据库
      • 根据设计创建数据表
      • 添加测试数据
      • 导出数据库脚本
    • 项目实现
      • 创建动态web项目
      • 配置mybatis
      • 根据数据表创建实体类
      • 生成实体类中的封装方法
      • 生成toString方法
    • 接口编写
      • 映射文件编写
      • 测试实现的接口
    • 实现页面
      • 主页内容渲染

环境准备

此系统使用的环境为

  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的那一项

回到主页刷新

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

  1. 零基础学SQL(六、数据的增删改查简单语句)

    目录 前置建表 一.数据的插入 1.插入数据语法 1.1.插入完整的行 1.2.插入行的一部分 1.3 .插入多行 1.4.插入某些查询的结果 二.数据的简单查询 1.查询数据语法 三.数据的修改 1 ...

  2. (Java/JDBC)对MySQL数据库实现基础的增删改查操作(含源码)

    文章目录 前言 注(常用PreparedStatement方法) 源码展示 前言 实现数据库连接 → Java连接MySQL数据库(含源码) (实现简单的增删查改更改正确的SQL语句即可) 增:ins ...

  3. 关于美团:零基础搭建获利的美团饿了么优惠券CPS小程序附源码

    关于美团:零基础搭建获利的美团饿了么优惠券CPS小程序附源码 下面是无裂变版本的搭建教程. 源码地址:http://y.mybei.cn 部署步骤 部署后台,填资料 登录后台 http://q.myb ...

  4. sql增删改查_Sirvia 一套web端增删改查系统

    众所周知,后端开发的一个重要组成部分就是数据库,数据的作用简单来说就是将网站的用户数据存起来,至于数据库的什么特性,一些奇技淫巧这里就不便赘述了,因为今天的主角是Sirvia--一套web端增删改查系 ...

  5. MySQL基础知识-MySQL概述安装,单表增删改查,函数,约束,多表查询,事物

    MySQL基础知识-MySQL概述安装,单表增删改查,函数,约束,多表查询,事物 前言 1.MySQL概述 1.1数据库相关概念 1.2MySQL数据库 1.2.1版本 1.2.2下载 1.2.3安装 ...

  6. web分页显示功能(“小案例:实现web端对客户资源的增删改查”里面的一个功能)

    分页显示功能("小案例:实现web端对客户资源的增删改查"里面的一个功能) (2016年11月19日18:15:07 上课学习总结) 效果展示: 第n页/共M页   首页  上一页 ...

  7. c#web窗体实现对数据库的增删改查,学生管理信息系统~vs2010+access2010

    @TOC解决方案管理器目录结构 c#web窗体实现对数据库的增删改查,学生管理信息系统~vs2010+access2010 以下是web程序课程后做的期末项目,前端以及页面逻辑结构使用vs搭建,后端服 ...

  8. Web课程设计-仿当当网-增删改查-java+jsp+mysql-期末大作业

    仿当当网web课程设计-jsp+java+mysql-mvc-期末大作业 Web课程设计 一.系统简介 二.系统开发及运行环境 三.系统设计 四.系统实现 Web课程设计 这篇文章是为了记录自己在we ...

  9. 零基础搭建获利的美团饿了么优惠券CPS小程序(附源码)

    1.先上图 2.前言 某天下午,我正在公司认真的写着代码,突然我的手机弹了一个通知,我赶紧抓起手机看看(给自己一个摸鱼的理由) 让我看看到底是谁发消息打扰我认真的工作啊. 害,原来是某个群转发了一个外 ...

  10. 干货来袭!!!3天0基础Python实战项目快速学会人工智能必学数学基础全套(含源码)(第1天)线性代数篇:矩阵、向量及python实战

    第1天:线性代数篇:矩阵.向量.实战编程 第2天:微积分篇:极限与导数.梯度下降.积分.实战编程 第3天:概率分析篇:条件概率与全概率.贝叶斯公式.实战项目 目录 前言 一.矩阵在AI中的应用 二.矩 ...

最新文章

  1. kafka入门:简介、使用场景、设计原理、主要配置及集群搭建--转载
  2. 尝试做了个Chrome浏览器的扩展程序,显示extensions的页面
  3. Xilinx 拥抱“新基建” 发力大中华区核心市场
  4. python去重复功能_python包中的statmodels,如何处理完全重复的功能?
  5. stm32 CRC-16校验代码,单片机ModBUS-CRC16校验
  6. macOS 12 Monterey实用功能
  7. python中unicode编码表_python unicode 编码整理
  8. 热门编程语言间的差异
  9. plt.plot()有无分号结果不同
  10. JavaWeb - 工作窃取算法 Work-Stealing
  11. EasyExcel 读.CSV 文件数据为null或乱码问题
  12. 感人!华为员工累死,同事模仿鲁迅写《纪念胡新宇君》(转贴)
  13. Android KitKat 外部存储权限分析
  14. 文字排版--删除线(text-decoration:line-through)
  15. Windows Server 2016修改计算机名
  16. 力扣(98.107)补9.10
  17. 如何进行手机投屏设置,屏幕传输达到最快速度
  18. Linux下USB驱动框架分析【转】
  19. linux ar -x64,Linux ar 命令 command not found ar 命令详解 ar 命令未找到 ar 命令安装 - CommandNotFound ⚡️ 坑否...
  20. UCK Network为区块链生态环境搭建一个完善自循环供水系统

热门文章

  1. 室内定位蓝牙信标安装规划问题
  2. 【PBR系列五】镜面反射BRDF模型(Specular BRDF)及实现效果
  3. Firefox火狐浏览器关闭更新提示
  4. MyBatis-Ext,方便易用的MyBatis增强扩展
  5. 基于OLAP的时间维度设计
  6. 百果园app系统开发b2c模式详解
  7. 深圳一普通中学老师工资单曝光,秒杀程序员
  8. 电脑如何共享无线网络wifi给手机、其他电脑
  9. FDTD Solutions自学整理笔记入门教程(2):PML
  10. Scholar ID