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

Mybatis的基本结构和说明

以下说明时会以独立的Mybatis工程作为案例,但说明时会解释结合SpringBoot时的情景;


一、MyBatis 核心组件

学习Mybatis首先一定要有一种意识,Mybatis的使用主要依靠配置文件进行功能,虽然如今进化出注解的模式,但是,对于复杂的SQL语句的执行依然依靠配置文件最简单,但也不需要害怕配置文件,学习Mybatis可以帮助我们克服Maven配置文件带来的恐惧:

  1. 依赖引入文件:无论是独立的Maven工程还是对接SpringBoot工程,Mybatis的依赖引入是必不可少的
  2. 配置文件mybatis-config.xml这个很好理解,就是关于链接的数据库的信息,密码啦!用户啦!
  3. 映射文件XxxMapper.xml核心配置文件,也是功能的体现,只是有些语法太过别扭,但其实就是按Mybatis他自己包装的sql语句写得语句;
  4. POJO 类:这也是Mybatis的优势之一,建立一个与数据库表对应的实体类,在接收数据库返回的数据时就会自动将字段中的数据给实体类中对应的变量;
  5. Mapper 接口:具体功能的体现,其实就是和映射文件的每一条Mysql语句进行对应的;
  6. SqlSessionFactory:创建 SqlSession 的核心对象;不重要,因为在和SpringBoot对接后就不需要了;

二、代码示例

关于依赖注入文件就不多说了,逻辑很简单,用啥就调啥
1. 创建 POJO 类
public class User {private Integer id;private String name;private String email;// 必须添加相应的geter和seter方法
}
2. 全局配置文件 mybatis-config.xml(整体核心配置文件)

其实它的功能更相当于总司令,使整个Mybatis项目的说明中心,包括数据库的信息和相关配置文件的信息;

当然他能掌控不仅仅只是单个数据库的信息,甚至可以进行多数据库连接的配置,这里面具有很多的配置属性都可以进行多次尝试;

<?xml version="1.0" encoding="UTF-8" ?>
<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="123456"/></dataSource></environment></environments><mappers><!-- 数据库操作的sql映射配置文件的声明文件 --><mapper resource="com/example/mapper/UserMapper.xml"/></mappers>
</configuration>
3. Mapper XML 映射文件 UserMapper.xml

一般放在SpringBoot项目中resource的文件夹里面,当然他的文件命名很有特点,他的文件命名必须要与mapper对应接口的地址相同;
但在springboot里面基本可以不使用这个配置文件;

<?xml version="1.0" encoding="UTF-8" ?>
<!-- namespace这个属性的数值必须是映射的Mapper接口的相对路径 -->
<mapper namespace="com.example.mapper.UserMapper"><!-- resultType里面放的是返回的实体类的相对路径 --><!-- id指得是这一条sql语句的唯一标识符 ,也是未来Mapper接口抽象方法的映射名字--><select id="selectUserById" resultType="com.example.pojo.User">SELECT * FROM users WHERE id = #{id}</select><insert id="insertUser" parameterType="com.example.pojo.User">INSERT INTO users(name, email) VALUES(#{name}, #{email})</insert>
</mapper>
4.Mapper 接口

为的是简化逻辑贴合java语法(但是感觉步骤没变少)将上述Mapper.XML文件的每一条SQL语句和接口的每一个抽象方法一一对应,以后再想使用Mapper.XML文件中的SQL语句直接调用接口就可以了,很方便,其实真正起作用的还是Mapper.XML文件中的代码,而Mapper接口对他的每一条语句进行了映射;

public interface UserMapper {// 以下抽象方法的名字必须和Mapper.XML文件中的id值一一对应;// 注意这个时候它的返回值就要和映射文件中的对应了User selectUserById(int id);void insertUser(User user);
}
5. 使用 MyBatis 执行操作(核心,如何去使用?)
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;public class Main {public static void main(String[] args) throws Exception {// 加载配置文件String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);// 创建 SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 获取 SqlSessiontry (SqlSession session = sqlSessionFactory.openSession()) {//以上代码在与springboot的对接中基本不需要考虑,大概的意思就是拿到//一个控制Mybatis的一个对象// 获取 Mapper 映射的接口对象UserMapper mapper = session.getMapper(UserMapper.class);// 执行查询User user = mapper.selectUserById(1);System.out.println(user.getName());// 执行插入User newUser = new User("John", "john@example.com");mapper.insertUser(newUser);session.commit(); // 提交事务}}
}

三、注解方式(替代 XML 映射)

public interface UserMapper {@Select("SELECT * FROM users WHERE id = #{id}")User selectUserById(int id);@Insert("INSERT INTO users(name, email) VALUES(#{name}, #{email})")@Options(useGeneratedKeys = true, keyProperty = "id")void insertUser(User user);
}

四、核心概念说明

  1. #{} 和 ${}
    • #{value}:预编译参数(防止 SQL 注入)
    • ${value}:直接拼接 SQL(慎用)
  1. 动态 SQL
<select id="findUsers" parameterType="map" resultType="User">SELECT * FROM users<where><if test="name != null">AND name = #{name}</if><if test="email != null">AND email = #{email}</if></where>
</select>
  1. 结果映射
<resultMap id="userResultMap" type="User"><id property="id" column="user_id"/><result property="name" column="user_name"/>
</resultMap>

通过以上结构即可快速上手 MyBatis,根据需求选择 XML 或注解方式配置 SQL 映射。

相关文章:

  • 支持PAM特权账号管理和人脸识别,JumpServer开源堡垒机v4.10 LTS版本发布
  • 选择排序 Python实现
  • 深度学习之-目标检测算法汇总(超全面)
  • Java 系统属性深度解析:从 API 校验到实战应用
  • 右键长按超过 200ms, 高亮选中的typora内容, win+a换颜色
  • 文件IO操作、目录操作
  • 软件开发的设计原则
  • 技术篇-2.2.JAVA应用场景及开发工具安装
  • 奥伦德OR-6N137-高速隔离运放光耦,替代6N137,自主晶圆,交期短
  • 什么是特征工程?
  • jmeter登录接口生成一批token并写入csv文件
  • “轩辕杯“云盾砺剑 CTF挑战赛web方向题解
  • 服务器数据恢复—V7000存储上raid5热备盘同步数据失败如何恢复数据?
  • fastadmin添加管理员账号只能查看一个表中指定条件的数据
  • String.join()-高效字符串拼接
  • 在线时间戳(Unix TimeStamp)转换器
  • Linux系统编程-DAY03
  • 新一代网校培训平台的技术演进:从教育源码开发到AI赋能教学转型
  • 【笔试强训day38】
  • 有没有开源的企业网盘,是否适合企业使用?
  • 网站开发汇报/网奇seo培训官网
  • 电影网站在线播放怎么做/焦作网络推广哪家好
  • 个人网站的制作步骤/百度seo和sem
  • 网站导入dreamweaver/百度百家
  • 罗村网站制作公司/百度推广竞价托管
  • 网店代运营具体做什么/引擎优化seo怎么做