1准备环境:
1.创建一个新的项目模块:MVC_demo,导入需要的坐标 2.创建三层架构的包结构 3.创建数据库表tb_brand 4.创建实体类Brand(数据与数据库里面的数据对应) 5.导入Mybatis开发的基础环境
Mybatis-config.xml BrandMapper.xml BrandMapper接口
演示如下: 1.创建Web项目后导入webapp目录
2.导入坐标:
分别为mybatis坐标 mysql驱动包 servlet包 JSp包 JSTL包
3.创建三层架构的包结构
其中web放表现层的代码 service放业务逻辑层代码 mapper放数据访问层代码 util放工具类的代码 pojo放实体类代码
4.创建一个数据库表,并且加入信息:
SQL语句:
use db1
create table tb_brand(
-- 主键
id int primary key auto_increment,
-- 品牌名
brand_name varchar(30),
-- 企业名
company_name varchar(20),
-- 排序名称
ordered int,
-- 描述信息
description varchar(100),
-- 状态
status int
);
-- 添加数据:
insert into tb_brand (brand_name,company_name,ordered,description,status)
values
('三只松鼠','三只松鼠股份有限公司',5,'好处不上火',0),
('华为','华为技术有限公司',100,'华为致力于把数据世界带入每个人,每个家庭,每个组织,构建万物互联的智能世界',1),
('小米','小米科技有限公司',50,'are you ok',1);
select * from tb_brand;
5.创建一个跟数据库信息对应的实体类:
5.创建Mybatis配置文件,给配置文件起别名(该别名路径对应实体类的包路径):
6.创建mapper对应的SQL映射文件和mapper文件。
mapper文件:
2案例:查询所有:
需要完成的效果:
在html页面点击查询所有后,查询所有数据
如下图:
之前我们在Servlet里面添加用户信息时,是直接调用Dao层的,即mapper里面有数据库查询是否有某个用户信息的功能1,和添加用户信息的功能2,并且还有更多的功能,而SelectAllServelt类中调用功能12后,另外一个Servlet类调用功能12后又得重复调用功能12,而Servicer层,即是将功能12封装在一起,后面的Servlet类再次调用时,可以直接调用Service层里面的12功能。(增强代码复用性)
演示:
1.在BrandMapper类里面编写接口类的方法:
并且在SQL映射文件编写SQL语句:
并且在util里面创建SqlSessionFactory的工具类:
在service包里面创建BrandService类:
并且在里面调用SqlSessionFactory工具类:创建查询所有的方法调用Dao层的(mapper里面)的查询数据库功能。
在webapp里面创建一个index名称的html页面:
注意index名称的html当我们在浏览器没输入资源时,默认访问index名称的html页面:
在该html里面创建一个超链接:去访问selectAllServlet
超链接直接去关联Servlet
后面再web目录下创建Servlet类
将在Servlet里面获取到的数据存到request域中,再将request里面的东西转发到jsp里面去再在webapp里面创建一个jsp文件(注意名字跟Servlet域传过去的的路径名一样)
并且jsp文件的信息如下:
后面运行tomcat后直接访问该项目(不输入额外的路径)
点击查询所有后
页面自动跳转到Servlet路径资源中显示上面数据。
3 案例:添加数据
功能实现:
三层架构的分析:
如上点击新增按钮后,页面跳转到添加用户信息的页面,将用户信息添加进去后,点击提交,浏览器就会将请求数据发到Web层,接收数据后,封装为Brand对象,在调用Service层在数据库存储数据,后面再将数据转发到查询所有的Servlet中,将数据返回再将数据传到jsp中进行展示。
演示如下:
1.先在Dao层编写SQl映射文件和mapper的接口的方法:编写Dao层 分别编写查询添加数据方法。
2.再编写Service层代码:
并且调用SqlSessionFactoryUtils工具类
在Service层中创建一个方法,来进行添加的业务逻辑处理
3.编写页面:
在brand.jsp页面里面将新增按钮名字设置为add 使用javaScript来设置按钮单击事件后的超链接。
如上设置按键单击后跳转到超链接的标签:超链接跳转到输入添加数据的表单的页面
创建一个页面来添加数据提交数据,并且设置表单提交的路径:为addServlet资源路径
4编写Servlet页面:
首先获取service(业务层的对象)
并且创建变量来接收表单提交过来的数据,封装为一个Brand对象 将Brand对象使用业务层对象的add方法添加数据 后面转发到查询所有的Servlet资源中去再次访问查询所有的资源路径:
运行Tomcat后:点击查询所有:
点击新增:在新增页面输入信息:点击新增:
如果新增华为:
页面不会新增。
4.1修改—回显数据:
1.如下图,每次修改数据时,都要先将要修改的数据回显到页面中, 再对页面的数据进行修改后,提交到Service层,并对数据库数据进行修改
三层架构的分析:
首先在浏览器页面中给每个修改都设置一个超链接(并且传给该超链接一个值) Dao层Mapper接口中编写一个通过id来查询数据 Service编写一个方法调用Dao层的selectBuid(id) Web接收到id后,Servlet中调用Service查询Brand,再将修改的数据存储到request中,最后转发到修改页面中
演示:
1.编写Dao层代码:在mapper中创建一个通过id查询的方法,并且在SQL映射文件中编写SQL语句
2.编写Service层:
在Service里面编写一个selectByid方法,返回Brand对象
3.编写Web层代码:
首先编写页面:
给修改按钮关联一个超链接路径和提交的元素(即点击该按钮后,跳转到资源路径下面,并且将提交数据发过去)
创建一个Servlet接收修改按钮连接的超连接:
并且接收传过来的id通过id调用service来查询数据库中对应的数据(后面将获取到的Brand数据封装到request中) 最后将域转发到一个修改页面的jsp中
域转发到update.jsp后就可以在jsp中编写java代码,并且通过与中request里面设置的"brand"变量来设置修改页面中输入框的数据
4.2修改数据:
目的:在修改品牌页面修改回显数据后,数据修改
三层架构分析:
Dao层:在mapper和SQL映射语句中编写update方法 service中编写update方法调用Dao层mapper接口的方法 Web层,将修改品牌页面的数据提交转发到updateServlet中去,里面调用service里面的update方法来修改数据 最后域转发到查询所有Servlet中去
演示:
1>编写Dao层mapper中的update方法和SQL映射文件的SQL映射语句:
该处传递参数的语句是直接将对象传入(不用@Param()传参)
2>编写Service层:
3>编写Web层:
在update域将该页面的表单提交路径设置为updateServlet
并且由于后面updateServlet需要id信息来调用service层的方法修改数据:
所以表单创建一个隐藏域提交id的信息(该id的信息是selectByid中传过来的域的数据id)
最后创建一个updateServlet类来获取表单中数据(包括id)并且将数据封装为Brand类调用service方法来修改,最后将该域转发到查询所有的Servlet中展示所有的数据。
运行Tomcat后直接点击Tomcat的端口路径后:
点击查询所有:
点击修改后修改数据:
点击提交: