默认数据源(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 构建。