发表于: 2020-05-02 19:44:01

2 1383


由于今天上午回了一趟家,所以学习时间有限,

今天完成的事情: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);

   }

结果如下


返回列表 返回列表
评论

    分享到