从昨天开始对mybatis突然有了很深的兴趣,主要原因在于这几天的项目采用的是smm,以后使用mybatis的概率也是非常大,抱着一劳永逸的想法,选了这几天的黄道吉日就把mybatis给办了吧。笔记主要参考mybatis的官网,在此给出链接,以防忘记:http://www.mybatis.org/mybatis-3/zh/getting-started.html.

一、maven依赖

  maven中使用mybatis十分简单,只需要指定依赖即可,可以省去很多麻烦。maven是十分方便且简单的代码管理工具,可以省去很多找资源的时间,想起之前为了搭建ssh框架四处找依赖包,心疼自己一秒。比学习更重要的是眼界,使用一些有用的工具可以是开发效率事半功倍,以此为戒;

1 <dependency>
2   <groupId>org.mybatis</groupId>
3   <artifactId>mybatis</artifactId>
4   <version>x.x.x</version>
5 </dependency>

mybatis依赖包

二、构造SqlSessionFactory

每个基于mybatis的应用都是以一个SqlSessionFactory的实例为中心的。通过SqlSessionFactory可以构造出Session,通过Session可以与后端数据库进行交互,因此SqlSessionFactory是业务逻辑与后端数据库进行沟通的关键桥梁。Session的生命周期较短,并且不安全,因此每个线程都应该有自己的SqlSession实例。SqlSssion的最佳作用域是请求或方法作用域。而SqlSessionFactory对于每次请求都要建立一个Sqlsession,因此SqlSessionFactory的生命周期应为应用的生命周期。SqlSessionFactory贯穿这个应用,因此构造SqlSessionFactory是一个关键所在。mybatis提供了两种构造途径。

1、通过xml构造SqlSessionFactory(推荐)

对于SqlSessionFactory的相关配置可以定义在mybatis-config.xml中,通过输入流(inputStream)可以读取文件中的内容。SqlSessionFactoryBuilder拥有一个静态方法build,接收一个输入流,并返回SqlSessionFactory。至此,SqlSessionFactoryBuilder完成任务,一般情况下SqlSessionFactoryBuilder只出现少数几次。

//mybatis-config.xml的一般配置<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment></environments><mappers><mapper resource="org/mybatis/example/BlogMapper.xml"/></mappers>
</configuration>

1 String resource = "org/mybatis/example/mybatis-config.xml";
2 InputStream inputStream = Resources.getResourceAsStream(resource);
3 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

2、通过Java代码构建SqlSessionFactory(较少使用)

对于上面mybatis-config.xml文件中的配置,java都提供了相对于的类用于SqlSessionFactory的配置。很容易可以猜到,一个标签对应一个类,标签的包含关系对应于类的依赖关系。因此使用到的类主要有Configuration,Environment,TransactionFactory,Mapper以及DataSource。代码如下

1 DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();
2 TransactionFactory transactionFactory = new JdbcTransactionFactory();
3 Environment environment = new Environment("development", transactionFactory, dataSource);
4 Configuration configuration = new Configuration(environment);
5 configuration.addMapper(BlogMapper.class);
6 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);

三、SqlSession与Mapper

1、获取SqlSession。Sqlsession可以通过前面构建的SqlSessionFactory获得,调用openSession返回一个SqlSession类

SqlSession session = sqlSessionFactory.openSession();
try {Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);
} finally {session.close();
}

2、Mapper是Service层调用Dao层的接口,Mapper只是定义了一系列Service提供服务需要使用的接口,不参与接口的实现,Mapper接口的实现主要使用了mybatis的SQL功能,在mapper.xml中动态定义一些需要使用的SQL语句并执行。Mapper类有SqlSession获得,并完成对数据库的一次操作,具体如下:

SqlSession session = sqlSessionFactory.openSession();
try {BlogMapper mapper = session.getMapper(BlogMapper.class);Blog blog = mapper.selectBlog(101);
} finally {session.close();
}

下面附上一个Mapper的简单例子,BlogMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.example.BlogMapper"><select id="selectBlog" resultType="Blog">select * from Blog where id = #{id}</select>
</mapper>

3、作用域及生命周期

类的作用域与生命周期取决于类在应用的发挥的作用

3.1、SqlSessionFactoryBuilder,这个类可以被实例化,主要是为了通过配置构造SqlSessionFactory类,之后便没有什么作用。故生命周期应为方法作用域,只调用一次或少数几次,方法完成后自动销毁。

3.2、SqlSessionFactory,这个类在应用运行期间为每次请求分配一个Sqlsession进行处理,因为客户端请求在应用运行周期内都可能发生,故该类的生命周期应为应用的生命周期。一般来说,一个应用中值含有一个SqlSessionFactory。

