• Mybatis-初识



    1、Mybatis整体架构

    2、Mybatis启动案例
      根据官网介绍官网提供了两个Mybatis启动测试案例(参考:https://mybatis.org/mybatis-3/zh/getting-started.html)
      准备资源:
        数据库配置及驱动依赖(jdbcDriver、url、username、password)
        mybatis-config.xml配置文件,**-mapper.xml(sql映射)配置文件
        测试代码如下
      方法一:通过配置文件初始化,configuration、SqlSessionFactory等配置,并执行sql

    public class MybatisInitByConfig {
    
      public static void main(String[] args) throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
    
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    
        SqlSession sqlSession = sqlSessionFactory.openSession();
    
        UserInfoDO user01 = sqlSession.selectOne(
            "cn.jsu.wyk.dao.UserInfoDAO.queryByUserId", "1001");
    
        System.out.println(JSONObject.toJSONString(user01));
    
        try (SqlSession session = sqlSessionFactory.openSession()) {
          UserInfoDAO userDao = session.getMapper(UserInfoDAO.class);
          UserInfoDO user02 = userDao.queryByUserId("1002");
          System.out.println(JSONObject.toJSONString(user02));
        }
      }
    }

      方法二:手动初始化(DataSource、Environment、Configuration、SqlSessionFactory等)组件

     1 public class MybatisInitByManual {
     2 
     3   public static void main(String[] args) throws IOException {
     4 
     5     DataSource dataSource = getDataSource();
     6     TransactionFactory transactionFactory = new JdbcTransactionFactory();
     7     Environment environment = new Environment("development", transactionFactory, dataSource);
     8 
     9     Configuration configuration = new Configuration(environment);
    10     configuration.addMapper(UserInfoDAO.class);
    11     SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
    12 
    13     //官网未提供该部分初始化,会导致代码抛出 “java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for ***” 异常
    14     InputStream userInfoMapperStream = Resources.getResourceAsStream("UserInfo-Mapper.xml");
    15     XMLMapperBuilder mapperParser = new XMLMapperBuilder(userInfoMapperStream, configuration, "UserInfo-Mapper.xml", configuration.getSqlFragments());
    16     mapperParser.parse();
    17 
    18     try (SqlSession session = sqlSessionFactory.openSession()) {
    19       UserInfoDO user01 = session.selectOne(
    20           "cn.jsu.wyk.dao.UserInfoDAO.queryByUserId", "1001");
    21       System.out.println(JSONObject.toJSONString(user01));
    22     }
    23 
    24     try (SqlSession session = sqlSessionFactory.openSession()) {
    25       UserInfoDAO userDao = session.getMapper(UserInfoDAO.class);
    26       UserInfoDO user02 = userDao.queryByUserId("1002");
    27       System.out.println(JSONObject.toJSONString(user02));
    28     }
    29 }
    30 
    31   private static DataSource getDataSource() {
    32       return new PooledDataSource(MybatisInitByManual.class.getClassLoader(),
    33           "com.mysql.cj.jdbc.Driver",
    34           "jdbc:mysql://192.168.165.129:3306/mybatis?useSSL=false",
    35           "root",
    36           "root");
    37   }
    38 }


    提取知识点:
      1、Mybatis核心容器configuration对象,大量的配置信息都在这里(mappedStatements、resultMaps、parameterMaps、sqlFragements)
      2、SqlSessionFactory 是Mybatis执行的入口,通过它去获取SqlSession然后可以执行对应的Sql(sqlSession通过id找到configuration中的MappedStatment,然后通过Executor执行返回结果对象)
      3、可以通过id的方式执行我们的sql,也可以直接使用我们的DAO对象去执行sql,本质上都是通过namespace找到对应MappedStatment去执行。
    这里都是基于 SqlSessionFactory 去操作的Mybatis,下一部分讲解Mybatis如何与Spring整合,即如何直接使用***DAO.select()这种方式去操作的;
      4、方法二中25行已经可以看出来一些端倪了,我们使用的dao对象实际是一个dao的代理对象,里面包含了sqlSession,和定义接口的部分信息,根据这个信息我们可以找到对应的sqlid,使用sqlSession执行操作,spring的bean对象应该也是以这种方式注入进去的;

  • 相关阅读:
    bzoj1066: [SCOI2007]蜥蜴(最大流)
    bzoj4551: [Tjoi2016&Heoi2016]树(树链剖分)
    bzoj2663: [Beijing wc2012]灵魂宝石(二分+匈牙利)
    bzoj2150: 部落战争(匈牙利)
    bzoj1797: [Ahoi2009]Mincut 最小割(最小割+强联通tarjan)
    bzoj3993: [SDOI2015]星际战争(网络流)
    bzoj3504: [Cqoi2014]危桥(网络流)
    bzoj3212: Pku3468 A Simple Problem with Integers(线段树)
    bzoj4590: [Shoi2015]自动刷题机(二分答案)
    [WC2013]糖果公园
  • 原文地址:https://www.cnblogs.com/wykCN/p/11831192.html
Copyright © 2020-2023  润新知