首页 > 其他分享 >运用myabits

运用myabits

时间:2024-12-22 23:30:25浏览次数:4  
标签:XML 语句 SqlSessionFactory 映射 BlogMapper MyBatis myabits 运用

要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于类路径(classpath)中即可。

如果使用 Maven 来构建项目,则需将下面的依赖代码置于 pom.xml 文件中:

org.mybatis mybatis x.x.x 从 XML 中构建 SqlSessionFactory 每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。

从 XML 文件中构建 SqlSessionFactory 的实例非常简单,建议使用类路径下的资源文件进行配置。 但也可以使用任意的输入流(InputStream)实例,比如用文件路径字符串或 file:// URL 构造的输入流。MyBatis 包含一个名叫 Resources 的工具类,它包含一些实用方法,使得从类路径或其它位置加载资源文件更加容易。

String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
XML 配置文件中包含了对 MyBatis 系统的核心设置,包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)。后面会再探讨 XML 配置文件的详细内容,这里先给出一个简单的示例:

当然,还有很多可以在 XML 文件中配置的选项,上面的示例仅罗列了最关键的部分。 注意 XML 头部的声明,它用来验证 XML 文档的正确性。environment 元素体中包含了事务管理和连接池的配置。mappers 元素则包含了一组映射器(mapper),这些映射器的 XML 映射文件包含了 SQL 代码和映射定义信息。

不使用 XML 构建 SqlSessionFactory
如果你更愿意直接从 Java 代码而不是 XML 文件中创建配置,或者想要创建你自己的配置构建器,MyBatis 也提供了完整的配置类,提供了所有与 XML 文件等价的配置项。

DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("development", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
configuration.addMapper(BlogMapper.class);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
注意该例中,configuration 添加了一个映射器类(mapper class)。映射器类是 Java 类,它们包含 SQL 映射注解从而避免依赖 XML 映射文件。不过,由于 Java 注解的一些限制以及某些 MyBatis 映射的复杂性,要使用大多数高级映射(比如:嵌套联合映射),仍然需要使用 XML 映射文件进行映射。有鉴于此,如果存在一个同名 XML 映射文件,MyBatis 会自动查找并加载它(在这个例子中,基于类路径和 BlogMapper.class 的类名,会加载 BlogMapper.xml)。具体细节稍后讨论。

从 SqlSessionFactory 中获取 SqlSession
既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。例如:

try (SqlSession session = sqlSessionFactory.openSession()) {
Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);
}
诚然,这种方式能够正常工作,对使用旧版本 MyBatis 的用户来说也比较熟悉。但现在有了一种更简洁的方式——使用和指定语句的参数和返回值相匹配的接口(比如 BlogMapper.class),现在你的代码不仅更清晰,更加类型安全,还不用担心可能出错的字符串字面值以及强制类型转换。

例如:

try (SqlSession session = sqlSessionFactory.openSession()) {
BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);
}
现在我们来探究一下这段代码究竟做了些什么。

探究已映射的 SQL 语句
现在你可能很想知道 SqlSession 和 Mapper 到底具体执行了些什么操作,但 SQL 语句映射是个相当广泛的话题,可能会占去文档的大部分篇幅。 但为了让你能够了解个大概,这里先给出几个例子。

在上面提到的例子中,一个语句既可以通过 XML 定义,也可以通过注解定义。我们先看看 XML 定义语句的方式,事实上 MyBatis 提供的所有特性都可以利用基于 XML 的映射语言来实现,这使得 MyBatis 在过去的数年间得以流行。如果你用过旧版本的 MyBatis,你应该对这个概念比较熟悉。 但相比于之前的版本,新版本改进了许多 XML 的配置,后面我们会提到这些改进。这里给出一个基于 XML 映射语句的示例,它应该可以满足上个示例中 SqlSession 的调用。