3.3、SqlSession,这个类主要在一次请求中构造各个相关的Mapper来为请求服务,因此该类的生命周期为一次请求或者方法作用域。并且该类线程不安全,因此不能被共享,当请求完成响应,该类的一次实例的任务也便完成,故而应该关闭,减少数据库的开销。

3.4、Mapper,该类从SqlSession类中获得,为SqlSession类服务,故该类的生命周期不应大于SqlSession类的生命周期,一般Mapper放在方法作用域中,在调用它的方法中执行,方法结束便自动销毁。

四、XML映射配置文件

mybatis使用配置管理应用,是的配置信息与代码分开,便于修改以及扩展,十分方便。虽然现在注解越来越盛行,但xml配置的简单性,全局性的优点也是注解无法取代的。

mybatis-config.xml是mybatis的主要配置文件,配置项很多,但真正用到的却不多。官网下列出的配置项主要有如下几个

1、configuration 配置

1.1 properties

1.2 settings

1.3 typeAliases

1.4 typeHandlers

1.5 objectFactory

1.6 plugins

1.7 environments

1.8 databaseIdProvider

1.9 mappers

2、properties

定义了一些可外部配置且动态替换的属性,可以通过子元素的方式配置,也可以引入外部的properties文件。这些属性在整个配置文件中可被用来替换需要动态配置的属性值,类似于C语言中的宏,主要是为了方便修改以及统一配置。

<properties resource="org/mybatis/example/config.properties"><property name="username" value="dev_user"/><property name="password" value="F2Fa3!33TYyg"/>
</properties>

<dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/>
</dataSource>

值得注意的是,properties元素中指定的属性优先级最低。Mybatis中properties的加载顺序如下:

  • 在 properties 元素体内指定的属性首先被读取。
  • 然后根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件,并覆盖已读取的同名属性。
  • 最后读取作为方法参数传递的属性,并覆盖已读取的同名属性。

同时,在属性没有找到想要的属性值时,可以指定一个默认的属性值(默认冒号:后面为默认值),需要打开一个属性值并可以使用该特征

<properties resource="org/mybatis/example/config.properties"><!-- ... --><property name="org.apache.ibatis.parsing.PropertyParser.enable-default-value" value="true"/> <!-- Enable this feature -->
</properties>

3、settings

该表现在的设置为mybatis的全局设置,可以改变mybatis的运行时行为,下面粘上经常使用的配置项,其他可以根据需要到官网查找

<settings><setting name="cacheEnabled" value="true"/><setting name="lazyLoadingEnabled" value="true"/><setting name="multipleResultSetsEnabled" value="true"/><setting name="useColumnLabel" value="true"/><setting name="useGeneratedKeys" value="false"/><setting name="autoMappingBehavior" value="PARTIAL"/><setting name="autoMappingUnknownColumnBehavior" value="WARNING"/><setting name="defaultExecutorType" value="SIMPLE"/><setting name="defaultStatementTimeout" value="25"/><setting name="defaultFetchSize" value="100"/><setting name="safeRowBoundsEnabled" value="false"/><setting name="mapUnderscoreToCamelCase" value="false"/><setting name="localCacheScope" value="SESSION"/><setting name="jdbcTypeForNull" value="OTHER"/><setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>

4、typeAliases

从名字可以知道,该标签配置的是Java类型别名,主要作用是减少类完全限定名的冗余,对于常用的类名进行配置,可以带来很多方便,特别是在mapper.xml中时。下面附上一个使用的实例

<typeAliases><typeAlias alias="Author" type="domain.blog.Author"/><typeAlias alias="Blog" type="domain.blog.Blog"/><typeAlias alias="Comment" type="domain.blog.Comment"/><typeAlias alias="Post" type="domain.blog.Post"/><typeAlias alias="Section" type="domain.blog.Section"/><typeAlias alias="Tag" type="domain.blog.Tag"/> <package name="domain.blog"/>
</typeAliases>

配置上包名时,可以在类的上方使用@Alias(“别名”)注解添加别名,否则,会使用类的首字母小写的非限定类名作为别名,eg:

@Alias("author")
public class Author {...
}

5、mappers

该标签主要用于告诉mybatis去哪里寻找匹配的sql语句,通常使用类路径的资源引用,或者完全限定资源定位符,或者类名,及包名等。下面附上两种常用的方式:

<mappers><mapper resource="org/mybatis/builder/AuthorMapper.xml"/><mapper resource="org/mybatis/builder/BlogMapper.xml"/><mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>

