加入收藏 | 设为首页 |

ope体育官网-Springboot学习记载09 数据拜访:运用mirage-sql

海外新闻 时间: 浏览:357 次

本章学习运用Springboot整合mirage-sql数据拜访类库。这个类库是由日本开发者开发的开源结构。在实践运用中有很好的体现。详细介绍可参照如下工程。

https://github.com/mirage-sql/mirage.git

本学习记载的示例代码克隆地址,分支为develop

https://gitee.com/kutilion/MyArtifactForEffectiveJava.git

示例相关代码

  • studySpringboot.n09.mirage.config.MirageSqlSetting.java
  • studySpringboot.n09.mirage.repository.MirageRepository.java
  • studySpringboot.n09.mirage.repository.MirageRepositoryImpl.java
  • studySpringboot.n09.mirage.repository.JdbcServiceTest ← 测验类
  • studySpringboot.n09.mirage.repository.miragesql.sql ← 资源

Mirage-sql简介

Mirage-sql是一个简略,可是强壮的操作SQL驱动数据库的开源类库。能够在一般的.sql文件中运用SQL模板来完成动态SQL的生成。下面的代码片段是Mirage-sql官网供给的示例:

SELECT * FROM BOOK
/*BEGIN*/
WHERE
/*IF author != null */
AUTHOR = /*author*/'Naoki Takezoe'
/*END*/
/*IF minPrice != null */
AND PRICE >= /*minPrice*/20
/*END*/
/*IF maxPrice != null */
AND PRICE <= /*maxPrice*/100
/*END*/
/*END*/
ORDER BY BOOK_ID ASC

能够看到,经过/* */注释,能够完成简略的逻辑。示例只展现了下面两个常用功用:

  • 传递参数不存在的时分,检索条件中去除该参数的AND句子
  • 为参数供给一个默认值,比方PRICE的默认值是20

这段片段仅仅一个展现,里边有一个过错,能够经过如下办法防止。

SELECT * FROM BOOK
/*BEGIN*/
WHERE
1=1
/*IF author != null */
AND AUTHOR = /*author*/'Naoki Takezoe'
/*END*/
/*IF minPrice != null */
AND PRICE >= /*minPrice*/20
/*END*/
/*IF maxPrice != null */
AND PRICE <= /*maxPrice*/100
/*END*/
/*END*/
ORDER BY BOOK_ID ASC

Mirage-sql的装备

在Springboot中运用mirage比较简略,首要要在build.gradle中引进依靠。其次需求手动装备一下使mirage能够运用数据库衔接

build.gradle

 // 供给jdbc支撑
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
// mirage的中心库
implementation 'com.miragesql:miragesql:2.1.0'
// mirage支撑Spring运用的库
implementation 'com.miragesql:miragesql-integration:2.1.0'

MirageSqlSetting.java

@Configuration
public class MirageSqlSetting {
@Bean
ConnectionProv李英爱ider getConnectionProvider(DataSource dataSource) {
DataSourceTransactionManager tx = new DataSourceTransactionManager();
tx.setDataSource(dataSource);
SpringConnectionProvider bean = new SpringConnectionProvider();
bean.setTransactionManager(tx);
return bean;
}
@Bean
SqlManager getSqlManager(ConnectionProvider connectionProvider) {
SqlManagerImpl bean = new SqlManagerImpl();
bean.setConnectionProvider(connectionProvider);
bean.setDialect(new HyperSQLDialect());
return bean;
}
}

这儿需求介绍ope体育官网-Springboot学习记载09 数据拜访:运用mirage-sql一下@Bean注解。这是一个办法注释。它相当于xml装备文件中的标签。@Bean通知Spring它注解的办法的回来值需求Spring进行注册。这样, 作为开发人员的咱们能够定制这个办法让它回来咱们需求的目标。而@Component之类的注解是让Spring主动生成目标进行注册。关于@Bean和@Component/@Service/@Repository的差异能够参照:

https://stackoverflow.com/questions/10604298/sprope体育官网-Springboot学习记载09 数据拜访:运用mirage-sqling-component-versus-bean

经过示例代码,咱们能够知道为了运用mirage-sql需求让Spring办理它的SqlManager目标。一切的sql句子的履行,都经过这个类的目标来事项。SqlManager类又需求DB衔接,所以供给DB衔接的类ConnectionProvider的办法getConnectionProvider也需求用@Bean进行注解。他们的依靠联系如下:

SqlManager → ConnectionProvider → DataSource

DataSource由Spring主动加载。

到此为止,Mirage-sql的装备就完成了。接下来是怎么运用它。

Mirage-sql的运用

MirageRepositoryImpl.java读取sql模板的办法

 // get the sql template file full path
private String getFile(String name) {
String prefix = "classpath:" + getClass().getPackage().getName().replace('.', '/') + "/";
String suffix = ".sql";
String filename = prefix + name + suffix;
Resource resource = resourceLoader.getResource(filename);
try (InputStream in = resource.getope体育官网-Springboot学习记载09 数据拜访:运用mirage-sqlInputStream()) {
return new String(IOUtil.readStream(in), "UTF-8");
} catch (IOException e) {
throw new RuntimeException("SQL templateope体育官网-Springboot学习记载09 数据拜访:运用mirage-sql not found: " + filename, e);
}
}

sql模板放在src/main/resources的同名包下。经过resourceLoader来获得模板,而且读取它。

MirageRepositoryImpl.java履行sql的办法

@Autowired
private SqlManager sql;
public List find(Class clazz, String name, Map params) {
List results =
sql.getResultList(clazz, new StringSqlResource(getFile("miragesql")), params);
return results;
}

SqlManager已经由装备类预备好了, 这儿运用@Autowired注解注入后就能够直接运用。

SQL模板miragesql.sql

SELECT * FROM TESTOBJECT
/*BEGIN*/
WHERE
1 = 1
/*IF id != null */
AND ID = /*id*/'0'
/*END*/
/*IF name != null */
AND NAME = /*name*/""
/*END*/
/*IF content != null */
AND CONTENT = /*content*/""
/*END*/
/*END*/
ORDER BY ID ASC

发动坐落src/text/java的测验类JdbcServiceTest.java能够看到Assert句子的判定是成功的。

Assert.assertEquals(3, mirageRepository.find(TestObject.class, "miragesql", null).size());

留意:测验数据运用的是上一章的履行成果

总结

  1. 学习一个由日本人开发的比较好用的动态SQL类库Mirage-sql
  2. @Bean的扼要学习