发表于: 2017-08-05 23:34:16

2 890


今天完成的事情:完成了 mybatis增删改查 

                             在昨天的基础上mapper标签里面添加sql相关语句 声明名称(必须唯一) 返回类型 

                                      然后配置cofiguration.xml    昨天已经在cofiguration.xml文件中注册了 就不需要了

                              就具体来说就是parameterType属性指明查询时使用的参数类型 resultType属性指明查询返回结果集的类型

                               resultType="User" 就是将查询结果封装成一个User类的对象返回  这个是User是缩略写的

                             然后写了四个测试方法 分别测试查询 插入 更新 删除 

                           代码如下 这个和昨天的是配套的连在一起的


<!-- 查询数据 -->
<select id="selectUser"  resultType="User">
   select * from user where id = #{id}
</select>
<!-- 增加数据 -->
<insert id="addUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
   insert into user(username,age) values(#{username},#{age})
</insert>
<!-- 修改数据 -->
<update id="updateUser" parameterType="User">
   update user set username=#{username},age=#{age} where id=#{id}
</update>
<!-- 删除数据 -->
<delete id="deleteUser" parameterType="int">
   delete from user where id = #{id}
</delete>

public class MybatisTest {

public static void main(String[] args) {
SqlSessionFactory sqlSessionFactory = null;
       SqlSession session = null;
       String resource = "configuration.xml";
       InputStream inputStream;
       try {
inputStream = Resources.getResourceAsStream(resource);
           sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
           session = sqlSessionFactory.openSession();
           System.out.println(session);
           User user = (User) session.selectOne("cn.bj.mybatis.models.UserMapper.selectUser", 1);
           System.out.println(user.getId());
           System.out.println(user.getUsername());
       } catch (IOException e) {
e.printStackTrace();
       } finally {
if (session != null) {
session.close();
           }
}
}


public class MybatisTestInsert {
public static void main(String[] args) {
SqlSessionFactory sqlSessionFactory = null;
       SqlSession session = null;
       String resource = "configuration.xml";
       InputStream inputStream;
       try {
inputStream = Resources.getResourceAsStream(resource);
           sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
           session = sqlSessionFactory.openSession();
           User user = new User();
           user.setAge(22);
           user.setUsername("hu");
           session.insert("cn.bj.mybatis.models.UserMapper.addUser", user);
           session.commit();
           System.out.println(user.getId());
          /* User user = (User)session.selectOne("cn.bj.mybatis.models.UserMapper.selectUser",1);
           user.setAge(50);
           user.setUsername("heoo1");
           session.update("cn.bj.mybatis.models.UserMapper.updateUser", user);
           session.commit();
         User user = (User) session.selectOne("cn.bj.mybatis.models.UserMapper.selectUser", 1);
           System.out.println(user.getId());
           System.out.println(user.getUsername());
           */
       } catch (IOException e) {
e.printStackTrace();
       } finally {
if (session != null) {
session.close();
           }
}
}
}
public class MybatisTestU {
public static void main(String[] args) {
SqlSessionFactory sqlSessionFactory = null;
       SqlSession session = null;
       String resource = "configuration.xml";
       InputStream inputStream;
       try {
inputStream = Resources.getResourceAsStream(resource);
           sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
           session = sqlSessionFactory.openSession();
           System.out.println(session);

           User user = (User) session.selectOne("cn.bj.mybatis.models.UserMapper.selectUser", 1);
           user.setAge(50);
           user.setUsername("heoo1");
           session.update("cn.bj.mybatis.models.UserMapper.updateUser", user);
           session.commit();

           System.out.println(user.getId());
           System.out.println(user.getUsername());
           System.out.println(user.getAge());
       } catch (IOException e) {
e.printStackTrace();
       } finally {
if (session != null) {
session.close();
           }
}
}
}
public class MybatisTestD {
public static void main(String[] args) {
SqlSessionFactory sqlSessionFactory = null;
       SqlSession session = null;
       String resource = "configuration.xml";
       InputStream inputStream;
       try {
inputStream = Resources.getResourceAsStream(resource);
           sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
           session = sqlSessionFactory.openSession();

           session.delete("cn.bj.mybatis.models.UserMapper.deleteUser", 3);
           session.commit();
       } catch (IOException e) {
e.printStackTrace();
       } finally {
if (session != null) {
session.close();

           }
}
}
}

运行成功 数据库看一下也成功

 了解了单元测试 看了最新的 Junit4框架 简单的理解就是不再用主函数来测试方法是否正确

目的是为了方便快捷 能一次运行多个测试 在只是被测方法实现改变不改变类名时 依旧进行测试

   @Test @After @Before @Ignore 的用法  Assert.....简单的写了一个

  先写了一个类 定义两个简单的方法

package com.jnshu.model;

public class Person {
public int add(int one, int another) {
// 为了简单起见,暂不考虑溢出等情况。
       return one + another;
   }

public int multiply(int one, int another) {
// 为了简单起见,暂不考虑溢出等情况。
       return one * another;
   }
}

  写了一个简单的Test 测试这两个方法    

import com.jnshu.model.Person;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

import static org.junit.Assert.assertEquals;


public class PersonTest {
Person person;
   @Before
           public void stup() {
person = new Person();
   }
@Test
   public void  testAdd(){

int add=person.add(1,2);

       assertEquals(3, add);
       }
public  void  multiply(){
int multiply=person.multiply(2,3);
       assertEquals( 6,multiply);
       }

  注意  测试类放在tset目录下 类名一般用XXXTest 测试方法一般用testXXX                    
明天计划的事情:看下Spring的基础知识 尝试配置 
遇到的问题:各种错误

                   编写测试类时没办法自动加载导入包  一直标红没法ALT+Enter

                  检查发现maven配置里面scope>test</scope>标签   表示dependency作用在测试时,不作用在运行时。

                 并且创建目录时test文件属性粗心选错了 选择的不是Test resource 绿色的那个 选成蓝的了

还有

运行发现是需要返回类型 加上了void 没有返回值



收获:使用ALT+Inset 快捷键 get set      Inset键在Del键左面的左边  

           <scope>provided</scope>      标签 不同属性的意义 

  • compile
    默认的scope,表示 dependency 都可以在生命周期中使用。而且,这些dependencies 会传递到依赖的项目中。适用于所有阶段,会随着项目一起发布
  • provided
    跟compile相似,但是表明了dependency 由JDK或者容器提供,例如Servlet AP和一些Java EE APIs。这个scope 只能作用在编译和测试时,同时没有传递性。
  • runtime
    表示dependency不作用在编译时,但会作用在运行和测试时,如JDBC驱动,适用运行和测试阶段。
  • test
    表示dependency作用在测试时,不作用在运行时。 只在测试时使用,用于编译和运行测试代码。不会随项目发布。
  • system
    跟provided 相似,但是在系统中要以外部JAR包的形式提供,maven不会在repository查找它


          mybatis   

String =”configuration.xml“     //声明mybatis的配置文件

inputStream = Resources.getResourceAsStream(resource)

使用类加载器加载配置文件 和关联的映射文件

sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

构建sqlSession的工厂    

 session = sqlSessionFactory.openSession();

创建能执行映射文件中sql的sqlSession

 session.delete("cn.bj.mybatis.models.UserMapper.deleteUser"3);
           session.commit();

 执行要执行的sql语句  位置 传入实际参数  连接 

finally {
if (session != null) {
session.close();

   }


记得这个seeion要在最后关闭

这里有个问题没想明白  因为是做完mybatis后看的 @Test

原来还是主函数测试 这里如何用@Test 测试 因为没有返回值 不知道该怎么Assert



返回列表 返回列表
评论

    分享到