spring boot + mybatis 完整配置过程+mybatis体会

在团队里面现在大多数开发者都喜欢用mybatis,因为mybatis 基于sql 基本上看下sql 怎么写就能写出来,算是比较容易上手。因此就萌生了这个spring boot+mybatis的框架构建。(其实笔者更喜欢觉得jpa 更加简洁容易上手 我认为jpa + idea + spring loader 才是开发最快的= = !笔者不喜欢用eclipse 觉得搞terminal有点麻烦,下次写上jpa和spring boot 的完成配置过程和使用方法)

mybatis有很多优点。
  1. 易于上手和掌握。
  1. sql写在xml里,便于统一管理和优化。
  2. 解除sql与程序代码的耦合。
  3. 提供映射标签,支持对象与数据库的orm字段关系映射
  4. 提供对象关系映射标签,支持对象关系组建维护
  5. 提供xml标签,支持编写动态sql。
缺点:笔者自己总结了下(建议使用注解和sql 构建器来写mybatis ,如果使用xml 就会有一些麻烦事了。)
  1. 其实在开发过程中还是有一些不方便的地方以下列成几种。大多数人习惯于xml 形式。spring loader 不支持热部署xml 的。如果写入sql 构建器。就是通过java 代码来构建sql 又很多人不是特别了解。所以,你改一次就要重启。就有点麻烦了。(笔者最不喜欢就是干浪费时间的事了。)
  1. 就是mybatis 每次写一个实体的查询语句。就要建立一个mapper 和xml 进行映射。这样Mapper越来越多和xml 越来越多。感觉不好管理,= = !。

下面进入正文。就是spring boot 配置mybatis 了。

  1. 配置datasource 到ioc 容器里面 (这里包括application.propertits 的加载,各位刚入门的童鞋可以参照参照),本文是默认的spring boot dataSource .所以可以直接注入给mybatis 即可。
  2. 配置@MapperScan('package name') 配置mapper 扫描路径。这个按照我的理解就是为mapper 产生bean 放进ioc 容器内。
@Configuration
@MapperScan("com.aoshi.dao")
public class MyBatisConfig {    
}

3 . 配置mybatis-config 路径,xml mapper 路径, 和typeAlias 路径(对应类名小写的),根据mybatis 官网就是构建SqlSessionFactoryBean。


@Configuration
@Mapper
public class SessionFactoryConfig {    
        /**   mybatis 配置路径     */    
        private static String MYBATIS_CONFIG = "mybatis-config.xml";    
        /**   mybatis mapper resource 路径     */    
        private static String MAPPER_PATH = "/mapper/**.xml";    

        @Autowired    
        private DataSource dataSource;
    
        private String typeAliasPackage = "com.aoshi.domain";   

        /** 
          *创建sqlSessionFactoryBean 实例     
          * 并且设置configtion 如驼峰命名.等等     
          * 设置mapper 映射路径     
          * 设置datasource数据源     
          * @return     
          */
        @Bean    
        public SqlSessionFactoryBean createSqlSessionFactoryBean() throws IOException {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();        
        /** 设置mybatis configuration 扫描路径 */                
        sqlSessionFactoryBean.setConfigLocation(new ClassPathResource(MYBATIS_CONFIG));
        /** 添加mapper 扫描路径 */        
         PathMatchingResourcePatternResolver pathMatchingResourcePatternResolver = new PathMatchingResourcePatternResolver();        
         String packageSearchPath = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + MAPPER_PATH;
         sqlSessionFactoryBean.setMapperLocations(pathMatchingResourcePatternResolver.getResources(packageSearchPath));
        /** 设置datasource */        
         sqlSessionFactoryBean.setDataSource(dataSource);   
        /** 设置typeAlias 包扫描路径 */     
         sqlSessionFactoryBean.setTypeAliasesPackage(typeAliasPackage);        
         return sqlSessionFactoryBean;    
          }
}

