发表于: 2017-08-07 15:51:49

2 1035


今天完成的事情:使用junit完成mybatis增删改查的单元测试 改用注解实现sql语句 

                                 新建了工具类  进行了测试

在前天的基础上新建了MybatisXMLTest

public class MybatisXMLTest {
SqlSessionFactory sqlSessionFactory = null;
       SqlSession sqlSession = null;

       @Before
       public void stup() {

String resource = "configuration.xml";
               InputStream inputStream;
               try {
inputStream = Resources.getResourceAsStream(resource);
                       sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

               } catch (IOException e) {
e.printStackTrace();
               }
}

@Test
       public void testAdd() {
//SqlSession sqlSession = MyBatisUtil.getSqlSession(false);
               //  SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
               sqlSession = sqlSessionFactory.openSession();

             /*
               * 映射sql的标识字符串,
                * me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,
          * addUser是insert标签的id属性值,通过insert标签的id属性值就可以找到要执行的SQL
             */
               String statement = "cn.bj.mybatis.models.UserMapper.addUser";//映射sql的标识字符串
               User user = new User();
               user.setUsername("用户孤苍狼");
               user.setAge(27);

               //执行插入操作
               int retResult = sqlSession.insert(statement,user);
               //手动提交事务
              sqlSession.commit();
               //使用SqlSession执行完SQL之后需要关闭SqlSession
               sqlSession.close();
               System.out.println(retResult);

 

 @Test
public void testUpdate(){
sqlSession = sqlSessionFactory.openSession();

             // 映射sql的标识字符串,
           // me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,
           // updateUser是update标签的id属性值,通过update标签的id属性值就可以找到要执行的SQL

           String statement = "cn.bj.mybatis.models.UserMapper.updateUser";//映射sql的标识字符串
           User user = new User();

        user = (User) sqlSession.selectOne("cn.bj.mybatis.models.UserMapper.selectUser", 1);
        System.out.println(user);
         user.setUsername("用户孤傲苍狼");
            user.setAge(21);
           //执行修改操作
    System.out.println(user);
           int retResult = sqlSession.update(statement,user);
            //使用SqlSession执行完SQL之后需要关闭SqlSession
    sqlSession.commit();
            sqlSession.close();
           System.out.println(retResult);
        }


@Test
public void testDelete(){
sqlSession =sqlSessionFactory.openSession();

           //  映射sql的标识字符串,
           //me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,
            //deleteUser是delete标签的id属性值,通过delete标签的id属性值就可以找到要执行的SQL

           String statement = "cn.bj.mybatis.models.UserMapper.deleteUser";//映射sql的标识字符串
          //执行删除操作
           int retResult = sqlSession.delete(statement,14);
           sqlSession.commit();
          //使用SqlSession执行完SQL之后需要关闭SqlSession

           sqlSession.close();
          System.out.println(retResult);
      }

@Test
public void testGetAll(){
sqlSession =sqlSessionFactory.openSession();
            //映射sql的标识字符串,
             // me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,
            //getAllUsers是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL

            String statement = "cn.bj.mybatis.models.UserMapper.selectAllUser";//映射sql的标识字符串
           //执行查询操作,将查询结果自动封装成List<User>返回
          List<User> lstUsers = sqlSession.selectList(statement);
         sqlSession.commit();
          //使用SqlSession执行完SQL之后需要关闭SqlSession
           sqlSession.close();
            System.out.println(lstUsers);
     }
@Test
public void testSelectOne(){
sqlSession =sqlSessionFactory.openSession();
   //映射sql的标识字符串,
   // me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,
   //getAllUsers是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL

   String statement = "cn.bj.mybatis.models.UserMapper.selectUser";//映射sql的标识字符串
   User user=new User();
   user = (User) sqlSession.selectOne("cn.bj.mybatis.models.UserMapper.selectUser", 2);

   sqlSession.commit();
   //使用SqlSession执行完SQL之后需要关闭SqlSession
   sqlSession.close();
   System.out.println(user);
}

}




改用注解

public interface UserMapperI {

//使用@Insert注解指明add方法要执行的SQL
   @Insert("insert into user(username, age) values(#{username}, #{age})")
public int add(User user);

   //使用@Delete注解指明deleteById方法要执行的SQL
   @Delete("delete from user where id=#{id}")
public int deleteById(int id);

