当前位置: 首页 > news >正文

mysql中mapping标签的作用_MyBatis全局配置文件标签详解

一、全局配置文件结构

configuration 配置

properties 属性:可以加载properties配置文件的信息

settings 设置:可以设置mybatis的全局属性

typeAliases 类型命名

typeHandlers 类型处理器

objectFactory 对象工厂

plugins 插件

environments 环境

environment 环境变量

transactionManager 事务管理器

dataSource 数据源

databaseIdProvider 数据库厂商标识

mappers 映射器

1、为全局配置文件绑定dtd约束:

1)联网会自动绑定

2)没网的时候【/org/apache/ibatis/builder/xml/mybatis-3-config.dtd】:解压mybatis 的jar包然后在eclipse中绑定

window——preperances——XML Catalog ——Add——设置key为http://mybatis.org/dtd/mybatis-3-config.dtd,绑定本地文件位置location:

2、 properties属性

48304ba5e6f9fe08f3fa1abda7d326ab.png

1   

2     

7     

8     

9       

10         

11         

12           

13           

14           

15           

16         

17       

18    

19     

20     

21     

22     

23  

48304ba5e6f9fe08f3fa1abda7d326ab.png

3、settings包含很多重要的设置项

setting:用来设置每一个设置

name:设置项名

value:设置项取值

举例:驼峰式命名

1  

2     

3   

1).mapUnderscoreToCamelCase:自动完成数据表标准列名和持久化类标准属性名之间的映射。

例如:last_name和lastName

4、typeAliases:给类起别名【不建议大家使用别名】

作用:A type alias is simply a shorter name for a Java type

48304ba5e6f9fe08f3fa1abda7d326ab.png

1   

2   

3     

7     

8     

12     

13     

14   

48304ba5e6f9fe08f3fa1abda7d326ab.png

虽然有这么多的别名可以使用:但是建议大家还是使用全类名,看SQL语句是怎么被封装为JAVA 对象的时候简单!

5、typeHandlers:类型处理器

类型处理器:负责如何将数据库的类型和java对象类型之间转换的工具类

6、environments【用于配置MyBatis的开发环境】

environments:环境们,mybatis可以配置多种环境,default指定使用某种环境。可以达到快速切换环境。

environment:配置一个具体的环境信息;必须有两个标签;id代表当前环境的唯一标识

transactionManager:事务管理器

type:事务管理器的类型;type="[JDBC|MANAGED]"),这两个都是别名,在Configuration类中可以查看具体类!但是Spring对事务的控制才是最终的管理方案!

JDBC:这个配置就是直接使用了JDBC的提交和回滚设置,它依赖于从数据源得到的连接来管理事务。

MANAGED:这个配置几乎没做什么,它从来不提交和回滚一个连接。而是让容器来管理事务的整个生命周期。

所以综上:这里如果要配置事务处理器,就配置为JDBC。表示使用本地的JDBC事务。

当然也可以自定义事务管理器:只需要和人家一样实现TransactionFactory接口,type指定为全类名。

dataSource:数据源

type:type="[UNPOOLED|POOLED|JNDI]"

unpooled:无数据库连接池

pooled:有数据库连接池

JNDI:自定义数据源:实现DataSourceFactory接口,type也是全类名

但是我们也说了,无论是事务管理器的配置还是数据源的配置我们都会使用spring来做,这里只需要了解一下即可!

48304ba5e6f9fe08f3fa1abda7d326ab.png

1  

2     

3       

4       

5         

6        

7         

8         

9       

10     

11     

12       

13      

14        

15         

16         

17         

18       

19     

20   

48304ba5e6f9fe08f3fa1abda7d326ab.png

补充:如何配置第三方数据源:

定制自己的第三方数据源,如下所示:

要求:需要自定义一个类继承UnpooledDataSourceFactory类,然后在构造器中初始化该对应的dataSource属性,如下所示:

自定义类为:

1   public class C3P0DataSource extends UnpooledDataSourceFactory{

2     public C3P0DataSource() {

3       this.dataSource = new ComboPooledDataSource();

4     }

5   }

MyBatis的全局配置文件为:

48304ba5e6f9fe08f3fa1abda7d326ab.png

1   

2

3

4

10

11

12

13

14

15

16

17

18   

48304ba5e6f9fe08f3fa1abda7d326ab.png

测试类:

48304ba5e6f9fe08f3fa1abda7d326ab.png

1   @Test

2   public void test02(){

3     //1.获取sqlSessionFactory对象

4     SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();

5     //2.利用sqlSessionFactory对象创建一个SqlSession对象

6     SqlSession session = sqlSessionFactory.openSession();

7     System.out.println(session.getConnection());

8     //提交事务

9     session.commit();

10   }

48304ba5e6f9fe08f3fa1abda7d326ab.png

当然这里需要加入c3p0的jar包;

c3p0-0.9.2.1.jar

mchange-commons-java-0.2.3.4.jar

7、MyBatis的增删改查标签:

例如:

1   

2     INSERT INTO tbl_employee(user_name,email,gender) VALUES(#{userName},#{email},#{gender})

3   

8、databaseIdProvider环境

MyBatis is able to execute different statements depending on your database vendor.

? MyBatis 可以根据不同的数据库厂商执行不同的语句

1   

2     

3     

4     

5     

6   

Type: DB_VENDOR

–使用MyBatis提供的VendorDatabaseIdProvider解析数据库 厂商标识。也可以实现DatabaseIdProvider接口来自定义。

Property-name:数据库厂商标识

Property-value:为标识起一个别名,方便SQL语句使用

这样在执行不同数据库的时候,就会执行不同数据库的语句了!

databaseId属性:

1).对于不同的数据库,做不同的SQL操作时,SQL语句会有不同。例如:

MySQL和Oracle的分页[mysql分页为limit,而ORACLE分页我们使用rownumber]、插入主键的方式。

MySQL:INSERT INTO tbl_employee(user_name,email,gender) VALUES(#{userName},#{email},#{gender})

ORACLE:INSERT INTO employee(id,user_name,email) VALUES(test.seq.nextval,#{userName},#{email})

所以要想使用ORACLE的自增序列还需要创建一个序列:

如下所示:

create sequence test_seq start with 1;

这样做的好处:在service层只需要调用一个mybatis的方法,而不需要关注底层选择使用的数据库。

employeeDao.insert(employee);

mybatis如何区分使用的是哪个数据库呢?使用databaseId属性

①.在mybatis-config.xml文件中进行配置

1   

2     

3     

4   

②.在mybatis的映射文件中使用databaseId来区分使用的是哪一个数据库

在mybatis的全局配置文件配置了这个之后,我们只需要在sql映射文件中通过在执行语句的标签上加一个属性databaseId即可!

48304ba5e6f9fe08f3fa1abda7d326ab.png

1  

2     select * from tbl_employee where id = #{id}

3  

4   

5     select * from tbl_employee where id = #{id}

6   

7   

8     select * from tbl_employee where id = #{id}

9   

48304ba5e6f9fe08f3fa1abda7d326ab.png

全局配置文件

48304ba5e6f9fe08f3fa1abda7d326ab.png

1   

2     

3       

4       

5         

6         

7         

8         

9       

10     

11     

12       

13       

14         

15        

16         

17        

18       

19     

20   

48304ba5e6f9fe08f3fa1abda7d326ab.png

9、mapper映射

mapper:注册一个sql映射

注册配置文件:

resource:引用类路径下的sql映射文件:mybatis/mapper/EmployeeMapper.xml

url:引用网络路径下或者磁盘路径下的sql映射文件:url="file:///var/mappers/AuthorMapper.xml"

注册接口

class:引用(注册)接口

1.有sql映射文件,映射文件名必须和接口同名,并且放在与接口同一个目录下;

2.没有sql映射文件,所有的sql都是利用注解写在接口上;

推荐:

1.比较重要的,复杂的Dao接口我们来写sql映射文件

2.不重要,见到的Dao接口为了开发快速可以使用注解

48304ba5e6f9fe08f3fa1abda7d326ab.png

1   

2     

3     

4     

7     

8   

48304ba5e6f9fe08f3fa1abda7d326ab.png

10、最后就是全局配置文件中标签实际上是有顺序的!

相关文章:

  • python编写字典库_Python绘图Turtle库详解
  • go解析mysql binlog_一个应用它提取MySQL binlog,解析binlog并将增量更新数据推送到不同的接收器...
  • java运行时读取注解_Java自定义注解和运行时靠反射获取注解
  • java long polling_如何在Spring Boot应用程序中实现Long Polling REST endpoints ?
  • java获取其他线程的错误_java多线程开发容易犯的错误
  • java 检索数据_java代码实现搜索elasticsearch索引数据
  • java非异步线程池_Spring Boot利用@Async异步调用:ThreadPoolTaskScheduler线程池的优雅关闭详解...
  • mongo java driver 3.2_MongoDB-JAVA-Driver 3.2版本常用代碼全整理(2) - 查詢
  • java中标记怎么用_在Java中使用标记(标签)
  • java结束sql链接_数据查询时报出java.sql.SQLException: 关闭的连接
  • java 控制台画表格_Java库在控制台上构建和打印表格?
  • 242. valid anagram java_Leetcode242 Valid Anagram JAVA语言
  • java 查找大写字母_Java实现给定一个包含大写字母和小写字母的字符串,找到通过这些...
  • java 绘图球的移动_在Java上绘制2个朝不同方向移动的球,但一个消失了
  • php中购物车结算代码,jquery购物车结算功能实现方法
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • AHK 中 = 和 == 等比较运算符的用法
  • Android 架构优化~MVP 架构改造
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • java8 Stream Pipelines 浅析
  • javascript面向对象之创建对象
  • JDK9: 集成 Jshell 和 Maven 项目.
  • js ES6 求数组的交集,并集,还有差集
  • linux学习笔记
  • MD5加密原理解析及OC版原理实现
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • select2 取值 遍历 设置默认值
  • spring security oauth2 password授权模式
  • springMvc学习笔记(2)
  • TypeScript实现数据结构(一)栈,队列,链表
  • windows-nginx-https-本地配置
  • 从0到1:PostCSS 插件开发最佳实践
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 少走弯路,给Java 1~5 年程序员的建议
  • 一文看透浏览器架构
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • ​低代码平台的核心价值与优势
  • ​香农与信息论三大定律
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #android不同版本废弃api,新api。
  • #ifdef 的技巧用法
  • #微信小程序:微信小程序常见的配置传旨
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (ZT)一个美国文科博士的YardLife
  • (办公)springboot配置aop处理请求.
  • (译)2019年前端性能优化清单 — 下篇
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • . Flume面试题
  • .Net CF下精确的计时器
  • .NET DataGridView数据绑定说明
  • .net 简单实现MD5
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET的微型Web框架 Nancy