为了这个简单的例子,我们似乎写了不少配置,但其实并不多。在一个 XML 映射文件中,可以定义无数个映射语句,这样一来,XML 头部和文档类型声明部分就显得微不足道了。文档的其它部分很直白,容易理解。 它在命名空间 “org.mybatis.example.BlogMapper” 中定义了一个名为 “selectBlog” 的映射语句,这样你就可以用全限定名 “org.mybatis.example.BlogMapper.selectBlog” 来调用映射语句了,就像上面例子中那样:

Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);
你可能会注意到,这种方式和用全限定名调用 Java 对象的方法类似。这样,该命名就可以直接映射到在命名空间中同名的映射器类,并将已映射的 select 语句匹配到对应名称、参数和返回类型的方法。因此你就可以像上面那样,不费吹灰之力地在对应的映射器接口调用方法,就像下面这样:

BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);
第二种方法有很多优势,首先它不依赖于字符串字面值,会更安全一点;其次,如果你的 IDE 有代码补全功能,那么代码补全可以帮你快速选择到映射好的 SQL 语句。

提示 对命名空间的一点补充

在之前版本的 MyBatis 中,命名空间(Namespaces) 的作用并不大,是可选的。 但现在,随着命名空间越发重要,你必须指定命名空间。

命名空间的作用有两个,一个是利用更长的全限定名来将不同的语句隔离开来,同时也实现了你上面见到的接口绑定。就算你觉得暂时用不到接口绑定,你也应该遵循这里的规定,以防哪天你改变了主意。 长远来看,只要将命名空间置于合适的 Java 包命名空间之中,你的代码会变得更加整洁,也有利于你更方便地使用 MyBatis。

命名解析: 为了减少输入量,MyBatis 对所有具有名称的配置元素(包括语句,结果映射,缓存等)使用了如下的命名解析规则。

全限定名(比如 “com.mypackage.MyMapper.selectAllThings)将被直接用于查找及使用。
短名称(比如 “selectAllThings”)如果全局唯一也可以作为一个单独的引用。 如果不唯一,有两个或两个以上的相同名称(比如 “com.foo.selectAllThings” 和 “com.bar.selectAllThings”),那么使用时就会产生“短名称不唯一”的错误,这种情况下就必须使用全限定名。
对于像 BlogMapper 这样的映射器类来说,还有另一种方法来完成语句映射。 它们映射的语句可以不用 XML 来配置,而可以使用 Java 注解来配置。比如,上面的 XML 示例可以被替换成如下的配置:

package org.mybatis.example;
public interface BlogMapper {
@Select("SELECT * FROM blog WHERE id = #{id}")
Blog selectBlog(int id);
}
使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句,Java 注解不仅力不从心,还会让本就复杂的 SQL 语句更加混乱不堪。 因此,如果你需要做一些很复杂的操作,最好用 XML 来映射语句。

选择何种方式来配置映射,以及是否应该要统一映射语句定义的形式,完全取决于你和你的团队。 换句话说,永远不要拘泥于一种方式,你可以很轻松地在基于注解和 XML 的语句映射方式间自由移植和切换。作用域(Scope)和生命周期
理解我们之前讨论过的不同作用域和生命周期类别是至关重要的,因为错误的使用会导致非常严重的并发问题。

提示 对象生命周期和依赖注入框架

依赖注入框架可以创建线程安全的、基于事务的 SqlSession 和映射器,并将它们直接注入到你的 bean 中,因此可以直接忽略它们的生命周期。 如果对如何通过依赖注入框架使用 MyBatis 感兴趣,可以研究一下 MyBatis-Spring 或 MyBatis-Guice 两个子项目。

标签:XML,语句,SqlSessionFactory,映射,BlogMapper,MyBatis,myabits,运用
From: https://www.cnblogs.com/mlo9i/p/18622793

