发表于: 2020-05-02 19:44:01
2 1385
由于今天上午回了一趟家,所以学习时间有限,
今天完成的事情:Mybaits的CURD
接口类的编写内容
ublic interface IUserDao {
/**
* 查询所有操作
*/
List<User> findAll();
/**
* 保存用户
*/
void saveUser(User user);
}
接口类映射文件的内容
<!--配置查询所有-->
<select id="findAll" resultType="com.itxzy.domain.User">
select * from jojo
</select>
<!--保存用户-->
<insert id="saveUser" parameterType="com.itxzy.domain.User">
insert into jojo (ID,name,QQ) values (#{ID},#{name},#{QQ});
</insert>
</mapper>
通过注解的方式写了Mybatis测试类
public class MybatisTest {
private InputStream in;
private SqlSession sqlSession;
private IUserDao userDao;
@Before//用于在测试方法执行之前执行
public void init()throws Exception{
//1.读取配置文件,生成字节输入流
in = Resources.class.getResourceAsStream("/SqlMapConfig.xml");
//2.获取SqlSessionFactory
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//3.获取SqlSession对象
sqlSession = factory.openSession();
//4.获取dao的代理对象
userDao = sqlSession.getMapper(IUserDao.class);
}
@After
public void destory()throws Exception{
//提交事务
sqlSession.commit();
//6.释放资源
sqlSession.close();
in.close();
}
/**
* 测试查询所有
* @throws Exception
*/
@Test
public void testFindAll() {
//5.使用代理对象执行方法
List<User> users = userDao.findAll();
for (User user : users) {
System.out.println(user);
}
}
/**
* 测试保存操作
*/
@Test
public void testSave(){
User user = new User();
user.setID(5);
user.setName("起早");
user.setQQ(4321);
//5.使用保存方法
userDao.saveUser(user);
}
}
写完代码之后尝试运行,报了两个错误
1.Could not find parameter map com.admin.mapper.postMapper.map
第一个好解决就没有截图 在配置文件文件中将属性parameterMap=“xxx”,改为成parameterType="xxx" 就解决了
2.Invalid bound statement (not found)
第二个就没那么容易
这个报错原因主要是由于接口类 与 接口类映射文件 设置的属性没有对应
①.使用的是Maven构建的项目,那么因为maven默认只是加载src/main/resources目录下的配置文件,并不会主动加载src/main/java下的配置文件。
如果你的Mybatis映射xml文件是与接口文件放在同一目录下的话就必须在pom上添加配置:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
目的是在正确的文件路径下读取到映射文件(我配置的映射文件在src/main/resources目录下,所以排除这个原因)
②.映射文件与接口名称一致,映射文件中namespace必须等于接口的完整类名(这个对照过后也没有问题)
③.xml映射文件中id值与接口方法名称不一致
我正是由于xml映射文件中saveUser 打成了saverUser,而造成的报错,虽然这次解决报错的速度比昨天快了很多,但是在敲代码的还是要细心!!
最后铺上运行成功的代码,美滋滋~
而更新与删除与增加 几乎一样,唯一要注意的是使用方法时代码一定要一一对应,删除时可以直接定位ID删除,只有参数时可以写一个占位符,比如以下只有Integer一个参数,那么userid 可以为任意值
* 根据ID删除
*/
void deleteUser(Integer userId);
@Test
public void testDelete(){
//5.使用方法
userDao.deleteUser(14);
}
查询操作
根据ID查询
@Test
public void testFindOne(){
//5.查询一个方法
User user = userDao.findById(12);
System.out.println(user);
}
模糊查询
配置文件如下,由于#{} 中不能用% 所以在实验类中要加%
<!--根据名称模糊查询-->
<select id="findByName" parameterType="string" resultType="com.itxzy.domain.User">
select *from jojo where name like #{name}
</select>
@Test
public void testFindByName(){
//5.查询一个方法
List<User> users = userDao.findByName("%乔%");
for(User user : users){
System.out.println(users);}
结果如下
评论