MyBatis good
2016-07-19 07:53
555 查看
命名解析:为了减少输入量,MyBatis 对所有的命名配置元素(包括语句,结果映射,缓存等)使用了如下的命名解析规则。
完全限定名(比如“com.mypackage.MyMapper.selectAllThings”)将被直接查找并且找到即用。
短名称(比如“selectAllThings”)如果全局唯一也可以作为一个单独的引用。如果不唯一,有两个或两个以上的相同名称(比如“com.foo.selectAllThings ”和“com.bar.selectAllThings”),那么使用时就会收到错误报告说短名称是不唯一的,这种情况下就必须使用完全限定名。
对于像 BlogMapper 这样的映射器类(Mapper class)来说,还有另一招来处理。它们的映射的语句可以不需要用 XML 来做,取而代之的是可以使用 Java 注解。比如,上面的 XML 示例可被替换如下:
对于简单语句来说,注解使代码显得更加简洁,然而 Java 注解对于稍微复杂的语句就会力不从心并且会显得更加混乱。因此,如果你需要做很复杂的事情,那么最好使用 XML 来映射语句。
选择何种方式以及映射语句的定义的一致性对你来说有多重要这些完全取决于你和你的团队。换句话说,永远不要拘泥于一种方式,你可以很轻松的在基于注解和 XML 的语句映射方式间自由移植和切换。
http://www.mybatis.org/mybatis-3/zh/getting-started.html
说明:Java-based Config。
不是通过 mybatis 的 SqlSessionFactoryBuilder 来创建 SqlSessionFactory ,而是通过 mybatis-spring 的 SqlSessionFactoryBean 来获取。
1、首先要有一个DataSource 。
需要注意,事务管理器也在这里注册。(mybatis-spring插件会自动调用该事务管理器)
2、然后,注册SqlSessionFactoryBean(或者SqlSessionFactory,二选一,内容一致)。如下:
这里还设置了一堆参数。需要注意的是,
①设置了 TypeAliasesPackage 。
②设置了 Configuration 。
③mybatis-spring会自动创建 Configuration 对象,所以通过 sqlSessionFactory.getConfiguration() 即可获取并进行设置。
3、再注册一个 SqlSessionTemplate,这是 mybatis-spring 的核心。
4、设置mapper的位置,有两种方法。
①推荐这种,简单。
②
至此,已可以成功运行。
但是,还有更简单的方法,那就是 MyBatis-Spring-Boot-Starter 。使用该Starter时,会自动查找DataSource,并自动创建SqlSessionFactoryBean 和 SqlSessionTemplate。所以,只需要设置mapper所在的位置和别名所在的包即可。
见 MyBatis-Spring-Boot 使用总结 。 http://www.cnblogs.com/larryzeal/p/5874103.html
https://github.com/mybatis/spring-boot-starter/blob/master/mybatis-spring-boot-autoconfigure/src/main/java/org/mybatis/spring/boot/autoconfigure/MybatisAutoConfiguration.java
完全限定名(比如“com.mypackage.MyMapper.selectAllThings”)将被直接查找并且找到即用。
短名称(比如“selectAllThings”)如果全局唯一也可以作为一个单独的引用。如果不唯一,有两个或两个以上的相同名称(比如“com.foo.selectAllThings ”和“com.bar.selectAllThings”),那么使用时就会收到错误报告说短名称是不唯一的,这种情况下就必须使用完全限定名。
对于像 BlogMapper 这样的映射器类(Mapper class)来说,还有另一招来处理。它们的映射的语句可以不需要用 XML 来做,取而代之的是可以使用 Java 注解。比如,上面的 XML 示例可被替换如下:
package org.mybatis.example; public interface BlogMapper { @Select("SELECT * FROM blog WHERE id = #{id}") Blog selectBlog(int id); }
对于简单语句来说,注解使代码显得更加简洁,然而 Java 注解对于稍微复杂的语句就会力不从心并且会显得更加混乱。因此,如果你需要做很复杂的事情,那么最好使用 XML 来映射语句。
选择何种方式以及映射语句的定义的一致性对你来说有多重要这些完全取决于你和你的团队。换句话说,永远不要拘泥于一种方式,你可以很轻松的在基于注解和 XML 的语句映射方式间自由移植和切换。
http://www.mybatis.org/mybatis-3/zh/getting-started.html
说明:Java-based Config。
不是通过 mybatis 的 SqlSessionFactoryBuilder 来创建 SqlSessionFactory ,而是通过 mybatis-spring 的 SqlSessionFactoryBean 来获取。
1、首先要有一个DataSource 。
需要注意,事务管理器也在这里注册。(mybatis-spring插件会自动调用该事务管理器)
@Bean(name = "transactionManager") public DataSourceTransactionManager dataSourceTransactionManager() { DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(); dataSourceTransactionManager.setDataSource(this.dataSource()); return dataSourceTransactionManager; }
2、然后,注册SqlSessionFactoryBean(或者SqlSessionFactory,二选一,内容一致)。如下:
@Bean(name = "sqlSessionFactory") public SqlSessionFactory sqlSessionFactory() throws Exception { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(this.dataSource()); // sqlSessionFactoryBean.setConfigLocation(new ClassPathResource("mybatis-config.xml")); // 这里可以通过mybatis-config.xml 来设置 typeAliasPackage和mapper。 // Resource[] mapperLocations = new Resource[] { new ClassPathResource("com.expert.dao") }; // 这个和@MapperScan冲突吗?这个设置有问题。 // sqlSessionFactoryBean.setMapperLocations(mapperLocations);//<mappers> sqlSessionFactoryBean.setTypeAliasesPackage(PojoBasePackage); // sqlSessionFactoryBean.setCache(cache); SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBean.getObject(); // It can be specified a Configuration instance directly without MyBatis XML configuration file. sqlSessionFactory.getConfiguration().setMapUnderscoreToCamelCase(true);// 开启驼峰映射 sqlSessionFactory.getConfiguration().setCacheEnabled(true); sqlSessionFactory.getConfiguration().setLazyLoadingEnabled(true); sqlSessionFactory.getConfiguration().setAggressiveLazyLoading(false); // Class<Object> logImpl = sqlSessionFactory.getConfiguration().getTypeAliasRegistry().resolveAlias("SLF4J"); sqlSessionFactory.getConfiguration().setLogImpl(Slf4jImpl.class);// logImpl sqlSessionFactory.getConfiguration().setLogPrefix("###SPRING_BOOT###MYBATIS###"); sqlSessionFactory.getConfiguration().setDefaultExecutorType(ExecutorType.REUSE); sqlSessionFactory.getConfiguration().setUseGeneratedKeys(true); return sqlSessionFactory; }
这里还设置了一堆参数。需要注意的是,
①设置了 TypeAliasesPackage 。
②设置了 Configuration 。
③mybatis-spring会自动创建 Configuration 对象,所以通过 sqlSessionFactory.getConfiguration() 即可获取并进行设置。
3、再注册一个 SqlSessionTemplate,这是 mybatis-spring 的核心。
@Bean @Scope(BeanDefinition.SCOPE_PROTOTYPE) // 多例? public SqlSessionTemplate sqlSessionTemplate() throws Exception { return new SqlSessionTemplate(this.sqlSessionFactory()); }
4、设置mapper的位置,有两种方法。
①推荐这种,简单。
@Configuration @MapperScan(basePackages = { "com.expert.dao" }) public class DruidDataSourceConfig{ // ... }
②
@Bean public MapperScannerConfigurer mapperScannerConfigurer() { MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer(); mapperScannerConfigurer.setBasePackage(DaoBasePackage); mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory"); return mapperScannerConfigurer; }
至此,已可以成功运行。
但是,还有更简单的方法,那就是 MyBatis-Spring-Boot-Starter 。使用该Starter时,会自动查找DataSource,并自动创建SqlSessionFactoryBean 和 SqlSessionTemplate。所以,只需要设置mapper所在的位置和别名所在的包即可。
见 MyBatis-Spring-Boot 使用总结 。 http://www.cnblogs.com/larryzeal/p/5874103.html
@ConfigurationProperties(prefix = MybatisProperties.MYBATIS_PREFIX) public class MybatisProperties { public static final String MYBATIS_PREFIX = "mybatis";
@org.springframework.context.annotation.Configuration @ConditionalOnClass({ SqlSessionFactory.class, SqlSessionFactoryBean.class }) @ConditionalOnBean(DataSource.class) @EnableConfigurationProperties(MybatisProperties.class) @AutoConfigureAfter(DataSourceAutoConfiguration.class) public class MybatisAutoConfiguration {
https://github.com/mybatis/spring-boot-starter/blob/master/mybatis-spring-boot-autoconfigure/src/main/java/org/mybatis/spring/boot/autoconfigure/MybatisAutoConfiguration.java
相关文章推荐
- django的url()用法总结
- Hangouts高清视频的背后:从H.264编码向WebRTC的进化
- 为什么说《Pokémon GO》是史上第一个真正意义上的“全民”游戏?
- go语言学习-面相对象
- 不停机mongo2向mongo3迁移同步
- APKTool工具的使用
- Mongoose 参考手册
- 【谷歌市场安装】Google Play 闪退问题解决
- django 项目布局
- CodeForces 266C—— Below the Diagonal(模拟,贪心,递归)
- Idea Go Lang Debug环境搭建
- 天棋哥哥大战AlphaGo
- [Django] 单元测试小记
- [Django] 单元测试小记
- Google浏览器跨域
- django(三)
- Django 1.6.5模板搭建
- #include<algorithm>中的sort算法
- 项目中坑记录:mongo 插入失败无提示
- GoldenGate单向复制配置(支持DDL复制)