写在前面——

用 MyBatis 也做过几个项目了,但是一直没有很深入的去理解这个框架,最近决定从头开始学习和整理MyBatis。

之前开发的项目并不是我先创建的,等我介入的时候发现他们已经稍稍封装了一下对MyBatis的使用,反正不是那种官方文档上代码的样子,所以我之前用得就糊里糊涂的,今天就从官方文档中展示的用法开始学习。

正文如下——

Mybatis核心类

1. SqlSessionFactory

用来生成SqlSession的实例。
这个类一旦被创建就应该在应用的运行期间一直存在,没有任何理由对它进行清除或重建。使用 SqlSessionFactory 的最佳实践是在应用运行期间不要重复创建多次,因此 SqlSessionFactory 的最佳作用域是应用作用域。有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式。

2. SqlSession

包含了面向数据库执行SQL所需的所有方法。你可以通过SqlSession的实例来执行已经映射的SQL语句。当然还可以用来获取mapper接口类,然后通过该接口类执行查询语句。
这个类的实例不是线程安全的,因此是不能被共享的。如果你现在正在使用一种 Web 框架,要考虑 SqlSession 放在一个和 HTTP 请求对象相似的作用域中。换句话说,每次收到的 HTTP 请求,就可以打开一个 SqlSession,返回一个响应,就关闭它。这个关闭操作是很重要的,你应该把这个关闭操作放到 finally 块中以确保每次都能执行关闭。 

3. SqlSessionFactoryBuilder

用来生成SqlSessionFactory。
这个类可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了。因此 SqlSessionFactoryBuilder 实例的最佳作用域是方法作用域(也就是局部方法变量)。你可以重用 SqlSessionFactoryBuilder 来创建多个 SqlSessionFactory 实例,但是最好还是不要让其一直存在以保证所有的 XML 解析资源开放给更重要的事情。

4. Mapper接口

映射器是一个你创建来绑定你映射的语句的接口。映射器接口的实例是从 SqlSession 中获得的,其作用域最好也是方法内。

MyBatis的基本用法

1. 传统用法(XML配置映射文件)

首先有整个MyBatis的配置文件一般命名为mybatis-config.xml,可以按顺序(具体顺序可以查看表头链接指向的dtd文件)配置别名、环境数据源、映射器等。

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE configuration
 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4 "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <configuration>
 6 <typeAliases>
 7 <typeAlias alias="Book" type="tech.ipush.model.Book" />
 8 </typeAliases>
 9 <environments default="development">
10 <environment id="development">
11 <transactionManager type="JDBC"/>
12 <dataSource type="POOLED">
13 <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
14 <property name="url" value="jdbc:mysql://localhost:3306/webpractice?autoReconect=true&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone=GMT%2B8"/>
15 <property name="username" value="root"/>
16 <property name="password" value="root"/>
17 </dataSource>
18 </environment>
19 </environments>
20 <mappers>
21 <mapper resource="tech/ipush/mapper/BookMapper.xml" />
22 </mappers>
23 </configuration>

mybatis-config.xml

基本上一个表需要对应一个mapper.xml文件,每写好一个文件就要写入到mybatis-config.xml配置文件的mappers中。

1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE mapper
3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
5 <mapper namespace="tech.ipush.mapper.BookMapper">
6 <select id="getBook" resultType="Book">
7 select * from book where id=#{id}
8 </select>
9 </mapper>

BookMapper.xml

如上所示,这里配置了一个名为getBook的查询语句。返回值是一个Book,这里用的是mybatis-config.xml中的别名。
那么到底如何使用这里的配置呢?下边给出了第一种用法。
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
try {Book book1 = (Book) session.selectOne("tech.ipush.mapper.BookMapper.getBook", 2);System.out.println("book1Name: " + book1.getName());
} finally {
session.close();
}

2. 跟第一种类似,只不过session使用mapper的方式不同。
第二种比第一种多一个显示的接口文件,接口全名需要跟mapper.xml中的命名空间完全一致,如下:
public interface BookMapper {Book getBook(int id);
} 

调用方式如下:
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session2 = sqlSessionFactory.openSession();
try {BookMapper mapper = session2.getMapper(BookMapper.class);Book book = mapper.getBook(2);System.out.println("bookName: " + book.getName());
} catch (Exception e) {e.printStackTrace();
} finally {session.close();
}

