龙空技术网

「JavaWeb学习记录18-1」案例1-品牌数据的查询

chenxin118 320

前言:

现时朋友们对“java记录用户的浏览记录”大约比较讲究,你们都想要学习一些“java记录用户的浏览记录”的相关文章。那么小编也在网上汇集了一些对于“java记录用户的浏览记录””的相关文章,希望大家能喜欢,各位老铁们快快来学习一下吧!

#头条创作挑战赛#

8,案例

需求:完成品牌数据的增删改查操作

这个功能我们之前一直在做,而这个案例是将今天学习的所有的内容(包含 MVC模式 和 三层架构)进行应用,并将整个流程贯穿起来。

8.1 环境准备

环境准备工作,我们分以下步骤实现:

创建新的模块 brand_demo,引入坐标创建三层架构的包结构数据库表 tb_brand实体类 BrandMyBatis 基础环境Mybatis-config.xmlBrandMapper.xmlBrandMapper接口8.1.1 创建工程

创建新的模块 brand_demo,引入坐标。我们只要分析出要用到哪儿些技术,那么需要哪儿些坐标也就明确了

需要操作数据库。mysql的驱动包要使用mybatis框架。mybaits的依赖包web项目需要用到servlet和jsp。servlet和jsp的依赖包需要使用 jstl 进行数据展示。jstl的依赖包

pom.xml 内容如下:

 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=";          xmlns:xsi=";          xsi:schemaLocation=" ;>     <modelVersion>4.0.0</modelVersion>     <groupId>org.example</groupId>     <artifactId>brand-demo</artifactId>     <version>1.0-SNAPSHOT</version>     <packaging>war</packaging>      <properties>         <maven.compiler.source>8</maven.compiler.source>         <maven.compiler.target>8</maven.compiler.target>     </properties>      <dependencies>         <!-- mybatis -->         <dependency>             <groupId>org.mybatis</groupId>             <artifactId>mybatis</artifactId>             <version>3.5.5</version>         </dependency>          <!--mysql-->         <dependency>             <groupId>mysql</groupId>             <artifactId>mysql-connector-java</artifactId>             <version>5.1.34</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>             <plugin>                 <groupId>org.apache.tomcat.maven</groupId>                 <artifactId>tomcat7-maven-plugin</artifactId>                 <version>2.2</version>             </plugin>         </plugins>     </build> </project>
8.1.2 创建包

创建不同的包结构,用来存储不同的类。包结构如下

8.1.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);
8.1.4 创建实体类

pojo 包下创建名为 Brand 的类。

 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 +                 '}';     } } 
8.1.5 准备mybatis环境

定义核心配置文件 Mybatis-config.xml ,并将该文件放置在 resources

 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"         ";> <configuration>     <!--起别名-->     <typeAliases>         <package name="com.itheima.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:///db1?useSSL=false&useServerPrepStmts=true"/>                 <property name="username" value="root"/>                 <property name="password" value="1234"/>             </dataSource>         </environment>     </environments>     <mappers>         <!--扫描mapper-->         <package name="com.itheima.mapper"/>     </mappers> </configuration>

resources 下创建放置映射配置文件的目录结构 com/itheima/mapper,并在该目录下创建映射配置文件 BrandMapper.xml

 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"         ";> <mapper namespace="com.itheima.mapper.BrandMapper">      </mapper>
8.2 查询所有

当我们点击 index.html 页面中的 查询所有 这个超链接时,就能查询到上图右半部分的数据。

对于上述的功能,点击 查询所有 超链接是需要先请后端的 servlet ,由 servlet 跳转到对应的页面进行数据的动态展示。而整个流程如下图:

8.2.1 编写BrandMapper

mapper 包下创建创建 BrandMapper 接口,在接口中定义 selectAll() 方法

 /**   * 查询所有   * @return   */ @Select("select * from tb_brand") List<Brand> selectAll();
8.2.2 编写工具类

com.itheima 包下创建 utils 包,并在该包下创建名为 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;     } }
8.2.3 编写BrandService

service 包下创建 BrandService

 public class BrandService {     SqlSessionFactory factory = SqlSessionFactoryUtils.getSqlSessionFactory();      /**      * 查询所有      * @return      */     public List<Brand> selectAll(){         //调用BrandMapper.selectAll()          //2. 获取SqlSession         SqlSession sqlSession = factory.openSession();         //3. 获取BrandMapper         BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);          //4. 调用方法         List<Brand> brands = mapper.selectAll();          sqlSession.close();          return brands;     } }
8.2.4 编写Servlet

web 包下创建名为 SelectAllServletservlet,该 servlet 的逻辑如下:

调用 BrandServiceselectAll() 方法进行业务逻辑处理,并接收返回的结果将上一步返回的结果存储到 request 域对象中跳转到 brand.jsp 页面进行数据的展示

具体的代码如下:

 @WebServlet("/selectAllServlet") public class SelectAllServlet extends HttpServlet {     private  BrandService service = new BrandService();      @Override     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {          //1. 调用BrandService完成查询         List<Brand> brands = service.selectAll();         //2. 存入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);     } }
8.2.5 编写brand.jsp页面

将资料 资料\2. 品牌增删改查案例\静态页面 下的 brand.html 页面拷贝到项目的 webapp 目录下,并将该页面改成 brand.jsp 页面,而 brand.jsp 页面在表格中使用 JSTLEL表达式 从request域对象中获取名为 brands 的集合数据并展示出来。页面内容如下:

 <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="; %>  <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <title>Title</title> </head> <body> <hr> <table border="1" cellspacing="0" width="80%">     <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>${brand.id}</td>--%>             <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="/brand-demo/selectByIdServlet?id=${brand.id}">修改</a> <a href="#">删除</a></td>         </tr>     </c:forEach> </table> </body> </html>
8.2.6 测试

启动服务器,并在浏览器输入 ,看到如下 查询所有 的超链接,点击该链接就可以查询出所有的品牌数据

为什么出现这个问题呢?是因为查询到的字段名和实体类对象的属性名没有一一对应。相比看到这大家一定会解决了,就是在映射配置文件中使用 resultMap 标签定义映射关系。映射配置文件内容如下:

 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"         ";> <mapper namespace="com.itheima.mapper.BrandMapper">      <resultMap id="brandResultMap" type="brand">         <result column="brand_name" property="brandName"></result>         <result column="company_name" property="companyName"></result>     </resultMap> </mapper>

并且在 BrandMapper 接口中的 selectAll() 上使用 @ResuleMap 注解指定使用该映射

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

重启服务器,再次访问就能看到我们想要的数据了

标签: #java记录用户的浏览记录