当前位置: 首页 > news >正文

我的JAVA-Web进阶--Mybatis

1.Mybatis概念

 2.Mybatis的简单使用

1. 引入相关依赖

首先,在你的项目中引入 MyBatis 的依赖。如果你使用的是 Maven 构建工具,那么可以在 pom.xml 文件中添加如下依赖:

<dependencies><!-- MyBatis core library --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.13</version></dependency><!-- MyBatis-Spring integration (if using Spring) --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.0</version></dependency><!-- Database driver, for example MySQL --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency>
</dependencies>

2. 编写实体类

创建一个与数据库表对应的实体类。例如,有一个名为 User 的表,你可以创建一个 User 类。

public class User {private Long id;private String name;private String email;// Getters and Setters
}

3. 编写接口

定义一个 Mapper 接口来描述 SQL 操作。MyBatis 会根据接口方法名和参数自动生成 SQL 语句(如果配置了 XML 映射文件,则按照映射文件执行)。

import org.apache.ibatis.annotations.Mapper;
import java.util.List;@Mapper
public interface UserMapper {List<User> getAllUsers();User getUserById(Long id);int insertUser(User user);int updateUser(User user);int deleteUser(Long id);
}

4. 编写映射文件

为每个 Mapper 接口创建一个 XML 映射文件,该文件包含 SQL 语句。文件名应与接口名相同,并且放在相同的包下或指定路径下。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.example.mapper.UserMapper"># parameterType是传入的参数类型,resultType是返回的结果类型<select id="getAllUsers" resultType="com.example.model.User">SELECT * FROM users</select><select id="getUserById" parameterType="long" resultType="com.example.model.User">SELECT * FROM users WHERE id = #{id}</select><insert id="insertUser" parameterType="com.example.model.User">INSERT INTO users (name, email) VALUES (#{name}, #{email})</insert><update id="updateUser" parameterType="com.example.model.User">UPDATE users SET name=#{name}, email=#{email} WHERE id=#{id}</update><delete id="deleteUser" parameterType="long">DELETE FROM users WHERE id=#{id}</delete>
</mapper>

5. 编写核心文件

创建 MyBatis 的全局配置文件 mybatis-config.xml,用于设置环境、事务管理器等。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mydb"/><property name="username" value="root"/><property name="password" value="password"/></dataSource></environment></environments><mappers><mapper resource="com/example/mapper/UserMapper.xml"/></mappers>
</configuration>

6. 代码使用

