必威体育Betway必威体育官网
当前位置:首页 > IT技术

驼峰命名法和数据库下划线问题和一个mybatis的源码解释网站

时间:2019-08-16 01:41:04来源:IT技术作者:seo实验室小编阅读:69次「手机版」
 

驼峰命名

参考:   https://segmentfault.com/a/1190000010240142

驼峰式命名开关,数据库列和字段名全一致。 开启 后不论多少下划线都可以  我这种方法不行

这种就是在myBATis-xml文件里面 

Mybatis提供了一个配置项。开启开配置项后,在匹配时,能够根据数据库列名找到对应对应的驼峰式命名后的字段.

我试过这种方法不管用可能是我配置问题.

Select时指定AS。

当我们的数据库列名和对象字段之间不是驼峰式命名的关系,我们可以在Select时使用AS,使得列名和对象名匹配上。

映射文件中是本次会执行的sql,我们会查出id,city_id,city_name,city_en_name。 按照开启的驼峰式命名开关,我们会对应到对象的id,cityId,cityName,cityEnName字段。

这种太麻烦..每次添加字段都要配置.

resultMap 最稳健。

作为一名一线应用开发人员,“配置”一词,可能已经听得耳朵都长茧了。但是,一个程序或者说是一个库,具有可配置性,是非常必要的,否则就得以纯编程的方式使用它们。试想一下,如果你在使用数据库产品时,你还需要通过编程来使用,那将是多么地糟糕!

配置不仅仅是使用的人要用,这个库或者框架的开发者自己也需要用,否则,如何组织内部的各个构件,将会是一件硬编码的事情。总之,配置,就是要组织出一个完整的逻辑或形式系统,以达到使用者的目的。在框架内部来说,通过配置,还在看清楚整个架构

通过MyBatis的配置,可以看出整个框架的顶级特性。为什么这么说呢,把这些代码列出来就一目了然了。

点击(此处)折叠或打开

  1. public class configuration {
  2.  
  3.   protected environment environment;
  4.  
  5.   protected boolean safeRowBoundsEnabled = true;
  6.   protected boolean mapUnderscoreToCamelCase = false;
  7.   protected boolean lazyloadingEnabled = false;
  8.   protected boolean aggressiveLazyLoading = true;
  9.   protected boolean multipleResultSetsEnabled = true;
  10.   protected boolean usegeneratedKeys = false;
  11.   protected boolean useColumnLabel = true;
  12.   protected boolean cacheEnabled = true;
  13.   protected integer defaultstatementTimeout;
  14.   protected ExecutorType defaultExecutorType = ExecutorType.SIMPLE;
  15.   protected AutoMAPPingBehavior autoMappingBehavior = AutoMappingBehavior.PARTIAL;
  16.  
  17.   protected Properties variables = new Properties();
  18.   protected ObjectFactory objectFactory = new DefaultObjectFactory();
  19.   protected ObjectwrapperFactory objectWrapperFactory = new DefaultObjectWrapperFactory();
  20.   protected MapperRegistry mapperRegistry = new MapperRegistry(this);
  21.  
  22.   protected final InterceptorChain interceptorChain = new InterceptorChain();
  23.   protected final TypehandlerRegistry typeHandlerRegistry = new TypeHandlerRegistry();
  24.   protected final TypeAliasRegistry typeAliasRegistry = new TypeAliasRegistry();
  25.   protected final Map<String, MappedStatement> mappedStatements = new StrictMap<String, MappedStatement>("Mapped Statements collection");
  26.   protected final Map<String, Cache> caches = new StrictMap<String, Cache>("Caches collection");
  27.   protected final Map<String, ResultMap> resultMaps = new StrictMap<String, ResultMap>("Result Maps collection");
  28.   protected final Map<String, parameterMap> parameterMaps = new StrictMap<String, ParameterMap>("Parameter Maps collection");
  29.   protected final Map<String, KeyGenerator> keyGenerators = new StrictMap<String, KeyGenerator>("Key Generators collection");
  30.  
  31.   protected final Set<String> loadedresources = new HashSet<String>();
  32.   protected final Map<String, XNode> sqlFragments = new StrictMap<String, XNode>("XML fragments parsed from previous mappers");
  33.  
  34.   protected final Collection<XMLStatementbuilder> incompleteStatements = new LinkedList<XMLStatementBuilder>();
  35.   protected final Collection<CacheRefresolver> incompleteCacheRefs = new LinkedList<CacheRefResolver>();
  36.   protected final Collection<ResultMapResolver> incompleteResultMaps = new LinkedList<ResultMapResolver>();
  37.   /**
  38.    * A map holds cache-ref relationship. The key is the namespace that
  39.    * references a cache bound to another namespace and the value is the
  40.    * namespace which the actual cache is bound to.
  41.    */
  42.   protected final Map<String, String> cacheRefMap = new HashMap<String, String>();
  43.  
  44.   public Configuration(Environment environment) {
  45.     this();
  46.     this.environment = environment;
  47.   }
  48.  
  49.   public Configuration() {
  50.     typeAliasRegistry.registerAlias("JDBC", JdbctransactionFactory.class.getName());
  51.     typeAliasRegistry.registerAlias("MANAGED", ManagedTransactionFactory.class.getName());
  52.     typeAliasRegistry.registerAlias("JNDI", JndidatasourceFactory.class.getName());
  53.     typeAliasRegistry.registerAlias("pooled", PooledDataSourceFactory.class.getName());
  54.     typeAliasRegistry.registerAlias("UNPOOLED", UnpooledDataSourceFactory.class.getName());
  55.  
  56.     typeAliasRegistry.registerAlias("PERPETUAL", PerpetualCache.class.getName());
  57.     typeAliasRegistry.registerAlias("FIFO", FifoCache.class.getName());
  58.     typeAliasRegistry.registerAlias("LRU", LruCache.class.getName());
  59.     typeAliasRegistry.registerAlias("SOFT", SoftCache.class.getName());
  60.     typeAliasRegistry.registerAlias("WEAK", WeakCache.class.getName());
  61.   }
  62.  
  63. ......
  64. }

   通过这些字段的名字,我们就可以知道,MyBatis所支持的顶级特性了。之所以叫顶级特性,是因为这些字段出现在顶级配置中,其它一些边缘特性则隐藏在各个字段的实现里。当然,有些不能叫做特性,而应该叫基本术语或基础概念。对应上面的字段,下面列出这些特性或术语:

