Mybatis는 브랜드 데이터의 추가, 삭제, 수정 및 조회를 구현합니다.

프로젝트 디렉토리는 아래 그림과 같습니다. Mapper 패키지는 데이터베이스에서 동작하는 Mapper 인터페이스 파일을 저장하는 데 사용되며, 이 글에서는 주석 형식으로 sql 문을 작성한다. 엔티티 클래스 파일은 pojo 패키지에 저장되며 여기에는 Brand 객체의 관련 필드 정의와 get, set 및 toString 메서드가 포함됩니다. 서비스 패키지는 서비스 계층 파일을 저장하고 매퍼 파일을 호출하여 데이터베이스 추가, 삭제, 수정 및 확인과 같은 작업을 수행합니다. servlet.java 파일은 프런트 엔드 인터페이스에서 데이터를 수신하고 데이터를 캡슐화하여 서비스 계층으로 전송하는 웹 패키지에 저장됩니다. 도구 클래스는 util 패키지에 저장됩니다. 여기에서 SqlSessionFactoryUtils 파일은 SqlSessionFactory 메서드를 추출하여 반복 정의를 방지합니다.
여기에 이미지 설명 삽입
데이터베이스 정보
여기에 이미지 설명 삽입
여기에 이미지 설명 삽입

Brand Mapper.java
는 데이터베이스를 조작하기 위한 인터페이스 기능을 정의하는데 사용 인터페이스 기능은 2가지 방식(annotation과 xml 파일)으로 구현할 수 있다. 구현을 위한 xml.

package com.wu.mapper;
import com.wu.pojo.Brand;
import org.apache.ibatis.annotations.*;
import java.util.List;
public interface BrandMapper {
    
    

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

    /**
     * 添加品牌
     *
     * @param brand
     */
    @Insert("insert into tb_brand values (null, #{brandName}, #{companyName}, #{ordered}, #{description}, #{status})")
    void addBrand(Brand brand);

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

    /**
     * 更新品牌信息
     *
     * @param brand
     */
    @Update("update tb_brand set brand_name = #{brandName}, company_name = #{companyName}, " +
            "ordered = #{ordered}, description =#{description}, status = #{status} " +
            "where id = #{id}")
    void updateBrand(Brand brand);

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

Brand.java
브랜드 개체의 관련 필드 및 메서드를 정의하는 브랜드 엔터티 클래스 파일.

package com.wu.pojo;

public class Brand  {
    
    
    private Integer id;
    private String brandName;
    private String companyName;
    private Integer ordered;
    private String description;
    private Integer status;

    public Integer getId() {
    
    
        return id;
    }

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

    public String getBrandName() {
    
    
        return brandName;
    }

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

    public String getCompanyName() {
    
    
        return companyName;
    }

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

    public Integer getOrdered() {
    
    
        return ordered;
    }