最后,在应用程序中使用 MyBatis。以下是一个简单的例子,展示了如何获取 SqlSessionFactory 并执行查询。

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.InputStream;
import java.util.List;public class MyBatisExample {public static void main(String[] args) throws IOException {InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession session = sqlSessionFactory.openSession();UserMapper mapper = session.getMapper(UserMapper.class);List<User> users = mapper.getAllUsers();// Process the list of userssqlSessionFactory.close();}
}

7.增删改查的接口以及映射文件的代码

// UserMapper.java - 这是MyBatis的Mapper接口
package com.example.mapper;import org.apache.ibatis.annotations.*;
import java.util.List;public interface UserMapper {// 插入新用户// 在映射文件中对应的SQL语句:// <insert id="insertUser" parameterType="com.example.model.User">//     INSERT INTO users (username, password, email)//     VALUES (#{username}, #{password}, #{email})// </insert>@Insert("INSERT INTO users (username, password, email) VALUES (#{username}, #{password}, #{email})")@Options(useGeneratedKeys = true, keyProperty = "id") // 使用自动生成的主键void insertUser(User user);// 根据ID删除用户// <delete id="deleteUserById" parameterType="int">//     DELETE FROM users WHERE id = #{id}// </delete>@Delete("DELETE FROM users WHERE id = #{id}")void deleteUserById(int id);// 更新用户信息// <update id="updateUser" parameterType="com.example.model.User">//     UPDATE users SET username = #{username}, password = #{password}, email = #{email} WHERE id = #{id}// </update>@Update("UPDATE users SET username = #{username}, password = #{password}, email = #{email} WHERE id = #{id}")void updateUser(User user);// 根据ID查询用户// <select id="getUserById" parameterType="int" resultType="com.example.model.User">//     SELECT * FROM users WHERE id = #{id}// </select>@Select("SELECT * FROM users WHERE id = #{id}")User getUserById(int id);// 查询所有用户// <select id="getAllUsers" resultType="com.example.model.User">//     SELECT * FROM users// </select>@Select("SELECT * FROM users")List<User> getAllUsers();
}

 注意

3.Mybatis的进阶操作

resultType别名配置

 核心文件的数据库配置

参数传递

使用如下方法后,便可以不用写ParamterType了,直接写变量

直接传递(不推荐)

注解传递

使用Map传递

 

返回参数的对象赋值

理解:当resultType是对象的时候,为了应对数据库查询到的数据列名与类的属性名字的不对应,需要使用resultMap标签

 

动态SQL 

理解:根据输入的参数不同,动态设置SQL语句

动态SQL-if

动态SQL-where 

 动态SQL-set

 动态SQL-choose(相当于switch)

 动态SQL-foreach

 

多表查询

SQL中需要join关键词

使用注解替代映射文件

增删改查注解 

package com.example.mapper;import org.apache.ibatis.annotations.*;
import java.util.List;public interface UserMapper {@Insert("INSERT INTO users (username, password, email) VALUES (#{username}, #{password}, #{email})")@Options(useGeneratedKeys = true, keyProperty = "id")void insertUser(User user);@Delete("DELETE FROM users WHERE id = #{id}")void deleteUserById(int id);@Update("UPDATE users SET username = #{username}, password = #{password}, email = #{email} WHERE id = #{id}")void updateUser(User user);@Select("SELECT * FROM users WHERE id = #{id}")User getUserById(int id);@Select("SELECT * FROM users")List<User> getAllUsers();
}

 返回参数的对象赋值注解

一对一注解

 

一对多注解

 延迟加载

当一对多和多对多查询的时候,相当于执行了多条SQL,当我想只执行多条SQL中一句SQL的时候

 

缓存

一级缓存

 

 二级缓存

二级缓存是使用session重新获取mapper对象,开启需要额外添加信息

Junit测试框架

4.Junit的简单使用

引入依赖

编写测试类

编写顺序:@BeforeEach,@Test,@AfterEach

public class UserMapperTest {private SqlSessionFactory sqlSessionFactory;private SqlSession sqlSession;private UserMapper userMapper;// 初始化资源@BeforeEachvoid setUp() throws IOException {String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);sqlSession = sqlSessionFactory.openSession();userMapper = sqlSession.getMapper(UserMapper.class);}// 编写单元测试@Testvoid testGetAllUsers() {List<User> users = userMapper.getAllUsers();assertNotNull(users, "用户列表不应为null");assertFalse(users.isEmpty(), "用户列表应包含数据");}@Testvoid testGetUserById() {User user = userMapper.getUserById(1L);assertNotNull(user, "根据ID获取的用户不应为null");assertEquals("expectedName", user.getName(), "用户名应符合预期");}// 清理资源@AfterEachvoid tearDown() {sqlSession.close();}
}

5.日志输出


http://www.mrgr.cn/news/82086.html

相关文章:

  • 告别编程困惑:GDB、冯诺依曼、操作系统速通指南
  • 土建施工员考试题库及答案
  • vue2+echarts实现水球+外层动效
  • 随机种子定不死找bug
  • Foxit福昕PDF阅读器最新版本下载安装教程(附详细图文)
  • 使用 Python结合ffmpeg 实现单线程和多线程推流
  • ES elasticsearch-8.17.0-windows-x86_64使用
  • vue3学习笔记(11)-组件通信
  • 【阅读笔记】《基于区间梯度的联合双边滤波图像纹理去除方法》
  • STM32配合可编程加密芯片SMEC88ST的防抄板加密方案设计
  • 深度学习blog-Transformer-注意力机制和编码器解码器
  • UE5材质节点BumpOffset
  • GDPU Vue前端框架开发 跨年大礼包
  • Linux(Centos 7.6)基础命令/常用命令说明
  • Linux系统
  • Log4j2的Policies详解、SizeBasedTriggeringPolicy、TimeBasedTriggeringPolicy
  • matlab-数字滤波器设计与实战
  • ESP-IDF学习记录(4) ESP-IDF examples目录
  • 【SQLi_Labs】Basic Challenges
  • 某网站手势验证码识别深入浅出(全流程)
  • 大模型WebUI:Gradio全解系列9——Additional Features:补充特性(下)
  • NFS V4网络文件共享新认识——筑梦之路
  • SpringCloudAlibaba实战入门之路由网关Gateway过滤器(十三)
  • 云效流水线自动化部署前端纯静态web网站
  • 四大自平衡树对比:AVL树、红黑树、B树与B+树
  • 2024/12/29 黄冈师范学院计算机学院网络工程《路由期末复习作业一》