数据环境(包括数据源和事务)

是否启用严格的行绑定

是否启用下划线与驼峰式命名规则的映射(如first_name => firstName)

是否启用懒加载模式

是否启用贪婪地懒加载模式(即尽可能多地使用懒加载)

是否启用多结果集映射

是否启用主键生成功能

是否启用采用列标签功能(如果不启用,则使用下标索引)

是否启用缓存功能

默认的JDBC语句超时设置

默认的执行器类型(共有SIMPLE,REUSE和BATCH三种)

初始化SqlMapping自动映射行为(共有NONE,PARTIAL和FULL三种)

其它文本属性(作为扩展或使用者自己用,存放在Promerties中)

初始化生成对象(实例)的工厂

初始化对象的包装工厂(用于代理,完成一些重要的特性,比如事务)

初始化SqlMapping的映射器

初始化拦截器链

初始化类型处理注册器(默认的注册器就已经预注册了常见的类型)

初始化类型别名注册器

初始化JDBC语句容器(就是一个Map,下同)

初始化缓存

初始化结果集容器

初始化参数容器

初始化主键生成器容器

初始化化已经加的载资源容器

初始化SQL语句片断容器(SQL语句片断,是可重用的,相信大家在Mapping文件中经常用到)

初始化不完整的JDBC语句容器(显然这个语句还没有执行插值操作)

初始化不完整的缓存引用容器

初始化不完整的结果集映射容器

初始化缓存引用容器

    ----------------------------------------------------

Configuration默认有两个构造器,一个是无参的,另一个则需要指定数据环境。但指定数据环境的这个构造器首先调用了无参的构造器。通过上面的源码,我们可以看到,无参构造器主要是注册了一些重要的类型别名,这些别名在XML配置中会用到。整个Configuration的所有字段都已经初始化了,除了environmnet。因此,它还提供一个传递数据环境的构造器。

Configuration是所有组件的有机组合器,同时也是运行时数据收集器,它会在DefaultSqlsession中用到,并再次传递给Executor接口,它们都依赖它。可以说它是拼接整个MyBatis应用的核心人物,就像Spring在应用程序开发中的地位。

http://blog.chinaunix.net/uid-26244834-id-3268354.html找到这个网站,里面将mybatis 源码配置讲解非常详细.

相关阅读

数据库课程设计——滴滴打车系统

1 引言 1.1需求分析 滴滴打车系统的主要应用需求来自乘客、司机两个身份的用户需求。对于乘客,他可以登入系统,查看自己的信息,修

MySQL数据库中tinyint类型字段读取数据为true和false

数据库一个表中有一个tinyint类型的字段,值为0或者1,如果取出来的话,0会变成false,1会变成true。MySQL保存boolean值时用1代表TRUE,0代

数据库的概念模型,联系,E-R模型的设计方法

概念模型的基本概念: 表示概念模型的最常用模型是实体-联系模型(Entity-Relationship Model,简称E-R模型) E-R模型中,数据的结构被表

去掉a标签下划线

a{    text-decoration:none; //去掉默认下滑线   color:#333; //设置默认颜色   }a:hover{   text-decoration:none;//

C#连接数据库时Appsettings 与connectionStrings的区

一、.Appsettings与connectionStrings的区别,它俩都是App.config中的两个元素;AppSettings是ASP.NET1.1时期用的,在.NET Framework

分享到:

栏目导航

推荐阅读

热门阅读