domain: ResourceType,Resource
dao: ResourceTypeDao , ResourceDao
public class Resource {
private Long id;
private String name;
private String label;
private ResourceType resourceType;
private Date createdTime;
private Date modifiedTime;
.........................
}
问题:在写测试代码时,先创建了一个ResourceType保存到数据库中,再创建一个Resource保存到数据库,之后再更改Resource对象的属性update数据库中记录,但此时,Resource的name属性在数据库中就成了乱码,但其它的String类属性都 正常,且name属性的乱码与中英文无关。更奇怪的事,当不给第一次保存和之后更新时如果不给Resource的Date类的字段赋值,就一切正常,或不使用ResourceTypeDao创建并保存ResourceType对象而是直接先在数据库中写好的话,也不会出现乱码。
错误(乱码)与产生这一错误的影响因素(Resource中的时间, 使用第一个ResourceTypeDao ) 。脑袋中目前是真想不出有什么联系,还请帮帮忙!
另外测试过如果ResourceDao如果不用iBatis而有JDBC实现,就不会有问题。
public static void main(String[] args) {
ApplicationContext context = new FileSystemXmlApplicationContext("D:/workspace/rhyton/src/spring-config/applicationContext*.xml");
ResourceTypeDao resourceTypeDao = (ResourceTypeDao) context.getBean("resourceTypeDao");
ResourceDao resourceDao = (ResourceDao) context.getBean("resourceDao");
ResourceType resType = new ResourceType();
resType = new ResourceType();
resType.setName("菜单");
resType.setResCode("1");
resourceTypeDao.save(resType);
Resource res = new Resource();
res.setLabel("label");
res.setName("name");
res.setResourceType(resType);
res.setModifiedTime(new Date());
res.setCreatedTime(new Date());
resourceDao.save(res);
Resource aResource = resourceDao.get(res.getId());
System.out.println(aResource);
res.setLabel("label-中文-9");
res.setName("name-中文-9");
res.setModifiedTime(new Date());
res.setCreatedTime(new Date());
resourceDao.save(res);
aResource = resourceDao.get(res.getId());
System.out.println(aResource);
}
日志如下:
log4j:WARN No appenders could be found for logger (com.rhyton.framework.component.orgAuth.dao.ResourceDaoTest).
log4j:WARN Please initialize the log4j system properly.
2008-05-14 11:04:42,766 DEBUG [java.sql.PreparedStatement] - {pstm-100001} Executing Statement: SELECT RH_COMMON_SEQ.nextval as id from dual
2008-05-14 11:04:42,766 DEBUG [java.sql.PreparedStatement] - {pstm-100001} Parameters: []
2008-05-14 11:04:42,766 DEBUG [java.sql.PreparedStatement] - {pstm-100001} Types: []
2008-05-14 11:04:42,938 DEBUG [java.sql.PreparedStatement] - {pstm-100003} Executing Statement: INSERT INTO RH_RES_TYPES ( RES_TYPE_ID, TYPE_NAME, RES_CODE) VALUES (?,?,?)
2008-05-14 11:04:42,938 DEBUG [java.sql.PreparedStatement] - {pstm-100003} Parameters: [622, 菜单, 1]
2008-05-14 11:04:42,938 DEBUG [java.sql.PreparedStatement] - {pstm-100003} Types: [java.lang.Long, java.lang.String, java.lang.String]
2008-05-14 11:04:42,969 DEBUG [java.sql.PreparedStatement] - {pstm-100005} Executing Statement: SELECT RH_COMMON_SEQ.nextval as id from dual
2008-05-14 11:04:42,969 DEBUG [java.sql.PreparedStatement] - {pstm-100005} Parameters: []
2008-05-14 11:04:42,969 DEBUG [java.sql.PreparedStatement] - {pstm-100005} Types: []
2008-05-14 11:04:42,984 DEBUG [java.sql.PreparedStatement] - {pstm-100007} Executing Statement: INSERT INTO RH_RES ( RES_ID, RES_NAME, RES_LABEL, CTIME, MTIME, RES_TYPE_ID) VALUES (?,?,?,?,?,?)
2008-05-14 11:04:42,984 DEBUG [java.sql.PreparedStatement] - {pstm-100007} Parameters: [623, name, label, 2008-05-14 11:04:42.969, 2008-05-14 11:04:42.969, 622]
2008-05-14 11:04:42,984 DEBUG [java.sql.PreparedStatement] - {pstm-100007} Types: [java.lang.Long, java.lang.String, java.lang.String, java.sql.Timestamp, java.sql.Timestamp, java.lang.Long]
2008-05-14 11:04:42,984 DEBUG [java.sql.PreparedStatement] - {pstm-100009} Executing Statement: SELECT RES_ID, RES_NAME, RES_LABEL, CTIME, MTIME, RES_TYPE_ID FROM RH_RES t where t.RES_ID = ?
2008-05-14 11:04:42,984 DEBUG [java.sql.PreparedStatement] - {pstm-100009} Parameters: [623]
2008-05-14 11:04:42,984 DEBUG [java.sql.PreparedStatement] - {pstm-100009} Types: [java.lang.Long]
com.rhyton.framework.component.orgAuth.domain.Resource@9644f6[
id=623
name=name
]com.rhyton.framework.component.orgAuth.domain.Resource@9644f6[
label=name
resourceType=com.rhyton.framework.component.orgAuth.domain.ResourceType@964518[
id=622
name=<null>
]
createdTime=Wed May 14 11:04:42 CST 2008
modifiedTime=Wed May 14 11:04:42 CST 2008
]
2008-05-14 11:04:43,031 DEBUG [java.sql.PreparedStatement] - {pstm-100012} Executing Statement: UPDATE RH_RES SET RES_NAME=?,RES_LABEL= ?,RES_TYPE_ID= ?,MTIME= ? where RES_ID= ?
2008-05-14 11:04:43,031 DEBUG [java.sql.PreparedStatement] - {pstm-100012} Parameters: [name-中文-9, label-中文-9, 622, 2008-05-14 11:04:43.031, 623]
2008-05-14 11:04:43,031 DEBUG [java.sql.PreparedStatement] - {pstm-100012} Types: [java.lang.String, java.lang.String, java.lang.Long, java.sql.Timestamp, java.lang.Long]
2008-05-14 11:04:43,031 DEBUG [java.sql.PreparedStatement] - {pstm-100014} Executing Statement: SELECT RES_ID, RES_NAME, RES_LABEL, CTIME, MTIME, RES_TYPE_ID FROM RH_RES t where t.RES_ID = ?
2008-05-14 11:04:43,031 DEBUG [java.sql.PreparedStatement] - {pstm-100014} Parameters: [623]
2008-05-14 11:04:43,031 DEBUG [java.sql.PreparedStatement] - {pstm-100014} Types: [java.lang.Long]
com.rhyton.framework.component.orgAuth.domain.Resource@969aac[
id=623
name=�纄-中文-9
]com.rhyton.framework.component.orgAuth.domain.Resource@969aac[
label=�纄-中文-9
resourceType=com.rhyton.framework.component.orgAuth.domain.ResourceType@969ac1[
id=622
name=<null>
]
createdTime=Wed May 14 11:04:42 CST 2008
modifiedTime=Wed May 14 11:04:43 CST 2008
]
2008-05-14 11:04:43,062 DEBUG [java.sql.PreparedStatement] - {pstm-100017} Executing Statement: delete from RH_RES_TYPES where RES_TYPE_ID= ?
2008-05-14 11:04:43,062 DEBUG [java.sql.PreparedStatement] - {pstm-100017} Parameters: [622]
2008-05-14 11:04:43,062 DEBUG [java.sql.PreparedStatement] - {pstm-100017} Types: [java.lang.Long]
2008-05-14 11:04:43,125 DEBUG [java.sql.PreparedStatement] - {pstm-100019} Executing Statement: delete from RH_RES_TYPES where RES_TYPE_ID= ?
2008-05-14 11:04:43,125 DEBUG [java.sql.PreparedStatement] - {pstm-100019} Parameters: [null]
2008-05-14 11:04:43,125 DEBUG [java.sql.PreparedStatement] - {pstm-100019} Types: [null]
分享到:
相关推荐
标题 "ibatis UPDATE 动态XML与insert" 涉及到的是MyBatis框架中对数据库数据进行更新(UPDATE)和插入(INSERT)操作的动态XML配置方式。MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,...
本文将详细讨论如何解决Ibatis中的乱码问题,特别是涉及到GBK和ISO_8859_1编码格式时的解决方案。 首先,我们需要了解乱码产生的原因。乱码通常是因为字符编码不一致导致的。在Java和数据库之间进行数据交互时,...
### ibatis应对批量update 在处理大量数据更新时,传统的for循环方式往往会导致效率低下。这是因为每一次循环都需要执行一次数据库连接操作,对于批量更新来说,这样的处理方式显然不够高效。为了解决这个问题,...
ibatis的insert方法的返回值。 介绍了mybaits如何处理返回值的问题。
关于从文档复制代码的问题,以及ibatis的概述、如何开始使用ibatis、构建SqlSessionFactory的方法(包括通过XML和不使用XML的方式)、获取SqlSession的过程、探索映射SQL语句的方法、命名空间的注意事项、作用域与...
通过Ibatis3xml文件配置+Mysql实现数据批量插入,原先在网上找很多,都是关于批量更新,批量插入的很少,而且其写法又完全不同,所以自己研究了一下。可供参考。另外插入时如出现内容报错,请参照my.cnf修改书库配置...
在Web开发中,Struts2是一个非常流行的动作框架,它与Spring和iBatis等技术结合,可以构建出高效且易于维护的Web应用。然而,开发过程中经常遇到的一个问题就是字符编码问题,尤其是中文乱码问题。本文将深入探讨一...
例如,`<select>`标签用于定义查询语句,`<insert>`、`<update>`和`<delete>`分别对应增删改操作。在SQL映射文件中,可以使用动态SQL来处理复杂的查询条件,如`<if>`、`<choose>`、`<when>`、`<otherwise>`等标签。 ...
在小组后台管理中,存在以下几个与iBatis相关的问题: 1. **小组分类管理** - **问题1**: 在删除二级分类时,未检查该分类下是否存在分组。这是一个逻辑漏洞,可能导致数据丢失或错误。在iBatis中,可以添加额外的...
3. **SqlSession**:SqlSession是Ibatis的核心组件,它提供了执行SQL的方法,如`selectOne`、`insert`、`update`和`delete`。每次数据库操作后,记得关闭SqlSession以释放资源。 4. **动态SQL**:Ibatis的动态SQL...
Ibatis的SqlSession对象在这里发挥作用,通过SqlSessionFactory创建SqlSession,然后调用SqlSession的selectOne、insert、update或delete方法执行SQL。 6. **Eclipse工程结构**:一个典型的Ibatis-Mysql项目结构...
通过这样的整合,我们可以构建出一个功能完备且易维护的Web应用,同时解决了中文乱码问题,提升了用户体验。对于初学者,这个项目提供了很好的学习和实践机会,对于有经验的开发者,也是进一步理解和优化框架集成的...
在`ibatis3_demo`这个示例项目中,可以查看相关的配置文件,如mybatis-config.xml、数据库连接配置、日志配置等,来检查并修正可能出现的编码问题。同时,通过调试和日志输出,可以进一步定位乱码的具体来源,从而...
《IBATIS_IN_ACTION》是一本深度探讨iBATIS框架应用与实践的专业书籍,由Clinton Begin、Brandon Goodin和Larry Meadors共同编写。本书详细介绍了iBATIS这一流行开源框架的核心概念、工作原理以及在实际项目中的应用...
Ibatis 是一个优秀的开源持久层框架,它允许开发者将 SQL 查询与 Java 代码分离,从而避免了传统的 JDBC 编程中的大量模板代码。作为一个轻量级的框架,Ibatis 提供了灵活的映射机制,使得 XML 或注解方式的 SQL ...
4. 映射文件与接口绑定:Ibatis 支持Mapper接口,通过`@Select`、`@Insert`、`@Update`、`@Delete`等注解,将SQL语句直接写在方法上,简化了编程模型。同时,通过Mapper工厂,可以根据接口生成具体的Mapper实例,...
Ibatis的配置文件通常命名为`mybatis-config.xml`,在这里我们可以设置数据源、事务管理器等相关参数。此外,每个数据表对应的业务逻辑通常会有一个独立的Mapper接口,这个接口的实现由Ibatis自动生成,我们只需要在...
通过使用XML或注解来配置和映射SQL,IBatis使得数据访问更加灵活且易于维护。 **二、安装与集成** 在.NET项目中引入IBatis通常通过NuGet包管理器完成。安装完成后,需要在项目中配置IBatis的主配置文件(如:ibatis...
iBatis,全称为MyBatis iBatis,是一个基于Java的持久层框架,它简化了数据库与应用程序之间的交互,避免了直接编写大量的SQL语句和手动处理结果集。在这个过程中,iBatis提供了一个SQL映射框架,允许开发者将SQL...
Spring与iBATIS的集成 iBATIS似乎已远离众说纷纭的OR框架之列,通常人们对非常流行的Hibernate情有独钟。但正如Spring A Developer's Notebook作者Bruce Tate 和Justin Gehtland所说的那样,与其他的OR框架相比...