    public void setOrdered(int 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(int status) {
    
    
        this.status = status;
    }

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

BrandService.java
서비스 레이어 파일은 sqlSessionFactory를 정의하여 brandMapper에서 메서드를 호출하여 데이터베이스에서 관련 작업을 실현합니다.

package com.wu.service;
import com.wu.mapper.BrandMapper;
import com.wu.pojo.Brand;
import com.wu.util.SqlSessionFactoryUtils;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import java.util.List;

public class BrandService {
    
    

    SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();

    /**
     * 查询所有成员
     * @return
     */
    public List<Brand> selectAll() {
    
    
        SqlSession sqlSession = sqlSessionFactory.openSession(true);//true事务的自动提交
        BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
        List<Brand> brands = brandMapper.selectAll();
        sqlSession.close();
        return brands;
    }

    /**
     * 添加成员
     */
    public void addBrand(Brand brand){
    
    
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
        brandMapper.addBrand(brand);
        sqlSession.close();
    }

    /**
     * 根据id查询
     * @return
     */
    public Brand selectById(int id) {
    
    
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
        Brand brand = brandMapper.selectById(id);
        sqlSession.close();
        return brand;
    }

    /**
     * 修改品牌信息
     * @param brand
     */
    public void update(Brand brand){
    
    
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
        brandMapper.updateBrand(brand);
        sqlSession.close();
    }

    /**
     * 删除品牌
     * @param id
     */
    public void deleteById(int id){
    
    
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
        brandMapper.deleteById(id);
        sqlSession.close();
    }
}

SqlSessionFactoryUtils.java

package com.wu.util;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;

public class SqlSessionFactoryUtils {
    
    

    private static SqlSessionFactory sqlSessionFactory;

    static {
    
    
        // 静态代码块会随着类的加载而自动执行,且只执行一次
        String resource = "mybatis-config.xml";
        InputStream inputStream = null;
        try {
    
    
            inputStream = Resources.getResourceAsStream(resource);
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }

    public static SqlSessionFactory getSqlSessionFactory() {
    
    
        return sqlSessionFactory;
    }
}

AddServlet.java는
프런트엔드 인터페이스에서 전달한 매개변수를 수신하여 Brand 객체로 캡슐화하고 서비스 계층의 메소드를 호출하여 추가 작업을 구현합니다.

package com.wu.web;
import com.wu.pojo.Brand;
import com.wu.service.BrandService;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet( "/addServlet")
public class AddServlet extends HttpServlet {
    
    

    private BrandService brandService = new BrandService();

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    

        // 处理POST请求的乱码问题
        request.setCharacterEncoding("utf-8");

        // 接收表单提交的数据
        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 brand = new Brand();
        brand.setBrandName(brandName);
        brand.setCompanyName(companyName);
        brand.setOrdered(Integer.parseInt(ordered));
        brand.setDescription(description);
        brand.setStatus(Integer.parseInt(status));

        // 调用service完成添加
        brandService.addBrand(brand);

        request.getRequestDispatcher("/selectAllServlet").forward(request, response);
    }

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

DeleteByIdServlet.java는
프런트 엔드 인터페이스에서 전달한 id를 수신하고 서비스 계층의 deleteById 메서드를 호출하고 id를 전달하고 id에 따라 삭제 작업을 실현합니다.

package com.wu.web;
import com.wu.service.BrandService;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

@WebServlet("/deleteByIdServlet")
public class DeleteByIdServlet extends HttpServlet {
    
    

    private BrandService brandService = new BrandService();

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        String id = request.getParameter("id");
        brandService.deleteById(Integer.parseInt(id));
        request.getRequestDispatcher("/selectAllServlet").forward(request, response);
    }

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

SelectAllServlet.java는
서비스 계층의 selectAll 메서드를 호출하여 모든 데이터를 쿼리하고 전달을 위해 데이터를 Attribute로 캡슐화합니다.

package com.wu.web;
import com.wu.pojo.Brand;
import com.wu.service.BrandService;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.List;

@WebServlet("/selectAllServlet")
public class SelectAllServlet extends HttpServlet {
    
    

    private BrandService brandService = new BrandService();

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    

        //1. 调用BrandService完成查询
        List<Brand> brands = brandService.selectAll();
        //2. 将brands存入request域中
        request.setAttribute("brands", brands);
        //3. 转发到brand.jsp页面
        request.getRequestDispatcher("/brand.jsp").forward(request, response);
    }

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

SelectByIdServlet.java는
프런트 엔드 인터페이스에서 전달한 id를 받아 서비스 레이어의 selectById 메서드를 호출하고 id를 기반으로 쿼리를 구현하고 쿼리 결과를 속성으로 캡슐화하여 update.jsp 페이지로 전달합니다.

package com.wu.web;
import com.wu.pojo.Brand;
import com.wu.service.BrandService;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

@WebServlet("/selectByIdServlet")
public class SelectByIdServlet extends HttpServlet {
    
    

    private BrandService brandService = new BrandService();

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        // 接收id
        String id = request.getParameter("id");
        // 调用service查询
        Brand brand = brandService.selectById(Integer.parseInt(id));
        request.setAttribute("brand", brand);
        request.getRequestDispatcher("/update.jsp").forward(request, response);
    }

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

UpdateServlet.java는
프런트엔드 인터페이스에서 전달된 매개변수를 수신하고 이를 브랜드 객체로 캡슐화하고 서비스 계층의 업데이트 메서드를 호출하고 업데이트 작업을 구현합니다.

package com.wu.web;
import com.wu.pojo.Brand;
import com.wu.service.BrandService;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

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

    private BrandService brandService = new BrandService();

    @Override
    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));

