未将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();
}
}
}
如果这是一个愚蠢的问题/在我道歉之前被问过。在过去的几个小时里,我一直在用我的头敲击键盘,却无法找出问题所在
# 1 楼答案
我将添加这条评论作为回答,因为评论中没有太多空间,但这是一条评论
你说没有错。我只能想到两件事:
数据库在某种程度上是临时的,不会持久保存在文件系统上,或者在连接关闭后被删除;或者
执行过程中出现了一个无声的错误
我建议启用MyBatis调试模式。我使用Log4j(但任何其他日志工作),对于您的情况,您应该添加一行,如:
这将逐步向您展示每次执行。大多数时候
DEBUG
级别对我来说已经足够了,但是你可以将其增强到TRACE
以查看更多内容无论如何,有关详细信息,请参见MyBatis Logging
# 2 楼答案
解决了我自己的问题,所以我会在这里为遇到同样问题的其他人回答
在教室里。脚本文件我将“文件写入延迟”设置为0毫秒,而不是原来的500毫秒延迟,后者似乎无法持久写入数据库
正常的数据库操作现在已经成功了