<!-- 将包内的映射器接口实现全部注册为映射器 -->
<mappers><package name="org.mybatis.builder"/>
</mappers>

6.environment

mybatis可以配置多种环境,有助于将SQL映射应用于多种数据库中。在mybatis-config.xml中可以配置多个environment,但是构造SqlSessionFactory时只能指定一种环境,可以通过SqlSessionFactory的构造函数传入使用的environment,否则使用默认的environment

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment, properties);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, properties);

下面附上environments的一个实例

<environments default="development"><environment id="development"><transactionManager type="JDBC"><property name="..." value="..."/></transactionManager><dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment>
</environments>

转载于:https://www.cnblogs.com/hi-dongshen/p/9863274.html

mybatis自学笔记-1相关推荐

  1. Mybatis自学笔记进阶篇(ResultMap和Log4j)

    5.ResultMap 1.查询为null问题 要解决的问题:属性名和字段名不一致 环境:新建一个项目,将之前的项目拷贝过来 1.查看之前的数据库的字段名 User表名: id int(20) nam ...

  2. mybatis 自学笔记

    <mapper namespace="com.sf.eip.model.EipMsgRecordModel"> 表示关联的java类 <resultMap id= ...

  3. JavaWeb自学笔记(一)

    JavaWeb自学笔记(一) 学习视频:BV12J411M7Sj 文章目录 JavaWeb自学笔记(一) 1.基本概念 1.1 web应用程序 1.2 静态web 1.3 动态web 2.web服务器 ...

  4. SpringMVC自学笔记

    SpringMVC自学笔记 视频:BV1aE41167Tu 官方文档:https://docs.spring.io/spring-framework/docs/current/reference/ht ...

  5. 字节跳动大佬的Python自学笔记.pdf

    1. 字节跳动大佬的Python自学笔记 这是我的一个朋友自学资料包,通过这个资料包自学拿到了字节跳动的Offer, 下面是他之前入门学习Python时候的学习资料,非常全面,从Python基础.到w ...

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

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

  7. JAVA自学笔记07

    JAVA自学笔记07 1.构造方法 1) 例如:Student s = new Student();//构造方法 System.out.println(s);// Student@e5bbd6 2)功 ...

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

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

  9. MySQL自学笔记2--select的5个子句

    MySQL自学笔记 使用的MySQL自带命令客户端,其中具体的操作是在自建的数据库下room303表中进行的,表中的列有:id.name.age.email.tel.salary.riqi.class ...

最新文章

  1. MFC获取文字高宽设置字符间隔
  2. window对象方法之setTimeout(),setInterval()
  3. 模板设计模式,简单Java代码实现
  4. Python基础教程:新式类与经典类
  5. 利用solr实现商品的搜索功能
  6. no amd graphics driver怎么解决_《英雄联盟手游》卡顿怎么解决 游戏设置优化教程...
  7. 纽约时代广场广告费才7千元每天,花钱装逼值不值?
  8. webstorm创建代码模板
  9. 【智能工厂】智能工厂如何快速落地
  10. python中的类的属性是什么_python中类属性和数据属性的解释
  11. 2019 年一千多万条数据遭泄露!
  12. JavaScript文档对象模型DOM节点操作之复制节点(7)
  13. ffmpeg支持的扩展库有哪些
  14. 一道金蝶校园招聘试题数据库笔试题
  15. opencv IplImage和Mat的 区别和转换
  16. (附源码)springboot垃圾自动分类管理系统 毕业设计 160846
  17. Python 替换同义词(jieba 实现)
  18. html td 超链接,web开发---给td添加超链接
  19. 软考高项 : (27)信息系统项目管理师模拟试题
  20. 如何做一份详细的百度推广投放方案

热门文章

  1. Linux静态库和动态库的设计
  2. 【Pytorch神经网络理论篇】 22 自编码神经网络:概述+变分+条件变分自编码神经网络
  3. 医学影像分割领域常用数据集
  4. 智慧交通day04-特定目标车辆追踪03:siamese在目标跟踪中的应用-DaSiamRPN(2018)
  5. java employee list_JSP中List中的$ {employee.id}抛出java.lang.NumberFormat
  6. 七、Vue cli详解学习笔记——什么是Vue cli ,Vue cli的使用(安装,拉取2.x模板,初始化项目),Vue cli2详解,Runtime-Compiler和Runtime-only区别
  7. LeetCode 1781. 所有子字符串美丽值之和
  8. 天池 在线编程 队列检查(排序)
  9. LeetCode MySQL 1501. 可以放心投资的国家
  10. Java 远程mapduce_java – 如何远程运行mapreduce作业