   //使用@Update注解指明update方法要执行的SQL
   @Update("update user set username=#{username},age=#{age} where id=#{id}")
public int update(User user);

   //使用@Select注解指明getById方法要执行的SQL
   @Select("select * from user where id=#{id}")
public User getById(int id);

   //使用@Select注解指明getAll方法要执行的SQL
   @Select("select * from user")
public List<User> getAll();

}

工具类haha

public class haha {
/**
       * 获取SqlSessionFactory
        * @return SqlSessionFactory
         */
   public static SqlSessionFactory getSqlSessionFactory() {
String resource = "configuration.xml";
               InputStream is = haha.class.getClassLoader().getResourceAsStream(resource);
             SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
             return factory;
           }

/**
      * 获取SqlSession
      * @return SqlSession
    */
          public static SqlSession getSqlSession() {
return getSqlSessionFactory().openSession();
         }

/**
     * 获取SqlSession
      * @param isAutoCommit
      *         true 表示创建的SqlSession对象在执行完SQL之后会自动提交事务
    *         false 表示创建的SqlSession对象在执行完SQL之后不会自动提交事务,这时就需要我们手动调用sqlSession.commit()提交事务
      * @return SqlSession
     */
            public static SqlSession getSqlSession(boolean isAutoCommit) {
return getSqlSessionFactory().openSession(isAutoCommit);
           }
}

单元测试

public class MybatisMapperTest {
@Test
  public void testAdd(){
SqlSession sqlSession = haha.getSqlSession(true);
              //得到UserMapperI接口的实现类对象,UserMapperI接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来
               UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);
              User user = new User();
              user.setUsername("用户xdp");
               user.setAge(20);
                int add = mapper.add(user);
               //使用SqlSession执行完SQL之后需要关闭SqlSession

                sqlSession.close();
                System.out.println(add);
          }

@Test
    public void testUpdate(){
SqlSession sqlSession = haha.getSqlSession(true);
              //得到UserMapperI接口的实现类对象,UserMapperI接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来
              UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);
              User user = new User();
             user.setId(3);
               user.setUsername("孤傲苍狼_xdp");
              user.setAge(26);
              //执行修改操作
              int retResult = mapper.update(user);

              //使用SqlSession执行完SQL之后需要关闭SqlSession

              sqlSession.close();
               System.out.println(retResult);
           }

@Test
   public void testDelete(){
SqlSession sqlSession = haha.getSqlSession(true);
               //得到UserMapperI接口的实现类对象,UserMapperI接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来
               UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);
               //执行删除操作
               int retResult = mapper.deleteById(7);

              //使用SqlSession执行完SQL之后需要关闭SqlSession
               sqlSession.close();
               System.out.println(retResult);
           }

@Test
   public void testGetUser(){
SqlSession sqlSession = haha.getSqlSession();
               //得到UserMapperI接口的实现类对象,UserMapperI接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来
               UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);
              //执行查询操作,将查询结果自动封装成User返回
              User user = mapper.getById(8);

             //使用SqlSession执行完SQL之后需要关闭SqlSession
               sqlSession.close();
               System.out.println(user);
           }

@Test
   public void testGetAll(){
SqlSession sqlSession = haha.getSqlSession();
               //得到UserMapperI接口的实现类对象,UserMapperI接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来
              UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);
               //执行查询操作,将查询结果自动封装成List<User>返回
               List<User> lstUsers = mapper.getAll();

             //使用SqlSession执行完SQL之后需要关闭SqlSession
                sqlSession.close();
                System.out.println(lstUsers);
            }
}


明天计划的事情:继续看spring 


遇到的问题:写@Before 时把相关变量放在了 stup()里面 没有考虑到生命周期问题 标红

                    没用工具类的时候 测试成功 但是数据库没变化 看了很久才发现忘记了 commit

                      新建 Java文件 出现missing package statement  缺少包名

   这里 是使用注解来操作sql 但是con.xml 不知道到底该怎么配 像上面这样不知道对不对 但是测试成功了


收获:对junit有了更深的了解 对注解 工具类有了了解

                全选然后   Shift +Ctrl+/  全局注释  其他使用//注释

               ALT+INSERT toString 来重构

               System.out.println(); 快捷键 sout 然后ENTER

                  Dbug模式 先设置一个断点 然后进入 到达断点停止 在设置下一个断点 F8单步        

进度 :8.1开始任务一

             预计8.15完成


返回列表 返回列表
评论

    分享到