相关文章

  • JFinal综合运用开发
    一、实验要求 选项一:根据实验一、二、三完成如下任务:        任务一:基于Jfinal构建信息管理系统,要求包含用户管理,翻译业务模块管理,图片优化模块管理(占30%)。        任务二:要求不同用户登录后可进行文字翻译和图片优化业务处理,并且可查看提交业务处理结果,时间,......
  • 对于矩阵树定理的运用
    学得很肤浅,但是常见的东西还是要记一下。证明以后懂了再补。一些定义:定义\(deg_x\)表示点\(x\)的度数,\(cnt_{i,j}\)表示\(i\)到\(j\)相连有的边数。度数矩阵\(D\):\(D_{i,i}=deg_i\),\(D_{i,j}=0(i\neqj)\);关联矩阵\(A\):\(A_{i,j}=cnt_{i,j}\);Laplace......
  • day 6 栈与队列的简单运用
    源文件:#include"queue.h"queuePtrcaerte(){ queuePtrq=(queuePtr)malloc(sizeof(queue)); if(NULL==q) { printf("申请失败\n"); returnNULL; } q->front=q->tail=0; printf("创建成功\n"); returnq;}intempt(queuePtrq)......
  • 说说你对推荐算法的理解,它有哪些运用场景?你认为它的优缺点是什么?
    推荐算法是计算机专业中的一种重要算法,它通过一些数学方法,基于用户的历史行为数据和物品特征信息,推测出用户可能感兴趣的内容,并向用户进行推荐。这种算法在各个领域都有广泛的应用,以下是我对推荐算法的理解以及它的运用场景、优缺点的分析:一、理解推荐算法的核心思想是利用用户......
  • markdown最基本的语法快捷语法运用
    Markdown学习后缀xxx.md标题:+标题名字(#后要加空格)或者ctrl+数字也可以快速二级标题##(最后一个#后要加空格)同理...(三级四级最多到六级...)字体hello,world!**之间的字体是斜体引用(>+空格)分割线三个-或者三个*图片插入:!+[命名]+(图片链接地址)超链接[点击跳转]+(......
  • 打破局限!如何在项目管理中运用鱼骨图分析法
    一、鱼骨图分析法在项目管理中的重要性简述在项目管理的漫长旅程中,我们常常会遭遇到各种各样棘手的问题,这些问题就像隐藏在暗处的礁石,随时可能让项目的“船只”偏离航线,甚至搁浅。小到团队成员之间沟通不畅,导致工作衔接出现缝隙;大到项目进度严重延误,成本超出预算,又或是最......
  • 指针运用!!!(要多回顾)
    1.指针和字符串知识点1——冒泡排序基本格式for(i=0;i<5-1;i++)   {      for(j=0;j<5-1-i;j++)      {比较大小,        交换顺序        }}知识点2:strcmp函数———用于比较字符串的ASCII大小知识点3:指针字符串数组的初始化......
  • GameMaker Studio开发:高级动作系统_GML脚本语言的高级运用
    GML脚本语言的高级运用在上一节中,我们介绍了基本的GML脚本语言及其在GameMakerStudio中的应用。本节将深入探讨GML脚本语言的高级运用,包括函数、变量、控制结构、面向对象编程和性能优化等方面。这些内容将帮助你更好地利用GML编写复杂且高效的代码,从而提升你的游戏开发能......
  • Java 设计模式——从冰雪经济看设计模式的综合运用(工厂、单例、策略、观察者)
    当冬季的寒风拂过大地,冰雪经济如同一颗璀璨的明珠,在寒冷中散发着炽热的魅力。滑雪场、冰雕展、冰雪主题酒店等各类冰雪产业蓬勃发展,其背后的运营逻辑和策略,与Java设计模式有着奇妙的相似之处,为我们深入理解和运用Java设计模式提供了独特的视角。一、工厂模式:冰雪项目的“生产......
  • 大数据漏斗模型分析满级理解顶级运用动态SQL
    以下是优化后的内容:漏斗模型分析及动态SQL实现一、目录漏斗模型概念漏斗分析流程流程分解确定业务路径数据统计计算转化率动态SQL优化二、漏斗模型概念漏斗模型是一种数据分析模型,用于描述用户在一系列操作流程中的转化率变化情况。它就像一个漏斗,用户在各个操作......