栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

mybatis入门

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

mybatis入门

2022年6月23

一. mybatis 的入门
  1. 外部文件的引入(路径在resource下)db.properties

    mysql.driver=com.mysql.cj.jdbc.Driver
    mysql.url=jdbc:mysql://localhost:3306/数据库名称?useUnicode=true&characterEncoding=utf8&autoReconnect=true&serverTimezone=UTC&useSSL=fals	e
    mysql.username=root
    mysql.password=password
    
    
  2. mybatis-config.xml ——路径(resource)

       
       
       
         
       
          
              
              
                  
                   
                  
                
            
        
    
    
    
        
    
    
      
    
  3. UserMapper.xml ——(resource/mapper)

    
    
     
       
           select * from users where uid = #{id}
       
    
    
  4. User.java

    package com.hcxy.pojo;
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    @Data   //生成getter,setter等函数
    @AllArgsConstructor     //生成全参数构造函数
    @NoArgsConstructor  //生成无参构造函数
    public class Users {
       private int uid;
       private String uname;
       private int uage;
    }
    
  5. Text.java

    public class UserTest {
        public static void main(String[] args) throws IOException {
            //获取配置文件
            String path = "mybatis-config.xml";
            Reader resourceAsReader = Resources.getResourceAsReader(path);
            // 创建工厂对象SqlSessionFactory
            SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsReader);
            //创建SqlSession对象,有各种对数据库的操作
            SqlSession session = build.openSession();
            // 唯一标识:namespace statementID
            Users users = session.selectOne("com.hcxy.pojo.Users.findById",1);
           // log.debug(users);
            System.out.println("users = " + users);
            session.close();
        }
    }
    
    
mybatis 工作原理

MyBatis框架在操作数据库时,大体经过了8个步骤。下面结合MyBatis工作原理图对每一步流程进行
详细讲解,具体如下。

  1. MyBatis读取核心配置文件mybatis-config.xml:mybatis-config.xml核心配置文件主要配置了
    MyBatis的运行环境等信息。
  2. 加载映射文件Mapper.xml:Mapper.xml文件即SQL映射文件,该文件配置了操作数据库的SQL语
    句,需要在mybatis-config.xml中加载才能执行。
  3. 构造会话工厂:通过MyBatis的环境等配置信息构建会话工厂SqlSessionFactory,用于创建
    SqlSession。 4. 创建会话对象:由会话工厂SqlSessionFactory创建SqlSession对象,该对象中包含了执行SQL语句
    的所有方法。
  4. 创建执行器:会话对象本身不能直接操作数据库,MyBatis底层定义了一个Executor接口用于操作
    数据库,执行器会根据SqlSession传递的参数动态的生成需要执行的SQL语句,同时负责查询缓存
    地维护。
  5. 封装SQL信息:SqlSession内部通过执行器Executor操作数据库,执行器将待处理的SQL信息封装
    到MappedStatement对象中。
  6. 操作数据库:根据动态生成的SQL操作数据库。
  7. 输出结果映射:执行SQL语句之后,通过MappedStatement对象将输出结果映射至Java对象中。
mybatis 核心配置
  • setting

     
        
            
        
    
  • typeAliases

    全限定类设置别名的方式:
    方式一:在元素下,使用多个元素为每一个全限定类逐个配置别名。  
    
    方式二(推荐):通过自动扫描包的形式自定义别名 ,默认实体的类型就是别名也就是在对Sql映射的时候直接可以写实体类的名称,但是namespace 属性还是写实体类的包名路径比较好 
       
    

    除了可以使用 元素为实体类自定义别名外,MyBatis框架还为许多常见的Java类型(如数值、字符串、日期和集合等)提供了相应的默认别名。
    例如别名byte映射类型byte、long映射类型long等,别名可以在MyBatis中直接使用,但由于别名不区 分大小写,所以在使用时要注意重复定义的覆盖问题

  • environments

    MyBatis可以配置多套运行环境,如开发环境、测试环境、生产环境等,我们可以灵活选择不同的配
    置,从而将SQL映射到不同运行环境的数据库中。不同的运行环境可以通过元素配 置,但不管增加几套运行环境,都必须要明确选择出当前要用的唯一的一个运行环境。

  1. 配置使用数据库环境,通过mabatis-config.xml 中修改 default

    
          
               
                
                
                
                    
                    
                    
                    
                
            
             
              
              	
                  
                  
                  
                   
              
          
          
        
    
  2. 修改创建工厂对象SqlSessionFactory

    //获取配置文件
       String path = "mybatis-config.xml";
       Reader resourceAsReader = Resources.getResourceAsReader(path);
      // 创建工厂对象SqlSessionFactory
      SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsReader,"text"); // 这里指定,xml中的指定则无效
    
  • mappers
    在MyBatis的核心配置文件中, 元素用于引入MyBatis映射文件。映射文件包含了POJO对象和数据表之间的映射信息,MyBatis通过核心配置文件中的 元素找到映射文件并解析其中的映射信息。通过 元素引入映射文件的方法有4种。

    	
    	 
    	 
    	  
    	 
    	 
    	 
    	 
    	
    
    mybatis接口式开发

    接口式开发:
    1.方法的名称需要保证和映射文件中的sqL语句的statmentId一致, 这里的两个方法名称findByID(), findTotal()与 UsersMapper.xml 中的 id 名称一致
    2.namespace的值必须是接口的全路径

  1. com.hcxy.mapper
    public interface UserMapper {
       public Users findByID(int id);
       public Integer findTotal();
    }
       //快速生成测试类:Ctrl + shift  + T
    
  2. UserMapperTest.java
    
    public class UserMapperTest {
    
        UserMapper userMapper = null;
        SqlSession session = null;
    
        // 初始化操作
        @Before
        public void setUp() throws Exception{
            String path = "mybatis-config.xml";
            Reader resourceAsReader = Resources.getResourceAsReader(path);
            // 创建工厂对象SqlSessionFactory
            SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsReader);
            //创建SqlSession对象,有各种对数据库的操作
             session = build.openSession();
             // 通过动态接口动态代理对象来实现
            // 执行是要找那一条SQL语句来执行,sql 的唯一标识 是通过namespace + statementID 来识别的
             userMapper = session.getMapper(UserMapper.class);
    
        }
        @Test
        public void findByID() {
            Users users = userMapper.findByID(1);
            System.out.println("users = " + users);
            session.close();
        }
    
        @Test
        public void findTotal() {
            Integer integer = userMapper.findTotal();
            System.out.println("integer = " + integer);
            session.close();
        }
    }
    
  3. UserMapper.xml
    
     
    
        
            select count(*) from users
        
    
    
    
  4. mybatis-config.xml
    
    
    
     
    
         
    
    
        
            
        
    
        
            
        
    
          
               
                
                
                    
                    
                    
                    
                
            
        
        
        
    
            
        
    
    
    
    两种的区别,与入门的
    1. 接口开发中,mybatis-config.xml,是这种去找实体类路径
       
            
        
    
        
            
        
        
    
    1. 在UserMapper.xml 中,namespace 的属性也不同
      这个是写接口的路径,