SSM 调试mybais
1.使用sql语句插入数据报错
虽然sql语句及domain(有的编译者喜欢放到po包里,这里指的是一个地方),类的字段编写都无误,不存在字段对应不上的情况仍然报错
- 处理办法:仔细检查了下我的代码,我的select * form tablename执行结果无误,但有关使用了对象作为参数的地方都执行时报错
- 报错内容:大致是no getter 对象对应的类
- 处理办法:dao层方法中对象前加@Param(“user”)
- 示例:
--修改前
int updateUserInfo(User user);
--修改后
int updateUserInfo(@Param("user") User user)
2.mybatis调试成功,控制台打印语句执行效果时成功,但数据库的信息却迟迟没有修改
- mybais为了优化其实执行不报错确实是语句执行了,但这时你去数据库查询时却没发现是因为它只是将你的数据保存在了内存中,暂时未向数据库中提交
- 检测方法:数据库字段设置为自增,多执行几次会发现你主动写语句时显示的ID不是连续的
例如你之前数据库id为3
调用代码执行了几次添加操作后,数据库数据未变化
这时你命令行插入了一条语句,id却不是4,而大于4 - 显示要求其直接提交的方法:测试代码中添加session.commit();
- 以下附上一个mybatis使用@Test的xml,文件名为user.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> <!-- 配置properties--> <properties resource="db.properties"></properties> <!--使用typeAliases配置别名,它只能配置domain中类的别名 --> <typeAliases> <package name="com.w.domain"></package> </typeAliases> <!--配置环境--> <environments default="mysql"> <!-- 配置mysql的环境--> <environment id="mysql"> <!-- 配置事务 --> <transactionManager type="JDBC"></transactionManager> <!--配置连接池--> <dataSource type="POOLED"> <property name="driver" value="${driver}"></property> <property name="url" value="${url}"></property> <property name="username" value="${username}"></property> <property name="password" value="${password}"></property> </dataSource> </environment> </environments> <!-- 配置映射文件的位置 --> <mappers> <package name="com.w.dao"></package> </mappers> </configuration>
- 测试类代码:
public void run4() throws IOException {
InputStream input = Resources.getResourceAsStream("user.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(input);
SqlSession session = sqlSessionFactory.openSession();
IUserDao iUserDao = (IUserDao) session.getMapper(IUserDao.class);
IUser iUser = new IUser();
iUser.setPassword("111");
iUser.setUsername("123");
int i = iUserDao.updateUser(iUser);
session.commit();
System.out.println("添加语句执行结果:"i);
}
最后:感谢博客的指导
砥砺前行,且行且珍惜,愿你前程似锦;共勉