当前位置: 首页 > 知识库问答 >
问题:

使用Spring JDBC在外表中插入数据

阎懿轩
2023-03-14

我的MySQL数据库中有两个表:

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) 
) 
    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);
    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);

另外,如何获取给定名称的数据?

任何帮助都是非常感谢的!

共有1个答案

商茂勋
2023-03-14

请看这个简单的示例,类测试中的所有方法都是事务性的,更多信息请阅读Spring Framework文档

@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" />
 类似资料:
  • 我做了2个表第二个表由外键组成,它引用了第一个表的主键第二个表由3个字段组成id(主键),顺序号,fid我使用以下命令 sql语法中的错误

  • 我正在创建一个使用Apache Web服务器(PHPmyAdmin)的PHP网站 我有三张桌子: 品牌 brand_id(主键)自动增加 brand_name < li>item_id(主键)自动递增 < li >项目类别 model_id(主键)自动增加 item_model brand_id(brand.brand_id的外键) brand_name(item.item_id的外键) 数量 价

  • 我有这样的查询(select id,reffid,someData from myTable): 我需要查询来执行以下操作:如果我有少于 4 个具有相同值的 reffid,则添加具有相同 reffid 的行并在 someData 中添加 -。结果查询应如下所示: 如何做到这一点?

  • 问题内容: 我在阅读Hibernate HQL教程时发现HQL不支持,但是HQL仅支持从另一个表插入。 假设我要在一个表中插入相同的值,并且该数据不是来自任何其他表,即该值不在任何其他表中,那么我该如何在HQL中执行此操作? 另外,是否想知道HQL中此类限制的背后原因? 问题答案: 如果数据来自另一个表,则无需使用hql进行插入。 只需获取对您实体的引用,保留一个Hibernate会话,然后调用s

  • 我试图用Hibernate保存一个表。父表与其子表具有一对多关系。父表POJO有其子表POJO的集合。 当我保存父表时,数据也被插入到它的子表中,但它的外键不为NULL。 下面是我的代码:家长: 儿童: Hibernate服务: 我找到了一个解决方案,将我的孩子反向映射到父母,如下所示 但我在想这是否可以避免。我希望还有其他方法,我不需要把我的每个孩子都映射到父母那里。 Kinldy帮助,如果你能

  • 我正在尝试使用hector API将数据插入到cassandra数据库中。下面显示了我使用的代码。 但是在给定的keyspace下的/var/lib/cassandra/data文件夹中找不到任何插入的数据。数据插入似乎不能正常工作。代码有什么问题。下面显示了我用来创建'data'列族的命令。