Mybatis-初识

摘要:
这是Mybatis,它基于SqlSessionFactory运行。下一部分解释Mybatis如何与Spring集成,即如何直接使用**DAO。select()进行操作;4.您可以在方法2的第25行中看到一些线索。我们使用的dao对象实际上是dao的代理对象,它包含sqlSession和


1、Mybatis整体架构

Mybatis-初识第1张

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对象应该也是以这种方式注入进去的;

免责声明:文章转载自《Mybatis-初识》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CDH部署日志在iOS平台使用ffmpeg解码h264视频流(转)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Hibernate的查询语言之HQL(一)——快速入门

  Hibernate提供异常强大的查询体系,使用Hibernat有多种查询方式可以选择:即可以使用Hibernate的HQL查询,也可以使用条件查询,甚至可以使用原生的SQL查询语句。不仅如此, Hibernate还提供了一种数据过滤功能,这些都用于筛选目标数据。   Hibernate是 Hibernate Query Language的缩写,HQL的...

mybatis中的#和$的区别?

1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id".  2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值...

json格式cookie转成可用的形式

使用edit this cookie导出的cookie是无法直接使用的所以需要转一下以下是edit this cookie导出的cookiecookies= [{"domain": ".jianshu.com","expirationDate": 1551985676.351818,"hostOnly": false,"httpOnly": true,"n...

在 ASP.NET CORE 中使用 SESSION

【转发】https://www.cnblogs.com/liuxiaoji/p/6860104.html Session 是保存用户和 Web 应用的会话状态的一种方法,ASP.NET Core 提供了一个用于管理会话状态的中间件。在本文中我将会简单介绍一下 ASP.NET Core 中的 Session 的使用方法。 安装配置 Session nuget...

[转]SecureCRT的详细使用教程

原文链接: http://www.heibai.net/book/html/wangluogongju/yuanchengkongzhi/2009/0911/1081.html# VanDyke CRT 和 VanDyke SecureCRT是最常用的终端仿真程序,简单的说就是Windows下登录UNIX或Liunx服务器主机的软件。二者不同的是Sec...

tf.Session()函数的参数应用(tensorflow中使用tf.ConfigProto()配置Session运行参数&&GPU设备指定)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/dcrmg/article/details/79091941 tf.ConfigProto()函数用在创建session的时候,用来对session进行参数配置: config = tf.Config...