3

MySQLデータベースに2つのテーブルがあります。

CREATE TABLE table1 (
  id int auto_increment,
  name varchar(10),
  CONSTRAINT pk_id primary key(id)
) 

CREATE TABLE table2 (
  id_fk int,
  stuff varchar(30),
  CONSTRAINT fk_id FOREIGN KEY(id_fk) REFERENCES table1(id) 
) 

これらの両方のテーブルにレコードを挿入したいと思います。基本的に、私はデータとしてID、名前などを持っています。Spring JDBCを使用して両方のテーブルにそれらを挿入するにはどうすればよいですか?

以下に示すように、テーブルに挿入しています。

    SimpleJdbcInsert insert1 = new SimpleJdbcInsert(this.getDataSource())
        .withTableName("table1")
        .usingColumns("name");

    Map<String, Object> parameters1 = new HashMap<String, Object>();
    parameters1.put("name", myObj1.getStuff());
    insert.execute(parameters1);

table2に挿入しているときに、table1からid値を取得するにはどうすればよいですか?

    SimpleJdbcInsert insert2 = new SimpleJdbcInsert(this.getDataSource())
        .withTableName("table2")
        .usingColumns("stuff");

    Map<String, Object> parameters2 = new HashMap<String, Object>();
    parameters2.put("stuff", myObj2.getStuff());
    insert.execute(parameters2);

また、どうすればトランザクションを維持できますか?

また、特定の名前のデータを取得するにはどうすればよいですか?

どんな助けでも大歓迎です!

4

1 に答える 1

1

この簡単な例を参照してください。クラスTestのすべてのメソッドはトランザクションになります。詳細については、SpringFrameworkのドキュメントを参照してください。

@Transactional
public class Test {
    @Autowired
    DataSource ds;

    public void test1() throws Exception {
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("c1", "test");
        SimpleJdbcInsert insert = new SimpleJdbcInsert(ds).withTableName("t1").usingColumns("c1")
                .usingGeneratedKeyColumns("id");
        long id = insert.executeAndReturnKey(params).longValue();

    params = new HashMap<String, Object>();
    params.put("stuff", "stuff");
    params.put("id_fk", id);
    SimpleJdbcInsert insert2 = new SimpleJdbcInsert(ds).withTableName(
            "table2").usingColumns("stuff", "id_fk");
    insert2.execute(params);

        NamedParameterJdbcTemplate tmpl = new NamedParameterJdbcTemplate(ds);
        params = new HashMap<String, Object>();
        params.put("id", id);
        String c1 = tmpl.queryForObject("select c1 from t1 where id = :id", params, String.class);
    }

コンテクスト

<context:annotation-config />
<tx:annotation-driven />

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource" />
</bean>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/test?user=root&amp;password=root" />
</bean>

<bean class="Test" />
于 2013-01-05T02:28:42.590 に答える