.net 接单网站,做自己的网站能赚钱吗,网易免费邮箱注册,专做阀门网站文章目录 基本概念1. 关于 MyBatis2. MyBatis 的体系结构3. 使用 XML 构建 SqlSessionFactory4. SqlSession5. 默认的别名6. 补充 [注意] 放前面前 很多人可能在使用 MyBatis-plus 进行代码开发#xff0c;MyBatis的这部分内容是用来更好的讲述之后的内容。 基本概念 
1. 关于… 文章目录 基本概念1. 关于 MyBatis2. MyBatis 的体系结构3. 使用 XML 构建 SqlSessionFactory4. SqlSession5. 默认的别名6. 补充  [注意] 放前面前 很多人可能在使用 MyBatis-plus 进行代码开发MyBatis的这部分内容是用来更好的讲述之后的内容。 基本概念 
1. 关于 MyBatis 
『持久层』可以将业务数据存储到磁盘具备长期存储能力只要磁盘不损坏即便实在断电情况下重新开启系统仍然可以读取到这些数据。 
『数据库系统』是最常见的执行持久化工作的工具。 
MyBatis 是一款优秀的持久层框架它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJOPlain Old Java Objects普通老式 Java 对象为数据库中的记录。 
MyBatis 的成功主要有 3 点 不屏蔽 SQL意味着可以更为精准地定位 SQL 语句可以对其进行优化和改造。  提供强大、灵活的映射机制方便 Java 开发者使用。提供了动态动态 SQL 的功能允许使用者根据不同条件组装 SQL 语句。  在 MyBatis 中提供了使用 Mapper 的接口编程进一步简化了使用者的工作使开发者能集中于业务逻辑而非 Dao 层的编写。  
MyBatis 的持久化解决方案将用户从原始的 JDBC 访问中解放出来用户只需要定义需要操作的 SQL 语句无须关注底层的 JDBC 操作就能以面向对象的方式进行持久化层操作。底层数据库连接的获取、数据访问的实现、事务控制等都无须用户关心。 
!-- mysql 数据库驱动包 --
dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion${mysql.version}/version !-- 最新8.0.33 --
/dependency!-- mybatis --
dependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion${mybatis.version}/version !-- 最新3.5.13 --
/dependency2. MyBatis 的体系结构 
MyBatis 中的常用对象有 SqlSessionFactory 和 SqlSession 。 
SqlSessionFactory 对象是 MyBatis 的关键对象它对应着单个数据库。 
XML 配置文件
└── SqlSessionFactoryBuilder└── SqlSessionFactory└── SqlSession整个关系可以如下述这样反推 最终是需要获得一个 SqlSession 对象来操作数据库。SqlSession 对象代表着与数据库之间的连接。  要弄到 SqlSession 对象首先要先弄到一个 SqlSessionFactory 对象。  要弄到 SqlSessionFactory 对象首先要先弄到一个 SqlSessionFactoryBuilder 对象。  而在这个整个过程中需要用到 “1  N” 个配置文件。  
// 这是一个相对于 classpath 的文件路径名。而且不需要使用 / 。
InputStream is  Resources.getResourceAsStream(mybatis-config.xml);SqlSessionFactoryBuilder builder  new SqlSessionFactoryBuilder();
SqlSessionFactory factory  builder.build(is);
SqlSession session  factory.openSession(true);...[!warning] 注意 使用完 SqlSession 之后『关闭 Session 很重要』应该确保使用 finally 块来关闭它。 一个 MyBatis 应用程序只需要一个 SqlSessionFactory 的对象。因此SqlSessionFactory 对象应该是『单例对象』。在将 Mybatis 和 Spring 整合后毫无疑问SqlSessionFactory 单例对象的创建工作就交到了 Spring 手里。 SqlSession 是线程不安全的所以 SqlSession 对象是非单例的。 
3. 使用 XML 构建 SqlSessionFactory 
MyBatis 中的 XML 文件分为两类一类是『基础配置文件』也叫『核心配置文件』它只有一个。另一类是『映射文件』它至少有一个。合计是 1  N 个配置文件。 
『基础配置文件』通常叫做 mybatis-config.xml 文件。 
?xml version1.0 encodingUTF-8?
!DOCTYPE configurationPUBLIC -//mybatis.org//DTD Config 3.0//ENhttp://mybatis.org/dtd/mybatis-3-config.dtdconfiguration!-- 别名。非必须。typeAliasestypeAlias aliasdept typecom.xja.scott.bean.Department//typeAliases
--!-- 数据库环境。必须。--environments defaultdevelopmentenvironment iddevelopmenttransactionManager typeJDBC /dataSource typePOOLEDproperty namedriver valuecom.mysql.cj.jdbc.Driver /property nameurl valuejdbc:mysql://localhost:3306/scott?useUnicodetrueamp;characterEncodingutf-8amp;useSSLfalseamp;serverTimezoneAsia/Shanghai/property nameusername valueroot /property namepassword value123456 //dataSource/environment/environments!-- 映射文件。必须。--mappers!--这是一个相对于 classpath 的路径名。另外不需要使用 / 。 --mapper resourcemapper/DeptMapper.xml //mappers/configurationtypeAlias 元素为一个类定义了一个别名这样在后续使用该类时可以直接使用别名而不是它的完全限定名。  environment 元素描述了一个数据库相关信息。  它里面的 transactionManager 元素配置了『事务管理器』 这里采用的是 MyBatis 的 JDBC 管理器方式。  它里面的 dataSource 元素配置了数据库连接的相关信息其中属性 type“POOLED” 表示采用 MyBatis 内部提供的连接池方式。   mapper 元素代表引入指定的 Mapper 配置文件。  
为了加载 XML 配置文件来构建 SqlSessionFactory 对象。MyBaits 专门提供了 Resources 类来加载配置文件。 
String resource  mybatis-config.xml;
SqlSessionFactory factory  null;
InputStream is  null;try {is  Resources.getResourceAsStream(resource);factory  new SqlSessionFactoryBuilder().build(is);
} catch (IOException e) {e.printStackTrace();
}[!attention] 注意 Mybatis 对核心配置文件中的内容子元素 出现的『先后顺序有要求』你可以没有使用到某个子元素但是如果你用到了那么必须符合固定的先后顺序 properties属性settings设置typeAliases类型别名typeHandlers类型处理器objectFactory对象工厂plugins插件environments环境配置 environment环境变量 transactionManager事务管理器dataSource数据源  databaseIdProvider数据库厂商标识mappers映射器 
4. SqlSession 
SqlSession 是 MyBatis 的核心接口。SqlSession 的作用类似于 JDBC 中的 Connection 对象代表着一个数据库的连接。 
它的作用有 3 个 获取 Mapper 接口。  发送 SQL 给数据库。  控制数据库事务。  
有了 SqlSessionFactory 创建 SqlSession 就十分简单了 
SqlSession sqlSession  factory.openSession();
// 相当于
SqlSession sqlSession  factory.openSession(false);由此可见SqlSession 默认『未开启』事务的自动提交autoCommit功能。因此需要程序员手动操作事务。 
另外如果在建表时有意或无意使用的是 MyIsam 引擎那么此处无论是 true 或者 false 都无法回滚因为 MyIsam 数据库引擎本身就不支持事务功能这是它与 InnoDB 引擎的重要区别之一。 
对初学者而言建表是错误地使用了数据库引擎而导致『事务不回滚』的常见原因。 
SqlSession session  null;try {session  factory.openSession();// some code ...session.commit();    // 提交事务
} catch (Exception e) {session.rollback();    // 回滚事务
} finally {if (session ! null)session.close();  // 务必确保关闭 session
}5. 默认的别名 
别名Java 类型是否支持数组别名Java 类型是否支持数组_bytebyteYbyteByteY_shortshortYshortShortY_intintYintIntegerY_integerintYintegerIntegerY_longlongYlongLongY_floatfloatYfloatFloatY_doubledoubleYdoubleDoubleY_booleanbooleanYbooleanBooleanYdecimalBigDecimalYbigdecimalBigDecimalYstringStringYdateDateYobjectObjectYcollectionCollection—mapMap——hashmapHashMap—— 
6. 补充 
environments default...environment id...transactionManager type.../dataSource type...property namedriver value.../property nameurl value.../property nameusername value.../property namepassword value...//dataSource/environment
/environmentstransactionManager type“…”/ 表示事务管理器配置可选值有JDBC 和 MANAGED 。 
属性值说明JDBC这个配置表示 MyBatis 底层使用 JDBC 中的 Connection 对象进行事务的提交和回滚。MANAGED这个配置表示 MyBatis 底层不进行任何事物的提交和回滚操作而是由『别人』容器来进行事务的操作。 不过默认情况下它会关闭连接而有些容器并不希望如此所以通常使用子元素 property namecloseConnection valuefalse/ 来取消这种行为。 
在整合 Spring 和 MyBaits 时不需要在此配置事务管理器因为 Spring 会使用其自身的事务管理器来覆盖此处的配置。 
dataSource type“…” 表示数据源配置其可选值有UNPOOLED 、POOLED 和 JNDI 。 
属性值说明UNPOOLED表示不使用连接池因此每次请求都会打开/关闭连接。POOLED表示使用 MyBatis 内部的数连接池功能此时在底层 Connection 对象会被复用。JNDI这表示这数据库连接由容器维护。使用较少。