繁体   English   中英

jOOQ Spring 引导编译查询但不插入数据库

[英]jOOQ Spring Boot compiling query but not inserting into db

我目前正在尝试在我的 springboot 项目中使用 jOOQ 将用户从 html 表单中提供的某些数据插入到 MySQL 数据库中。 这是我的 MainController 负责从表单获取数据并通过 VisitorRepository 执行查询:我同时使用 add 和 insertVisitor 方法,但它们都不起作用。

@Controller
public class MainController {

    private final VisitorRepository visitorRepository;

    @Autowired
    public MainController (VisitorRepository visitorRepository) {
        this.visitorRepository = visitorRepository;
    }

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String main() {
        return "main";
    }

    @ResponseBody
    @PostMapping("/")
    public Phonenum firstSubmit(Phonenum phonenum){
        System.out.println(phonenum.getPhonenumber());
        visitorRepository.insertVisitor(phonenum.getPhonenumber(),"now", phonenum.getName());
        return visitorRepository.add(phonenum);
    }
}

访问者资源库接口:

    public interface VisitorRepository {

    public Phonenum add(Phonenum visitor);

    public List<Phonenum> findAll();

    public void  insertVisitor(String phoneNumber, String submitTime, String name);
    }

和存储库实现:

@Repository
@Transactional
public class VisitorRepo implements VisitorRepository{


private final DSLContext dslContext;


public VisitorRepo(DSLContext dslContext){
    this.dslContext = dslContext;
}


public void insertVisitor(String phoneNumber, String submitTime, String name){
    this.dslContext
            .insertInto(Phonenum.PHONENUM)
            .columns(Phonenum.PHONENUM.PHONENUMBER, Phonenum.PHONENUM.SUBMITTIME, Phonenum.PHONENUM.NAME)
            .values(phoneNumber, submitTime, name);

}


public com.demo.visitorlog.model.Phonenum add(com.demo.visitorlog.model.Phonenum visitor) {
    this.dslContext
            .insertInto(Phonenum.PHONENUM)
            .columns(Phonenum.PHONENUM.PHONENUMBER, Phonenum.PHONENUM.SUBMITTIME, Phonenum.PHONENUM.NAME)
            .values(visitor.getPhonenumber(), String.valueOf("submit time"), visitor.getName());
    System.out.println("ran");
    return visitor;
}

我不完全确定如何设置配置 class 但这是我所拥有的:

@Configuration
public class mainConfig{

    @Autowired
    private DataSource dataSource;

    @Bean
    public DataSourceConnectionProvider connectionProvider() {
        return new DataSourceConnectionProvider
                (new TransactionAwareDataSourceProxy(dataSource));
    }

    @Bean
    public DefaultDSLContext dsl() {
        return new DefaultDSLContext(configuration());
    }

    public DefaultConfiguration configuration() {
        DefaultConfiguration jooqConfiguration = new DefaultConfiguration();
        jooqConfiguration.set(connectionProvider());
        return jooqConfiguration;
    }

所以我在发布请求之后得到了System.out.println()但是当我查看我的数据库时没有插入任何东西。 我错过了什么吗? 任何形式的帮助将不胜感激:)

您必须调用.execute()来执行查询

this.dslContext
            .insertInto(Phonenum.PHONENUM)
            .columns(Phonenum.PHONENUM.PHONENUMBER, Phonenum.PHONENUM.SUBMITTIME, Phonenum.PHONENUM.NAME)
            .values(visitor.getPhonenumber(), String.valueOf("submit time"), visitor.getName())
            .execute();

问题在于 Spring 安全自动启用 csrf 保护,我必须在安全配置 class 中手动禁用:

@Override
    protected void configure(HttpSecurity http) throws Exception{
        http.cors().and().csrf().disable();
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM