博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MyBatis good
阅读量:6810 次
发布时间:2019-06-26

本文共 4873 字,大约阅读时间需要 16 分钟。

命名解析:为了减少输入量,MyBatis 对所有的命名配置元素(包括语句,结果映射,缓存等)使用了如下的命名解析规则。

  • 完全限定名(比如“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);//
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
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所在的位置和别名所在的包即可。
 
见 
 。 

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

 

转载于:https://www.cnblogs.com/softidea/p/5683360.html

你可能感兴趣的文章
端口被占用了,使用netstat找到占用端口的进程
查看>>
我的vim colorscheme - 白色之夜 - 博客园
查看>>
ECSHOP 商品页详情页 添加同类随机商品
查看>>
Select函数
查看>>
【译】UNIVERSAL IMAGE LOADER. PART 3---ImageLoader详解
查看>>
再探迭代器(插入迭代器、流迭代器、反向迭代器、移动迭代器)
查看>>
hdu1181 (变形课)简单地dfs
查看>>
75. Sort Colors
查看>>
WorldWind源码剖析系列:视景体类Frustum
查看>>
(转)完整java开发中JDBC连接数据库代码和步骤
查看>>
Redis Lua脚本原理
查看>>
有时间测试dism
查看>>
/Users/alamps/AndroidStudioProjects/Demo10ScrollView
查看>>
【Swift】iOS UICollectionView 计算 Cell 大小的陷阱
查看>>
为什么我刚发表的文章变成了“待审核”,csdn有没有官方解释啊
查看>>
Matplotlib 工具包 使用教程索引
查看>>
封装bt轮播图淡入淡出效果样式
查看>>
2016第29周三
查看>>
Maven 与 IntelliJ IDEA 的完美结合
查看>>
Apache
查看>>