我们讲一下mybatis集成的四种方式(可以先翻看一下上篇博客),顺带把分页pageHelper讲了
分页插件先加上
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.1</version>
</dependency>
方法一
在启动java类中添加注入bean:sqlSessionFactory和dataSource
@ComponentScan
@MapperScan("org.test1.mapper")
@SpringBootApplication
public class Application {
@Bean
@ConfigurationProperties(prefix="spring.datasource")
public DataSource dataSource(){
return new org.apache.tomcat.jdbc.pool.DataSource();
}
@Bean(name="sqlSessionFactory")
public SqlSessionFactory sqlSessionFactoryBean() throws Exception{
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource());
//分页插件
PageHelper pageHelper = new PageHelper();
Properties properties = new Properties();
//properties.setProperty("dialet", "Oracle");
properties.setProperty("resonable", "false");
properties.setProperty("pageSizeZero", "true");
pageHelper.setProperties(properties);
sqlSessionFactoryBean.setPlugins(new Interceptor[]{pageHelper});
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:/mybatis/*.xml"));
return sqlSessionFactoryBean.getObject();
}
@Bean
public PlatformTransactionManager transactionManager(){
return new DataSourceTransactionManager(dataSource());
}
public static void main(String args[]){
SpringApplication.run(Application.class);
}
}
调用:
PageHelper.startPage(1,1)
;
param:第几页,页面几条数据
这是对于我们上篇博客集成mybatis的方法,直接添加个拦截就可以了;
具体的可以看上篇博客
方法二
我们再试另一种方法:
加两个config文件
通过添加@Configuration来解决的注入dataSource和sqlSessionFactory的
@Configuration
@EnableTransactionManagement
public class MyBatisConfig implements TransactionManagementConfigurer {
@Autowired
DataSource dataSource;
@Bean(name = "sqlSessionFactory")
public SqlSessionFactory sqlSessionFactoryBean() {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setTypeAliasesPackage("org.test1.mapper");
//分页插件
PageHelper pageHelper = new PageHelper();
Properties properties = new Properties();
properties.setProperty("reasonable", "true");
properties.setProperty("supportMethodsArguments", "true");
properties.setProperty("returnPageInfo", "check");
properties.setProperty("params", "count=countSql");
pageHelper.setProperties(properties);
//添加插件
bean.setPlugins(new Interceptor[]{pageHelper});
//添加XML目录
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
try {
bean.setMapperLocations(resolver.getResources("classpath:/mybatis/*.xml"));
return bean.getObject();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
@Bean
public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
@Bean
public PlatformTransactionManager annotationDrivenTransactionManager() {
return new DataSourceTransactionManager(dataSource);
}
}
@Configuration
//TODO 注意,由于MapperScannerConfigurer执行的比较早,所以必须有下面的注解
@AutoConfigureAfter(MyBatisConfig.class)
public class MyBatisMapperScannerConfig{
@Bean
public MapperScannerConfigurer mapperScannerConfigurer() {
MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
mapperScannerConfigurer.setBasePackage("org.test1.mapper");
return mapperScannerConfigurer;
}
}
其它没有区别;
方法三
第三种超级简单的办法:
但注意添加mapper扫描
就是把我们configuration这步给省去了;用的人家启动时默认的sqlSessionFactory;
直接在application.properties中添加:mybatis.mapperLocations: classpath:/mybatis/*.xml;
启动即可;
需要配置的话可以添加mybatis的其他参数
# MyBatis mybatis:
typeAliasesPackage: com.tony.entity
mapperLocations: classpath:/com/tony/mapper/*.xml
configLocation: classpath:/mybatis-config.xml
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="logImpl" value="LOG4J"/>
</settings>
<typeAliases>
<typeAlias type="org.test.mapper.testMapper" alias="Student" />
</typeAliases>
<plugins>
<!--mybatis分页插件-->
<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>
<mappers>
<mapper resource="/mybatis/user.xml"/>
</mappers>
</configuration>
参考:http://www.jianshu.com/p/5ef281100bb6/
http://blog.youkuaiyun.com/qincidong/article/details/76120968
方法四
上文提到过的,什么也不用做,直接在mapper接口中写方法就Ok了;这种功能集成太少,没有插件;
@Select("select id from table1")
public int getMsg3();
前三种方法其实最终目的都一样
方法一和方法二其实差不多,都是通过手动注解的方式将mybatis和分页加载;
而方法三则是系统自动加载,个人推荐方法三;