如何构建一个有关Mybatis的Web?
在这里给出我自己的一些配置。我的TomCat版本:10.1.28 ,IDEA版本:2024.1.4
Pom.XML文件
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>Mybatis-001-web</artifactId>
<packaging>war</packaging>
<version>1.0</version>
<name>Mybatis-001-web Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<!-- MyBatis 依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.16</version>
</dependency>
<!-- MySQL 连接驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<!-- Logback 日志依赖 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.11</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.11</version>
</dependency>
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>5.0.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>Mybatis-001-web</finalName>
</build>
</project>
JDBC.properties文件
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/testmybatis
jdbc.username=root
jdbc.password=gege5211314
Mybatis-config核心文件
通过JDBC.properties来动态获取
<?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>
<properties resource="jdbc.properties" />
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<!-- jdbc:mysql://localhost:3306/ 数据库的名称-->
<property name="url" value="${jdbc.url}"/>
<!-- 自己管理的账号密码-->
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!--执行XxxMapper.xml文件的路径-->
<!--resource属性自动会从类的根路径下开始查找资源。-->
<!-- <mapper resource="AccountMapper.XML"/>:
告诉 MyBatis 从类路径的根目录加载名为 Mapper.XML 的 SQL 映射文件-->
<mappers>
<mapper resource="AccountMapper.XML"/>
</mappers>
</configuration>
日志的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!-- 格式化信息: 始终显示线程名, %thread表示线程名, %-5level: 级别从左显示5个字符宽度的msg,日志消息。%n是换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- mybatis log 配置 -->
<logger name="com.apache.ibatis" level="TRACE"/>
<logger name="java.sql.Connection" level="DEBUG"/>
<logger name="java.sql.Statement" level="DEBUG"/>
<logger name="java.sql.PreparedStatement" level="DEBUG"/>
<!-- 日志输出级别,logback日志级别依次存在:TRACE < DEBUG < INFO < WARN < ERROR -->
<root level="DEBUG">
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
version="6.0">
<display-name>Archetype Created Web Application</display-name>
<!-- <servlet>-->
<!-- <servlet-name>test</servlet-name>-->
<!-- <servlet-class>web.AccountServlet</servlet-class>-->
<!-- </servlet>-->
<!-- <servlet-mapping>-->
<!-- <servlet-name>test</servlet-name>-->
<!-- <url-pattern>/transfer</url-pattern>-->
<!-- </servlet-mapping>-->
</web-app>
映射文件
负责写sql语句
<?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="account">
<select id="selectByActno" resultType="pojo.Account">
select * from t_act where actno = #{actno}
</select>
<!-- insert语句 id 是sql语句的唯一标识,这个id就代表了这条sql语句-->
<update id="updateByActno">
update t_act set balance = #{balance} where actno = #{actno}
</update>
</mapper>
Mybatis的webapp和JavaWeb的webapp有什么区别?
关键区别在于使用的技术栈:
-
JavaWeb 的 Web 应用:
- 传统的 JavaWeb 应用 是基于 Servlet/JSP 的应用,直接使用 Java Servlet API 处理 HTTP 请求和响应,通常包括:
- Servlet
- JSP(JavaServer Pages)
- HTML/CSS/JavaScript
- 数据库访问通常通过
JDBC
完成,直接在 Java 代码中执行 SQL 语句。
- 传统的 JavaWeb 应用 是基于 Servlet/JSP 的应用,直接使用 Java Servlet API 处理 HTTP 请求和响应,通常包括:
-
MyBatis 的 Web 应用:
-
MyBatis 的 Web 应用 也是基于 JavaWeb 应用的,但 MyBatis 被引入作为 ORM(对象关系映射)框架,简化了数据库操作。相比传统的 JDBC,MyBatis 提供了更好的 SQL 映射机制,并将 SQL 映射文件与 Java 方法进行绑定。
- 在 MyBatis 应用中,你不再需要手动编写繁琐的 JDBC 代码,而是通过 MyBatis 的映射文件和
DAO
类来简化数据库的操作。 - MyBatis 本身不改变 JavaWeb 应用的基本结构,它只是用来代替 JDBC 执行数据库查询和更新。
-
MyBatis 引入的好处:
- 简化数据库访问:减少了手动编写 JDBC 代码的麻烦,提供了更清晰的 SQL 和 Java 代码分离的方式。
- 自动映射:MyBatis 可以自动将 SQL 查询结果映射到 Java 对象,大大减少了手动操作的代码量。
- 动态 SQL:通过 MyBatis 的动态 SQL 特性,可以根据条件灵活生成不同的 SQL 语句。