4 . 最后贴出mybatis-config.xml 的配置(小伙伴记得配置上驼峰命名转换否则无法驼峰命名窝)。

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
        <configuration>    
        <!-- 全局参数 -->    
        <settings>        
                <!-- 使全局的映射器启用或禁用缓存。 -->        
                <setting name="cacheEnabled" value="true"/>        
                <!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。 -->        
                <setting name="lazyLoadingEnabled" value="true"/>        
                <!-- 当启用时,有延迟加载属性的对象在被调用时将会完全加载任意属性。否则,每种属性将会按需要加载。 -->        
                <setting name="aggressiveLazyLoading" value="true"/>        
                <!-- 是否允许单条sql 返回多个数据集  (取决于驱动的兼容性) default:true -->        
                <setting name="multipleResultSetsEnabled" value="true"/>        
                <!-- 是否可以使用列的别名 (取决于驱动的兼容性) default:true -->        
                <setting name="useColumnLabel" value="true"/>        
                <!-- 允许JDBC 生成主键。需要驱动器支持。如果设为了true,这个设置将强制使用被生成的主键,有一些驱动器不兼容不过仍然可以执行。  default:false  -->        
                <setting name="useGeneratedKeys" value="true"/>        
                <!-- 指定 MyBatis 如何自动映射 数据基表的列 NONE:不隐射 PARTIAL:部分  FULL:全部  -->        
                <setting name="autoMappingBehavior" value="PARTIAL"/>        
                <!-- 这是默认的执行类型  (SIMPLE: 简单; REUSE: 执行器可能重复使用prepared statements语句;BATCH: 执行器可以重复执行语句和批量更新)  -->        
                <setting name="defaultExecutorType" value="SIMPLE"/>        
                <!-- 使用驼峰命名法转换字段。 -->        
                <setting name="mapUnderscoreToCamelCase" value="true"/>        
                <!-- 设置本地缓存范围 session:就会有数据的共享  statement:语句范围 (这样就不会有数据的共享 ) defalut:session -->        
                <setting name="localCacheScope" value="SESSION"/>        
                <!-- 设置但JDBC类型为空时,某些驱动程序 要指定值,default:OTHER,插入空值时不需要指定类型 -->        
                <setting name="jdbcTypeForNull" value="NULL"/>    
         </settings>    
        <plugins>        
                <plugin interceptor="com.github.pagehelper.PageHelper">            
                        <property name="dialect" value="mysql"/>            
                        <property name="offsetAsPageNum" value="false"/>            
                        <property name="rowBoundsWithCount" value="false"/>            
                        <property name="pageSizeZero" value="true"/>            
                        <property name="reasonable" value="false"/>            
                        <property name="supportMethodsArguments" value="false"/>            
                        <property name="returnPageInfo" value="none"/>        
               </plugin>    
      </plugins>
</configuration>

5 . 笔者给出gradle.build 的配置

dependencies {    
        compile fileTree(dir: 'lib', includes: ['*.jar'])    
        compile 'org.springframework.boot:spring-boot-starter-web'    
        compile 'org.springframework.boot:spring-boot-devtools'    
        compile 'org.springframework.boot:spring-boot-starter-thymeleaf'//    
        compile 'org.springframework.boot:spring-boot-starter-security'    
        compile 'org.springframework.boot:spring-boot-starter-redis'//    
        compile 'org.springframework.session:spring-session:1.2.0.RELEASE'//    
        compile "org.springframework.security.oauth:spring-security-oauth2"    
        compile 'mysql:mysql-connector-java'    
        /** 配置mybatis 数据源  */    
        compile("org.mybatis.spring.boot:mybatis-spring-boot-starter:1.1.1")    
        /** mybatis分页插件 */    
        compile 'com.github.pagehelper:pagehelper:4.1.6'    /** -Swagger */    
        compile("io.springfox:springfox-swagger-ui:2.2.2")    
        compile("io.springfox:springfox-swagger2:2.2.2")    testCompile 'org.springframework.boot:spring-boot-starter-test'    
        /** http 请求类*/    
        compile 'httpcomponents-httpcore:httpcore:4.0-alpha6'    
        compile 'org.apache.httpcomponents:httpmime:4.5.2'    
        compile 'commons-httpclient:commons-httpclient:3.1'    
        compile 'dom4j:dom4j:1.6.1'//    
  1. application.properties spring boot 的dataSource配置
spring.datasource.url=<url>
spring.datasource.username=<userName>
spring.datasource.password=<password>
spring.datasource.driverClassName=com.mysql.jdbc.Driver

7 . 最后open your terminal;input ,gradle bootRun 享受写代码带来的乐趣吧。

  1. 最后的最后笔者还是觉得mybatis 是比较繁琐的。比起jpa 跟hibernate 来说的话。= = !可能我还没有深入到mybatis 的底层里面吧。希望各位大神指导。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,778评论 6 342
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,637评论 18 139
  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,462评论 0 4
  • Spring 技术笔记Day 1 预热知识一、 基本术语Blob类型,二进制对象Object Graph:对象图...
    OchardBird阅读 967评论 0 2
  • 时间煮雨诠释了在时光的荒野里怎样的绝情与残酷?八月最后一天,我不想说"再见",也不想说"九月,你好"。...
    守望幸福_a029阅读 241评论 2 3