有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

未将java Mybatis 3.4.6数据插入HSQLDB

我将Mybatis 3.4.6与HSQLDB 2.4.1结合使用,似乎无法获得任何数据插入数据库。程序执行时没有错误,看起来好像已经完成了,但是当我检查数据库时,没有插入任何内容

从数据库中检索/选择行似乎工作正常,这使我相信我的语法/结构在“插入”映射方面有问题。任何帮助都将不胜感激

配置。xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <!--suppress XmlPathReference -->
    <properties resource="org/mybatis/hsqldb/db.properties"/>
    <settings>
        <!-- Globally enables or disables any caches configured in any mapper under this configuration -->
        <setting name="cacheEnabled" value="false"/>
        <!-- Sets the number of seconds the driver will wait for a response from the database -->
        <setting name="defaultStatementTimeout" value="5"/>
        <!-- Enables automatic mapping from classic database column names A_COLUMN to camel case classic Java property names aColumn -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!-- Allows JDBC support for generated keys. A compatible driver is required.
        This setting forces generated keys to be used if set to true,
         as some drivers deny compatibility but still work -->
        <setting name="useGeneratedKeys" value="true"/>
    </settings>
    <typeAliases>
        <typeAlias type="org.mybatis.hsqldb.POJO.Contact" alias="contact" />
        <typeAlias type="org.mybatis.hsqldb.POJO.EIList" alias = "EIList" />
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <!--suppress MybatisConfigXml -->
                <property name="driver" value="${jdbc.driver}" />
                <!--suppress MybatisConfigXml -->
                <property name="url" value="${jdbc.url}" />
                <!--suppress MybatisConfigXml -->
                <property name="username" value="${jdbc.username}" />
                <!--suppress MybatisConfigXml -->
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--suppress XmlPathReference -->
        <mapper resource="org/mybatis/hsqldb/mappers-xml/ContactMapper.xml" />
        <!--suppress XmlPathReference -->
        <mapper resource="org/mybatis/hsqldb/mappers-xml/EIListMapper.xml" />
    </mappers>
</configuration>

db。属性

jdbc.driver=org.hsqldb.jdbcDriver
jdbc.url=jdbc:hsqldb:file:hsqldb/db/ipdb;shutdown=true
jdbc.username=admin
jdbc.password=password

接触。java

package org.mybatis.hsqldb.POJO;

public class Contact {
    Integer id;
    String lastName;
    String firstName;
    String phone;
    String email;

    public Contact(Integer id, String lastName, String firstName, String phone, String email) {
        this.id = id;
        this.lastName = lastName;
        this.firstName = firstName;
        this.phone = phone;
        this.email = email;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

联系人映射器。java

package org.mybatis.hsqldb.mappers_interface;

import java.util.List;

import org.mybatis.hsqldb.POJO.Contact;

public interface ContactMapper {

    Integer insert(Contact contact);

    List<Contact> selectAll();

    Contact select(Integer id);

    Integer update(Contact contact);

    Integer delete(Integer id);

}

联系人映射器。xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
        "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="org.mybatis.hsqldb.mappers_interface.ContactMapper">

    <insert id="insert" parameterType="contact">
        INSERT INTO CONTACT VALUES (${id}, ${lastName}, ${firstName}, ${phone}, ${email})
    </insert>

    <update id="update">
        UPDATE CONTACT SET
        "lastName" = #{lastName},
        "firstName" = #{firstName},
        "phone" = #{phone},
        "email" = #{email}
        WHERE "id" = #{id}
    </update>

    <delete id="delete">
        DELETE FROM CONTACT WHERE "id" = #{value}
    </delete>

    <select id="selectAll" resultType="contact">
        SELECT "id", "lastName", "firstName", "phone", "email" from CONTACT
    </select>

    <select id="select" resultType="contact">
        SELECT "id", "lastName", "firstName", "phone", "email" from CONTACT where "id" = #{value}
    </select>

</mapper>

驱动程序。java

package org.mybatis.hsqldb;

import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.mybatis.hsqldb.POJO.Contact;
import org.mybatis.hsqldb.POJO.EIList;
import org.mybatis.hsqldb.mappers_interface.ContactMapper;
import org.mybatis.hsqldb.mappers_interface.EIListMapper;

public class Driver {

    public static void main(String[] args)
    {
        SqlSessionFactory sqlMapper = null;
        String resource = "org/mybatis/hsqldb/configuration.xml";
        Reader reader = null;

        try {
            reader = Resources.getResourceAsReader(resource);
            sqlMapper = new SqlSessionFactoryBuilder().build(reader);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("Problem opening configuration.xml");
        }
        SqlSession session = sqlMapper.openSession();
        try {

            ContactMapper mapper = session.getMapper(ContactMapper.class);
            Contact testContact = new Contact(3,"'last'","'first'","'phone'","'email'");
            int result = mapper.insert(testContact);
            session.commit();
        } finally {
            session.close();
        }

    }
}

如果这是一个愚蠢的问题/在我道歉之前被问过。在过去的几个小时里,我一直在用我的头敲击键盘,却无法找出问题所在


共 (2) 个答案

  1. # 1 楼答案

    我将添加这条评论作为回答,因为评论中没有太多空间,但这是一条评论

    你说没有错。我只能想到两件事:

    • 数据库在某种程度上是临时的,不会持久保存在文件系统上,或者在连接关闭后被删除;或者

    • 执行过程中出现了一个无声的错误

    我建议启用MyBatis调试模式。我使用Log4j(但任何其他日志工作),对于您的情况,您应该添加一行,如:

    log4j.logger.org.mybatis.hsqldb.mappers_interface.ContactMapper=DEBUG
    

    这将逐步向您展示每次执行。大多数时候DEBUG级别对我来说已经足够了,但是你可以将其增强到TRACE以查看更多内容

    无论如何,有关详细信息,请参见MyBatis Logging

  2. # 2 楼答案

    解决了我自己的问题,所以我会在这里为遇到同样问题的其他人回答

    在教室里。脚本文件我将“文件写入延迟”设置为0毫秒,而不是原来的500毫秒延迟,后者似乎无法持久写入数据库

    正常的数据库操作现在已经成功了