从mybatis的API Doc我可以看到,插入,删除,选择和更新都有一个int作为返回类型.但是没有关于返回整数含义的文档.
这是否与操作的成功有关?
有没有办法使用SpringMVC设置MyBatis以获得整个http请求的一个事务?通常OpenSessionInViewFilter在MyBatis中有类似Hibernate的东西,还是应该编写自己的过滤器来实现这种行为?
我目前面临以下问题:
我编写了一个Java程序来解析XML数据并将数据放入数据库中.因为我使用MyBatis,所以数据库几乎可以是已经存在的每个数据库.我只会告诉你一段代码然后我会解释这个问题.
public void insert(SourceContent content){
SqlSession session = sqlSessionFactory.openSession();
try {
session.insert("SourceDocument.insert", content);
session.commit();
} catch (Exception e){
e.printStackTrace();
} finally {
session.close();
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的DAO类,用于调用MyBatis映射文件的sql语句.如果MyBatis的映射配置正确完成,则插入我的内容(这是一个java bean的实例)会很糟糕.但是想象一下,如果我在数据库中重命名一个表,那么连接就会失败,因为配置错误.现在我想赶上即将发生的错误.当我使用上面的语句时:
catch (Exception e){
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
programm打印正确的异常:###原因:java.sql.SQLSyntaxErrorException:ORA-00942:Tabelle oder查看nicht vorhanden但是我不想捕获所有异常,我只是想捕获SQLSyntaxErrorException,因为我想告诉它用户,他在数据库中的表不可用.但是除了上面看到的正常异常之外,我无法捕获任何其他异常.我希望我能清楚地说出来.有人可以帮我吗?
我有2个数据库old&new,old需要对db详细信息进行过滤/处理并存储到中new。
OLD DB
我大约有10000种配置(数据库行)
和上面匹配的10000个BLOBS(xml文件大小平均为4MB)
NEW DB
1个新表将包含来自旧过滤器的数据,但是这次没有BLOB数据,而是绝对路径
并根据配置提出一些建议
在这里,我编写了一个程序(使用Groovy&MyBatis for DB),该程序获取所有可用的配置记录OLD DB并将其存储在类列表中,并且数据库连接已关闭
为了也为每个配置ID提取BLOBS,建立了一个新的连接并长时间保持打开状态
List<String> projectid
List<CSMConfigInfo> oldConfigs
List<ConfigInfo> newConfigs
Map<String,CSMConfigInfo> oldConfigMap
SqlSession session = DatabaseConnectivity.getOldCSMDBSessionFactory().openSession()
/* trying to batch execute based on project id */
projectid.each {pid->
logger.info "Initiating conversion for all configuration under $pid project id"
oldConfigMap.each {k,v->
/* Here I am keeping a DB connection open for a long time */
if(pid.equals(v)){
createFromBlob(k,session)
}
}
logger.info "Completed …Run Code Online (Sandbox Code Playgroud) 我已经List<SomeBean>使用select声明重新审阅了.现在,我正在努力insert.这个插入语句工作正常; 但是,我无法插入空值.该表没有任何NOT NULL约束.引发以下异常:
org.springframework.jdbc.UncategorizedSQLException: Error setting null for parameter #4 with JdbcType OTHER . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. Cause: java.sql.SQLException: Invalid column type
如何在mybatis中插入空值?
我是Java和mybatis3的新手.在一个项目我使用mybatis3 ..
说我有名为"t"的数据库表.有几列.
在项目中,我将向mapper.xml发送一个hashmap(包含2个keyList的值,值).从那里它将获得2个数组包含列名称的键和列的值...
我想插入那个表...我认为我能够动态插入数据并部分更新一些列数据...更新...但是得到sql语法错误...
我现有的mapper.xml代码
<insert id="createNews" parameterType="map" useGeneratedKeys="true" keyColumn="id">
INSERT INTO t
<foreach item="key" collection="Key" index="index" open="(" separator="," close=")">
#{key}
</foreach>
VALUES
<foreach item="value" collection="Value" index="index" open="(" separator="," close=")">
#{value}
</foreach>
;
</insert>
Run Code Online (Sandbox Code Playgroud)
部分错误stackTrace ....
### Error updating database. Cause:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''name'
)
VALUES
(
'some value'
' at line 3
Run Code Online (Sandbox Code Playgroud)
但是,当我对列名进行硬编码时,它的工作正常...如何动态插入...
注意:我用Google搜索,但无法找到...我不想使用任何pojo或注释...在此先感谢...
我想使用Select查询从表2检索记录,该查询具有动态返回的列名,表名以及表1返回的动态where条件。我正在使用sql server。这是以下情况-
<typeAlias alias="paramBean" type="com.loyalty.sys.bulkemail.dao.ParamBean" />
<resultMap id="paramBeanMap" class="paramBean">
<result property="columnName" column="COLUMN_NAME" />
<result property="tableName" column="TABLE_NAME" />
<result property="uniqueKey" column="UNIQUE_KEY" />
</resultMap>
<select id="getKeywordData" parameterClass="String" resultMap="paramBeanMap">
SELECT COLUMN_NAME, TABLE_NAME, UNIQUE_KEY from LT_TB_SMS_EMAIL_MESSAGE_KEYWORD where KEYWORD
in #keywordName#
</select>
<select id="selectKeywordValue" parameterClass="paramBean" resultClass="String">
SELECT #columnName# from #tableName# where #uniqueKey# in #memberNo#
</select>
Run Code Online (Sandbox Code Playgroud)
我可以从ParamBean属性中的第一个查询中获取值,但在第二个查询中的列名上抛出错误。我试图搜索类似的查询,但不幸的是找不到任何地方。在i-batis中是否可能,或者我应该采用另一种方法来检索具有动态输入的记录?任何帮助将不胜感激。谢谢。!
我正在使用mybatis,我想将ArrayList插入到某个表中.
可以在mapper中使用foreach,这最终会得到oracle异常ORA_00933.
这是mybatis映射器:
<insert id="batchInsert" parameterType="java.util.List">
insert into SYS_ROLES_PERMISSIONGROUP
(role_id, permissiongroup_id)
values
<foreach collection="list" item="model" index="index" separator=",">
(#{model.role_id}, #{model.permissiongroup_id})
</foreach>
</insert>Run Code Online (Sandbox Code Playgroud)
org.springframework.jdbc.BadSqlGrammarException:
### Error updating database. Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL ???????
### The error may involve com.gaotime.platform.system.mapper.RolePermissiongroupMapper.batchInsert-Inline
### The error occurred while setting parameters
### SQL: insert into SYS_ROLES_PERMISSIONGROUP (role_id, permissiongroup_id) values (?, ?) , (?, ?) , (?, ?)
### Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL ???????
; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: ORA-00933: SQL ???????
at org.springframework.jdbc.support.SQLExceptionSubclassTranslator.doTranslate(SQLExceptionSubclassTranslator.java:95) …Run Code Online (Sandbox Code Playgroud)<select id="keyEquipmentShiftAutomatedModelData" parameterType="java.util.Map" resultType="java.util.Map">
SELECT ID, SUM(VALUE1 + VALUE2) Total
FROM tableName
GROUP BY ID
</select>
Returns below result in sql
ID, Total
1 (null)
Run Code Online (Sandbox Code Playgroud)
但是当在Map中返回结果时,myBatis返回{ID = 1},其中Total缺失.如何将带有null的列添加到结果集中以及类似这样的内容{ID = 1,Total = null}或类似这样的内容{ID = 1,Total =""}
数据库是MySQL.代码应如下所示:
public interface UserMapper {
@Select("....")
boolean checkUserExists(@Param("email") String email);
}
Run Code Online (Sandbox Code Playgroud)
是否可能,以及如何编写SELECT SQL?(可以存在吗?)