Skip to content

默认数据源(DataSource)

summer-data中有默认数据源的概念,通过如下方式来设置默认数据源。

java
DataSource dataSource = new Druid();
SummerData.setDefaultDataSource(dataSource);

一个 Jsql 在执行的时候,如果未设置DataSource,则使用默认的DataSource。

java
Jsql jsql = new Jsql("select * from demo");
jsql.queryForMap();

当然也可以指定一个数据源

java
Jsql jsql = new Jsql("select * from demo");
DataSource dataSource2 = new Druid();
jsql.setConnection(dataSource2);
jsql.queryForMap();

连接(Connection)

在生产环境中我们一般不会使用连接,但是在一些特殊环境下需要使用连接,summer-data没有默认连接的概念,如果需要使用连接,需要手动设置。

java
Jsql jsql = new Jsql("select * from demo");
Connection conn = new Connection();
jsql.setConnection(conn);
jsql.queryForMap();

事务(Transaction)

summer-data支持事务,并且提倡显示的使用事务。

创建事务

// 使用默认数据源创建事务
Transaction.create()

// 使用指定的数据源创建事务
DataSource dataSource;
Transaction.create(dataSource);

// 使用指定的连接创建事务
Connection conn;
Transaction.create(conn);

开始事务

java
Transaction tx = Transaction.create();
tx.beginTransaction(()->{
    Jsql jsql = new Jsql("update demo set title = 'x' where res_id = 1");
    jsql.executeUpdate();
});

复杂的事务控制

Transcation tx1 = Transcation.create();
Transcation tx2 = Transcation.create();

Jsql jsql1 = new Jsql("update xxx");
Jsql jsql2 = new Jsql("update xxx");
Jsql jsql3 = new Jsql("update xxx");

jsql1.setConnection(tx1);
jsql2.setConnection(tx2);
jsql3.setConnection(tx1);

jsql1.executeUpdate();
jsql2.executeUpdate();
jsql3.executeUpdate();

tx1.commit();
tx2.commit();

一致的使用逻辑

DataSource/Connection/Transaction 的使用逻辑不仅适用于 Jsql,同样也适用于 Table 的持久化和 Jql 查询。

SummerData 使用 Session 管理数据库连接以及事务,Session 由 SessionFactory 产生。 一个 SessionFactory 可以由 java.sql.Connection javax.sql.DataSource 构建。