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项目的说明中心,包括数据库的信息和相关配置文件的信息;

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



    
        
            
            
              
                
                
                
                
            
        
    
    
      
        
    

3. Mapper XML 映射文件 UserMapper.xml

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




  
  
    
    
        INSERT INTO users(name, email) 
        VALUES(#{name}, #{email})
    

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);
        
        // 创建 SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = 
            new SqlSessionFactoryBuilder().build(inputStream);
        
        // 获取 SqlSession
        try (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", "[email protected]");
            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

  1. 结果映射

  
  


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

你可能感兴趣的:(#,MyBatis的学习,mybatis,java,开发语言,笔记)