3. 使用注解的方式
这一种方式不需要xml配置文件,但是需要跟代码耦合度高一些。
package tech.ipush.mapper;
import org.apache.ibatis.annotations.Mapper;import org.apache.ibatis.annotations.Select;import org.springframework.stereotype.Repository;import tech.ipush.model.Bill;
@Repository
@Mapper
public interface BillMapper {@Select("select * from bill where id = #{id}")Bill selectBill(int id);
}

转载于:https://www.cnblogs.com/bityinjd/p/9595641.html

MyBatis学习与使用(一)相关推荐

  1. 【转】MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突

    [转]MyBatis学习总结(四)--解决字段名与实体类属性名不相同的冲突 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体 ...

  2. 事务中mybatis通过id查不到但是通过其他条件可以查到_40打卡 MyBatis 学习

    第57次(mybatis) 学习主题:mybatis 学习目标: 1 掌握框架的概念 2 掌握mybatis环境搭建 对应视频: http://www.itbaizhan.cn/course/id/8 ...

  3. mybatis学习笔记(13)-延迟加载

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(13)-延迟加载 标签: mybatis [TOC] resultMap可以实现高级映射(使用asso ...

  4. MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    上一篇博文MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对u ...

  5. mybatis学习笔记(7)-输出映射

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(7)-输出映射 标签: mybatis [TOC] 本文主要讲解mybatis的输出映射. 输出映射有 ...

  6. MyBatis学习--简单的增删改查

    jdbc程序 在学习MyBatis的时候先简单了解下JDBC编程的方式,我们以一个简单的查询为例,使用JDBC编程,如下: 1 Public static void main(String[] arg ...

  7. mybatis学习笔记(3)-入门程序一

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(3)-入门程序一 标签: mybatis [TOC] 工程结构 在IDEA中新建了一个普通的java项 ...

  8. Mybatis学习总结二

    Mybatis学习总结二 0.不需要修改的文件(在src下面) jdbc.properties文件 log4j.properties文件 SqlMapConfig.xml文件 1.高级结果映射 1.1 ...

  9. MyBatis学习总结一

    Mybatis学习总结一 1.Mybatis介绍 2.Mybatis架构图 2.1.架构图的意义 2.1.1.JDBC编写 2.1.2.反思问题 2.2.Mybatis架构图 3.入门案例 3.1.下 ...

  10. MyBatis多参数传递之Map方式示例——MyBatis学习笔记之十三

    前面的文章介绍了MyBatis多参数传递的注解.参数默认命名等方式,今天介绍Map的方式.仍然以前面的分页查询教师信息的方法findTeacherByPage为例(示例源代码下载地址:http://d ...

最新文章

  1. Outlook Hotmail Connector
  2. ElasticSearch嵌套查询以及注意事项
  3. 兼容性—IE6/7/8下input空隙问题
  4. 2.9 什么是端到端的深度学习-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
  5. Python操作excel文件创建workbook和批量创建Sheet
  6. c语言数据结构-算法篇之冒泡排序
  7. android cursor 实例化,为什么Cursor放到带参数带返回值方法里就报错?
  8. 送计算机教授教师节礼物,教师节送教授什么礼物好
  9. 【CF1045A】A Last chance【贪心】【线段树优化建图】【网络流构造方案】
  10. AngularJS之高级Route【三】(八)
  11. linux shell 命令执行结果,如何通过程序执行shell命令并获取命令执行结果?
  12. 0基础学python做什么工作好-零基础学了8个月的Python,到底有啥感悟
  13. vulkan 利用GPU加速ENet
  14. macos 管理员权限 黑苹果_Mac OS X 黑苹果系统安装驱动Kext方法
  15. 完成中国福利彩票快三的程序设计
  16. linux酷q运行不了,Linux上使用docker运行酷Q机器人
  17. Java生成随机数几种方式
  18. VMware虚拟机安装黑群晖7.1
  19. java 序列化_java的序列化机制,这一篇文章就够了
  20. 计算机高特效吃鸡游戏主机配置单,吃鸡最高特效配置 万元i7-8700K/GTX1080Ti吃鸡特效全开配置 (全文)...

热门文章

  1. C# 语法练习(4): 类型转换
  2. android 检测应用程序信息
  3. php5.3连接sqlserver2005
  4. CSDN总结的面试中的十大可视化工具
  5. SQLServer中连接个数及超时问题
  6. c#.net2005 调用evc4.0生成的dll文件
  7. java.lang.reflect.Method.getGenericParameterTypes()方法示例
  8. php性能优化二(PHP配置php.ini)
  9. 码云Webhook触发Jenkins自动构建 - Jenkins演练(一)
  10. 全新 Win 9 概念 界面漂亮极了