        brandService.update(brand);

        request.getRequestDispatcher("/selectAllServlet").forward(request, response);
    }

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

BrandMapper.xml
resultMap은 서로 다른 데이터베이스 필드 이름과 개체 이름으로 인해 발생하는 일치 실패 문제를 해결하는 데 사용됩니다.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--
    namespace:名称空间
-->
<mapper namespace="com.wu.mapper.BrandMapper">
    <resultMap id="brandResultMap" type="brand">
        <result column="brand_name" property="brandName"></result>
        <result column="company_name" property="companyName"></result>
    </resultMap>
</mapper>

Mybatis-config.xml
데이터베이스 연결 및 기타 관련 작업

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--包扫描-->
    <typeAliases>
        <package name="com.wu.pojo"/>  <!--包扫描 给pojo下的实体类起了别名,默认为类名,不区分大小写-->
    </typeAliases>
    <!--
    environments:配置数据库连接环境信息,可以配置多个environment,通过default属性切换不同的environment
    -->
    <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:///mybatis?useSSL=false&amp;userServerPrepStmts=true"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--加载sql的映射文件-->
<!--        <mapper resource="com/wu/mapper/UserMapper.xml"/>-->
        
        <!--Mapper代理方式-->
        <package name="com.wu.mapper"/>
    </mappers>
</configuration>

addBrand.jsp
브랜드 인터페이스 추가

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>addBrand</title>
</head>
<body>
<h3>添加品牌</h3>
<form action="/jsp-demo/addServlet" method="post"><br>
    品牌名称:<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="提交">
    <input type="reset" value="重置">
</form>
</body>
</html>

여기에 이미지 설명 삽입

brand.jsp는
모든 브랜드 인터페이스를 표시합니다.

<%@ 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>brand</title><br>
</head>
<body>
<input type="button" value="新增" id="add">
<table border="1" cellpadding="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.count}</td>
            <td>${
    
    brand.brandName}</td>
            <td>${
    
    brand.companyName}</td>
            <td>${
    
    brand.ordered}</td>
            <td>${
    
    brand.description}</td>
            <c:if test="${brand.status == 1}">
                <td>启用</td>
            </c:if>
            <c:if test="${brand.status != 1}">
                <td>禁用</td>
            </c:if>
            <td><a href="/jsp-demo/selectByIdServlet?id=${brand.id}">修改</a>
                <a href="/jsp-demo/deleteByIdServlet?id=${brand.id}">删除</a></td>
        </tr>
    </c:forEach>
</table>

<script>
    document.getElementById('add').onclick = function (){
    
    
        location.href = "/jsp-demo/addBrand.jsp"
    }
</script>
</body>
</html>

여기에 이미지 설명 삽입
index.html
초기 인터페이스, 모든 하이퍼링크 선택만 포함

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <a href="/jsp-demo/selectAllServlet">select all</a>
</body>
</html>

update.jsp는
인터페이스를 업데이트하고 id에 따라 조회된 매개변수를 수신하여 인터페이스에 표시합니다. 수정하고 수정된 매개변수를 업데이트합니다.

<%@ 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>update</title>
</head>
<body>
<h3>添加品牌</h3>
<form action="/jsp-demo/updateServlet" method="post"><br>
    <%--隐藏域 提交id--%>
    <input type="hidden" name="id" value="${brand.id}">
    品牌名称:<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 == 1}">
        <input type="radio" name="status" value="0">禁用
        <input type="radio" name="status" value="1" checked>启用<br>
    </c:if>
    <c:if test="${brand.status == 0}">
        <input type="radio" name="status" value="0" checked>禁用
        <input type="radio" name="status" value="1">启用<br>
    </c:if>

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

여기에 이미지 설명 삽입

pom.xml

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.wu</groupId>
  <artifactId>jsp-demo</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>jsp-demo Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

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

  <dependencies>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.5</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.28</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>
    <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>
        <plugin>
          <groupId>org.apache.tomcat.maven</groupId>
          <artifactId>tomcat7-maven-plugin</artifactId>
          <version>2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
  </build>
</project>

Supongo que te gusta

Origin blog.csdn.net/WuwuwuH_/article/details/131415526
Recomendado
Clasificación