快捷搜索:  汽车  科技

轻松学java web开发详解教程(JavaWeb轻松学60-)

轻松学java web开发详解教程(JavaWeb轻松学60-)这是比之前增加的文件,主要是配置MyBatis的运行参数,目前只打开了输出日志到控制台的开关:<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.spri

本系列文章旨在记录和总结自己在Java Web开发之路上的知识点、经验、问题和思考,希望能帮助更多(Java)码农和想成为(Java)码农的人。

目录
  1. 介绍
  2. 工程结构
  3. POM文件
  4. Web部署描述符 - web.xml
  5. Spring IoC配置元数据 - dispatcher.xml
  6. MyBatis的配置元数据 - mybatis-config.xml
  7. Java代码 - 控制器层
  8. Java代码 - 服务层
  9. 数据访问层(DAO层)
  10. Java代码 - 实体类
  11. 静态页面 - login.html
  12. JSP页面
  13. 总结
介绍

继这篇文章给出租房网应用的完整代码之后,我们使用了ORM框架来改造租房网应用。本篇文章再次给出此刻租房网应用的完整代码,一来便于读者朋友一窥其全貌,二来做个对比,看有何变化。


工程结构


轻松学java web开发详解教程(JavaWeb轻松学60-)(1)

与之前的工程结构相比,仅仅有两处变化,皆是因为引入ORM框架(MyBatis)所致:

  • Java代码资源中多了一个mapper包,其下有HouseMapper元数据和HouseMapper接口;
  • 多了一个 src/main/resources 资源目录,其下有MyBatis的配置元数据 mybatis-config.xml 。
POM文件

<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>house-renter</groupId> <artifactId>house-renter</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.1.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.1.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-impl --> <dependency> <groupId>org.apache.taglibs</groupId> <artifactId>taglibs-standard-impl</artifactId> <version>1.2.5</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-spec --> <dependency> <groupId>org.apache.taglibs</groupId> <artifactId>taglibs-standard-spec</artifactId> <version>1.2.5</version> </dependency> <!-- https://mvnrepository.com/artifact/com.h2database/h2 --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.4.200</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.2.1.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/com.alibaba/druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.21</version> </dependency> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.3</version> </dependency> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.0.3</version> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.1</version> <configuration> <warSourceDirectory>WebContent</warSourceDirectory> </configuration> </plugin> </plugins> </build> </project>

与之前的POM文件相比,多了mybatis和mybatis-spring两个依赖。

Web部署描述符 - web.xml

与之前的相比没有任何改变,其内容可以参考这篇文章。

Spring IoC配置元数据 - dispatcher.xml

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <!-- 打开Spring的组件扫描 --> <context:component-scan base-package="houserenter" /> <!-- 配置数据源,使用Druid连接池 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="url" value="jdbc:h2:~/h2db/houserenter" /> <property name="username" value="sa" /> <property name="password" value="" /> <property name="maxActive" value="20" /> <property name="initialSize" value="1" /> <property name="maxWait" value="60000" /> <property name="minIdle" value="1" /> </bean> <!-- 配置MyBatis的sqlSessionFactory,使用SqlSessionFactoryBean --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:mybatis-config.xml" /> </bean> <!-- 打开MyBatis的Mapper扫描,使用MapperScannerConfigurer --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="houserenter.mapper" /> </bean> </beans>

前面打开Spring的组件扫描、配置Druid数据源都是相同的,只不过之前是使用JdbcTemplate,而现在是配置MyBatis的sqlSessionFactory和Mapper扫描。

MyBatis的配置元数据 - mybatis-config.xml

这是比之前增加的文件,主要是配置MyBatis的运行参数,目前只打开了输出日志到控制台的开关:

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <settings> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings> </configuration>Java代码 - 控制器层

与之前的相比没有任何改变,其内容可以参考这篇文章。

Java代码 - 服务层

package houserenter.service; import java.io.IOException; import java.util.List; import javax.annotation.PostConstruct; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import houserenter.entity.House; import houserenter.mapper.HouseMapper; @Service public class HouseService { @Autowired private HouseMapper houseMapper; @PostConstruct public void generateMockHouses() throws IOException { houseMapper.dropTableIfExistsHouse(); houseMapper.cteateTable(); houseMapper.insert(new House("1" "金科嘉苑3-2-1201" "详细信息")); houseMapper.insert(new House("2" "万科橙9-1-501" "详细信息")); } public List<House> findHousesInterested(String userName) { return houseMapper.selectAll(); } public House findHouseById(String houseId) { return houseMapper.selectById(houseId); } public void updateHouseById(House house) { houseMapper.updateById(house); } }

可以看到,现在的HouseService比之前使用JdbcTemplate时还要简洁得多,多亏了ORM框架的使用。

数据访问层(DAO层)

这部分是比之前增加的部分,主要用于把访问数据库的功能独立成一层,由于采用了ORM框架,所以能够分离Java代码和SQL代码,分别对应于Mapper接口和Mapper元数据,它们之间使用方法名和元素id关联起来。

HouseMapper.java:

package houserenter.mapper; import java.util.List; import houserenter.entity.House; public interface HouseMapper { int dropTableIfExistsHouse(); int cteateTable(); int insert(House house); List<House> selectAll(); House selectById(String id); int updateById(House house); }

HouseMapper.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="houserenter.mapper.HouseMapper"> <update id="dropTableIfExistsHouse"> drop table if exists house </update> <update id="cteateTable"> create table house(id varchar(20) primary key name varchar(100) detail varchar(500)) </update> <insert id="insert" parameterType="houserenter.entity.House"> insert into house(id name detail) values(#{id} #{name} #{detail}) </insert> <select id="selectAll" resultType="houserenter.entity.House"> select id name detail from house </select> <select id="selectById" parameterType="java.lang.String" resultType="houserenter.entity.House"> select id name detail from house where id = #{id} </select> <update id="updateById" parameterType="houserenter.entity.House"> update house set id=#{id} name=#{name} detail=#{detail} where id=#{id} </update> </mapper>Java代码 - 实体类

与之前的相比没有任何改变,其内容可以参考这篇文章。

静态页面 - login.html

与之前的相比没有任何改变,其内容可以参考这篇文章。

JSP页面

与之前的相比没有任何改变,其内容可以参考这篇文章。

总结

通过对比,我们可以看到控制器层和展示层完全没有任何改变,我们再一次领略到了分层的强大威力,所以,我们要经常使用分层的思维

猜您喜欢: