基于三层架构实现简单的web界面的增删改查

案例:完成品牌数据的增删改操作

准备环境

1.创建新的模块brand-demo,引入坐标

<dependencies>
<!--mybatis-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.5</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.46</version>
    </dependency>
    <!--servlet-->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    <!--jsp-->
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.2</version>
        <scope>provided</scope>
    </dependency>
   <!--jstl-->
    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
        <groupId>taglibs</groupId>
        <artifactId>standard</artifactId>
        <version>1.1.2</version>
    </dependency>

</dependencies>
<build>
        <plugins>
            <!--tomcat 插件-->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
            </plugin>
        </plugins>

    </build>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>9</maven.compiler.source>
        <maven.compiler.target>9</maven.compiler.target>
    </properties>

</project>

2.创建三层架构的包结构、

3.创建表

-- 删除tb_brand表
drop table if exists tb_brand;
-- 创建tb_brand表
create table tb_brand
(
    -- id 主键
    id           int primary key auto_increment,
    -- 品牌名称
    brand_name   varchar(20),
    -- 企业名称
    company_name varchar(20),
    -- 排序字段
    ordered      int,
    -- 描述信息
    description  varchar(100),
    -- 状态:0:禁用  1:启用
    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;

4.brand实体类

添加到pojo包中

package com.aiit.pojo;

/**
 * 品牌实体类
 */

public class Brand {
    // id 主键
    private Integer id;
    // 品牌名称
    private String brandName;
    // 企业名称
    private String companyName;
    // 排序字段
    private Integer ordered;
    // 描述信息
    private String description;
    // 状态:0:禁用  1:启用
    private Integer status;


    public Brand() {
    }

    public Brand(Integer id, String brandName, String companyName, String description) {
        this.id = id;
        this.brandName = brandName;
        this.companyName = companyName;
        this.description = description;
    }

    public Brand(Integer id, String brandName, String companyName, Integer ordered, String description, Integer status) {
        this.id = id;
        this.brandName = brandName;
        this.companyName = companyName;
        this.ordered = ordered;
        this.description = description;
        this.status = status;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getBrandName() {
        return brandName;
    }

    public void setBrandName(String brandName) {
        this.brandName = brandName;
    }

    public String getCompanyName() {
        return companyName;
    }

    public void setCompanyName(String companyName) {
        this.companyName = companyName;
    }

    public Integer getOrdered() {
        return ordered;
    }

    public void setOrdered(Integer ordered) {
        this.ordered = ordered;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    @Override
    public String toString() {
        return "Brand{" +
                "id=" + id +
                ", brandName='" + brandName + ''' +
                ", companyName='" + companyName + ''' +
                ", ordered=" + ordered +
                ", description='" + description + ''' +
                ", status=" + status +
                '}';
    }
}

5.Mybits基础环境

Mybits-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.aiit.pojo"/>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///db_1?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="20020630"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--扫描mapper-->
        <package name="com.aiit.mapper"/>
    </mappers>
</configuration>

BrandfMapper.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="com.aiit.mapper.BrandMapper">

</mapper>

BrandMapper接口

package com.aiit.mapper;

public interface BrandMapper {

}

具体实现:

一、查询所有

1.创建一个index.html文件

<body>
<a href="http://localhost:8080/1/selectAllServlet">查询所有</a>
</body>

2.完成数据访问层的设计

写一个BrandMapper接口

    //查询所有
    @Select("select * from tb_brand")
    @ResultMap("brandResultMap")
 List<Brand> selectAll();

在BrandMapper.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">
<!--namespace:名称空间-->
<mapper namespace="com.aiit.mapper.BrandMapper">


    <resultMap id="brandResultMap" type="com.aiit.pojo.Brand">
        <result column="brand_name" property="brandName"></result>
        <result column="company_name" property="companyName"></result>
    </resultMap>



</mapper>

在util包下创建一个工具类SqlSessionFactoryUtils

用来减少代码的冗余

public class SqlSessionFactoryUtils {

        private static SqlSessionFactory sqlSessionFactory;

        static {
            //静态代码块会随着类的加载而自动执行,且只执行一次

            try {
                String resource = "mybatis-config.xml";
                InputStream inputStream = Resources.getResourceAsStream(resource);
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


        public static SqlSessionFactory getSqlSessionFactory(){
            return sqlSessionFactory;
        }

    }


3.完成业务逻辑层的设计

在Service包下创建BrandService

public class BrandService {
    //调用BrandMapper中的selectAll()
    SqlSessionFactory factory= SqlSessionFactoryUtils.getSqlSessionFactory();

    public List<Brand> selectAll(){
//获取sqlSession
        SqlSession sqlSession = factory.openSession();
        BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);

        //调用方法
        List<Brand> brands = mapper.selectAll();

        sqlSession.close();
        return brands;

    }
}

4.表现层的设计

在web包下创建selectAllServlet

@WebServlet("/selectAllServlet")
public class selectAllServlet extends HttpServlet {
    BrandService brandService = new BrandService();
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.调用BrandService完成查询
        List<Brand> brands = brandService.selectAll();

        //2,存入request域中
        request.setAttribute("brands",brands);
        //3.转发
        request.getRequestDispatcher("/brand.jsp").forward(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

创建一个brand.jsp文件在webapp包下

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
</tr>
<input type="button" value="新增"><br>
<hr>
<table border="1" cellspacing="0" width="800">
    <tr>
        <th>序号</th>
        <th>品牌名称</th>
        <th>企业名称</th>
        <th>排序</th>
        <th>品牌介绍</th>
        <th>状态</th>
        <th>操作</th>

    </tr>

<c:forEach items="${brands}" var="brand" varStatus="status">
<tr align="center">
    <td>${status.index}</td>
    <td>${brand.brandName}</td>
    <td>${brand.companyName}</td>
    <td>${brand.ordered}</td>
    <td>${brand.description}</td>
    <td>${brand.status}</td>
    <td><a href="#">修改</a> <a href="#">删除</a></td>
</tr>
</c:forEach>
</table>



</body>
</html>

运行结果:

二、添加

1.准备一个添加页面

addBrand.jsp

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2022/7/9
  Time: 15:32
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>添加品牌</title>
</head>
<body>
<h3>添加品牌</h3>
<form action="http://localhost:8080/1/addServlet" method="post">
    品牌名称:<input name="brandName"><br>
    企业名称:<input name="companyName"><br>
    排序:<input name="ordered"><br>
    描述信息:<textarea rows="5" cols="20" name="description"></textarea><br>
    状态:
    <input type="radio" name="status" value="0">禁用
    <input type="radio" name="status" value="1">启用<br>

    <input type="submit" value="提交">
</form>
</body>
</html>

2.在BrandMapper接口中定义一个添加方法

    //添加
    @Insert("insert into tb_brand values(null,#{brandName},#{companyName},#{ordered},#{description},#{status})")

    void add(Brand brand);

3.在BrandService中调用BrandMapper中的add()

//添加
    public void add(Brand brand){
        SqlSession sqlSession = factory.openSession();
        BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
        mapper.add(brand);
        //提交事务
        sqlSession.commit();
        sqlSession.close();


    }

4.新建一个Servlet命名为selectAllServlet

@WebServlet("/selectAllServlet")
public class selectAllServlet extends HttpServlet {
    BrandService brandService = new BrandService();
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.调用BrandService完成查询
        List<Brand> brands = brandService.selectAll();

        //2,存入request域中
        request.setAttribute("brands",brands);
        //3.转发
        request.getRequestDispatcher("/brand.jsp").forward(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

5.在brand中

当点击新增按钮时跳转到addBrand.jsp页面

使用js实现

设置按钮的id

 写JS

 运行结果:

 点击新增

填入信息后点击提交

 

 三、修改

3.1数据回显

1.在BrandMapper接口中定义一个通过id查询的方法

   //根据id查询
    @Select("select * from tb_brand where id=#{id}")
    @ResultMap("brandResultMap")
    Brand selectById(int id);

 2.在BrandService中调用BrandMapper中的selectById()

//根据id查询
    public Brand selectById(int id){

        SqlSession sqlSession = factory.openSession();
        BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);

        //调用方法
        Brand brand = mapper.selectById(id);

        sqlSession.close();
        return brand;

    }

3.获取点击的id

在brand.jsp中修改,修改按钮的herf 增加一个id=${brand.id} 

 4.新建一个Servlet命名为selectByIdServlet()

@WebServlet("/selectByIdServlet")
public class selectByIdServlet extends HttpServlet {
    private BrandService service=new BrandService();
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.接受id
        String id = request.getParameter("id");
        //2.调用service查询
        Brand brand = service.selectById(Integer.parseInt(id));
        //3.存储到requst中
        request.setAttribute("brand",brand);
        //4.转发到update.jsp中
        request.getRequestDispatcher("/update.jsp").forward(request, response);

    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

5.准备一个页面为update.jsp

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2022/7/9
  Time: 15:32
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>修改品牌</title>
</head>
<body>
<h3>修改品牌</h3>
<form action="http://localhost:8080/1/addServlet" method="post">
    品牌名称:<input name="brandName" value="${brand.brandName}"><br>
    企业名称:<input name="companyName"value="${brand.companyName}"><br>
    排序:<input name="ordered" value="${brand.ordered}"><br>
    描述信息:<textarea rows="5" cols="20" name="description" >${brand.description}</textarea><br>
    状态:
    <c:if test="${brand.status==0}">
    <input type="radio" name="status" value="0" checked>禁用
    <input type="radio" name="status" value="1">启用<br>
    </c:if>

    <c:if test="${brand.status==1}">
    <input type="radio" name="status" value="0" >禁用
    <input type="radio" name="status" value="1" checked >启用<br>
    </c:if>

    <input type="submit" value="提交">

</form>
</body>
</html>

效果展示:

点击修改

跳转到update.jsp页面

 3.2修改

1.修改update.jsp表单的提交路径

2.在BrandMapper接口中写一个update的sql

    //修改
    @Update("update tb_brand set brand_name=#{brandName},company_name=#{companyName},ordered=#{ordered},description=#{description},status=#{status} where id=#{id}")
    void update(Brand brand);

 3.在BrandService中调用BrandMapper中的update()

//修改
    public void update(Brand brand){
        SqlSession sqlSession = factory.openSession();
        BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
        mapper.update(brand);
        //提交事务
        sqlSession.commit();
        sqlSession.close();


    }

4.新建一个Servlet命名为updateServlet()

@WebServlet("/updateServlet")
public class updateServlet extends HttpServlet {

private BrandService service=new BrandService();
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       //设置乱码问题
        request.setCharacterEncoding("UTF-8");

        String id = request.getParameter("id");
        String brandName = request.getParameter("brandName");
        String companyName = request.getParameter("companyName");
        String ordered = request.getParameter("ordered");
        String description = request.getParameter("description");
        String status = request.getParameter("status");
        //封装对象
        Brand brand=new Brand();
        brand.setId(Integer.parseInt(id));
        brand.setBrandName(brandName);
        brand.setCompanyName(companyName);
        brand.setOrdered(Integer.parseInt(ordered));
        brand.setDescription(description);
        brand.setStatus(Integer.parseInt(status));

        //调用service完成修改
        service.update(brand);

        //转发到查询所有的servlet
        request.getRequestDispatcher("/selectAllServlet").forward(request, response);

    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   this.doGet(request,response);
    }
}

效果展示:

 点击修改按钮

 修改排序为1

 提交

 四、删除

1,修改brand.jsp

修改删除的href,加上获取id 

2.在mapper中写sql

 //删除
    @Delete("delete from tb_brand where id=#{id}")
    void delete(int id);

3. 在BrandService中调用BrandMapper中的delete()

  //删除
    public void delete(int id){
        SqlSession sqlSession = factory.openSession();
        BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
        mapper.delete(id);
        sqlSession.commit();
        sqlSession.close();
    }

4.新建一个Servlet命名为deleteServlet()

@WebServlet("/deleteServlet")
public class deleteServlet extends HttpServlet {

private BrandService service=new BrandService();
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       //设置乱码问题
        request.setCharacterEncoding("UTF-8");

        String id = request.getParameter("id");

        //封装对象

        //调用service完成修改
        service.delete(Integer.parseInt(id));

        //转发到查询所有的servlet
        request.getRequestDispatcher("/selectAllServlet").forward(request, response);

    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   this.doGet(request,response);
    }
}

效果展示:

点击删除后

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>