zoukankan      html  css  js  c++  java
  • MyBatis单元测试

    一.项目总体结构

    二.用到jar包:

    mybatis-3.4.1.jar

    ojdbc14-10.2.0.3.0.jar

    JUnit4

    三.配置文件

    1.test.properties
    1 jdbc.utf-8.driver = oracle.jdbc.driver.OracleDriver
    2 jdbc.utf-8.jdbcUrl = jdbc:oracle:thin:@xx.0.0.xxx:1521:orcl
    3 jdbc.utf-8.username = txxx
    4 jdbc.utf-8.password = txxx
    2.mybatis.xml
     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE configuration
     3   PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
     4   "http://mybatis.org/dtd/mybatis-3-config.dtd">
     5 <configuration>
     6     <environments default="development">
     7         <!-- 可以配置多个环境指向不同数据库,每个数据库可分别用一个SqlSessionFactory创建实例 -->
     8         <environment id="development">
     9             <!-- 这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务范围
    10             <transactionManager type="JDBC" /> -->
    11             <!-- 这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。
    12              默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置为 false 来阻止它默认的关闭行为 -->
    13             <transactionManager type="MANAGED">
    14                 <property name="closeConnection" value="false" />
    15             </transactionManager>
    16             <dataSource type="POOLED">
    17                 <property name="driver" value="${jdbc.utf-8.driver}" />
    18                 <property name="url" value="${jdbc.utf-8.jdbcUrl}" />
    19                 <property name="username" value="${jdbc.utf-8.username}" />
    20                 <property name="password" value="${jdbc.utf-8.password}" />
    21             </dataSource>
    22         </environment>
    23     </environments>
    24     <mappers>
    25         <mapper resource="mappers/StuMapper.xml" />
    26     </mappers>
    27 </configuration>
    3.StuMapper.xml
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
      PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
      "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <!-- 如果自己写mapperDao的实现类,命名空间最好与实体对应 -->
    <!-- <mapper namespace="entity.StuScore"> -->
    <!-- 如果使用mybatis来自动生成mapper接口的实现类,命名空间应该与mapper接口对应 -->
    <mapper namespace="dao.StuScoreDao">
        <!-- 实体映射 -->
        <resultMap type="entity.StuScore" id="StuMap">
            <result property="name" column="NAME"/>
            <result property="subject" column="SUBJECT"/>
            <result property="score" column="SCORE"/>
            <result property="stuid" column="STUID"/>
        </resultMap>
        <!--根据学号查询学生 -->
        <select id="selectByStuid" resultMap="StuMap">
            SELECT * FROM stuscore WHERE STUID = #{stuid}
        </select>
        
        <!-- 增加数据 -->
        <insert id="add" parameterType="entity.StuScore">
            INSERT INTO stuscore(
                NAME,
                SUBJECT,
                SCORE,
                STUID
            )VALUES(
                #{name},
                <!-- 对于允许为空的列要加上jdbcType -->
                #{subject,jdbcType=VARCHAR},
                #{score,jdbcType=NUMERIC},
                #{stuid} 
            )
        </insert>
        
        <!-- 删除数据  -->
        <delete id="delete" parameterType="int">
            DELETE FROM stuscore
            WHERE STUID = #{stuid}
        </delete>
        
        <!-- 更新数据 -->
        <update id="update" parameterType="entity.StuScore">
            UPDATE stuscore
            <set>
                <if test="name != null">NAME = #{name},</if>
                <if test="subject != null">SUBJECT = #{subject},</if>
                <if test="score != null">SCORE = #{score}</if>
            </set>
            WHERE STUID = #{stuid}
        </update>
    </mapper>

    四.java代码部分

    1.实体类
     1 package entity;
     2 
     3 public class StuScore {
     4     //姓名
     5     private String name;
     6     //学科
     7     private String subject;
     8     //成绩
     9     private Integer Score;
    10     //学号
    11     private Integer stuid;
    12     public StuScore() {
    13         super();
    14     }
    15     public StuScore(String name, String subject, Integer score, Integer stuid) {
    16         super();
    17         this.name = name;
    18         this.subject = subject;
    19         Score = score;
    20         this.stuid = stuid;
    21     }
    22     public String getName() {
    23         return name;
    24     }
    25     public void setName(String name) {
    26         this.name = name;
    27     }
    28     public String getSbuject() {
    29         return subject;
    30     }
    31     public void setSbuject(String sbuject) {
    32         this.subject = sbuject;
    33     }
    34     public Integer getScore() {
    35         return Score;
    36     }
    37     public void setScore(Integer score) {
    38         Score = score;
    39     }
    40     public Integer getStuid() {
    41         return stuid;
    42     }
    43     public void setStuid(Integer stuid) {
    44         this.stuid = stuid;
    45     }
    46 }
    2.StuScoreDao
     1 package dao;
     2 
     3 import entity.StuScore;
     4 
     5 public interface StuScoreDao {
     6     /**
     7      * 根据学号查询学生
     8      * @param stuid
     9      * @return
    10      */
    11     public StuScore selectByStuid(Integer stuid);
    12     
    13     /**
    14      * 增加学生
    15      * @param stu
    16      */
    17     public void insertStu(StuScore stu);
    18     
    19     /**
    20      * 根据stuid删除学生
    21      * @param stu
    22      */
    23     public void deleteStu(Integer stuid);
    24     
    25     /**
    26      * 更新学生数据
    27      * @param stu
    28      */
    29     public void updateStu(StuScore stu);
    30 }
    3.不需要写StuScoreDao实现类的测试方法
     1 package test;
     2 
     3 import java.io.IOException;
     4 import java.io.InputStream;
     5 import java.util.Properties;
     6 
     7 import org.apache.ibatis.io.Resources;
     8 import org.apache.ibatis.session.SqlSession;
     9 import org.apache.ibatis.session.SqlSessionFactory;
    10 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    11 import org.junit.After;
    12 import org.junit.Before;
    13 import org.junit.Test;
    14 
    15 import dao.StuScoreDao;
    16 import entity.StuScore;
    17 
    18 public class TestMyBatisMapperDao {
    19     private StuScoreDao mapper;
    20     
    21     @Before
    22     public void setUp() throws Exception {
    23         InputStream fis = null;
    24         InputStream inputStream = null;
    25         try {
    26             //创建Properties对象
    27             Properties prop = new Properties();
    28             //创建输入流,指向配置文件,getResourceAsStream可以从classpath加载资源
    29             fis= Resources.getResourceAsStream("test.properties");
    30             //加载属性文件
    31             prop.load(fis);
    32             inputStream = Resources.getResourceAsStream("mybatis.xml");
    33             //build的第二个参数对应mybatis.xml配置文件的<environment id="development">标签的id,
    34             //其中后面两个参数可选,若第二个参数不写则默认为"development"
    35             SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream,"development",prop);
    36             SqlSession sqlSession = sqlSessionFactory.openSession();
    37             //StuScoreDao.class与配置文件StuMapper的namespace对应
    38             mapper = sqlSession.getMapper(StuScoreDao.class);
    39         } catch (IOException e) {
    40             // TODO Auto-generated catch block
    41             e.printStackTrace();
    42         }finally{
    43             if(fis != null){
    44                 try {
    45                     fis.close();
    46                 } catch (IOException e) {
    47                     // TODO Auto-generated catch block
    48                     e.printStackTrace();
    49                 }
    50             }
    51             if(inputStream != null){
    52                 try {
    53                     inputStream.close();
    54                 } catch (IOException e) {
    55                     // TODO Auto-generated catch block
    56                     e.printStackTrace();
    57                 }
    58             }
    59         }
    60     }
    61 
    62     @After
    63     public void tearDown() throws Exception {
    64     }
    65     
    66     @Test
    67     //根据学号查询学生
    68     public void test1() {
    69         StuScore stuScores = this.mapper.selectByStuid(2);
    70         System.out.println(stuScores.getName());
    71     }
    72     
    73     @Test
    74     //增加学生
    75     public void test2(){
    76         StuScore stuScore = new StuScore();
    77         stuScore.setName("测试");
    78         stuScore.setStuid(9);
    79         this.mapper.insertStu(stuScore);
    80     }
    81     
    82     @Test
    83     //删除
    84     public void test3(){
    85         this.mapper.deleteStu(9);
    86     }
    87     
    88     @Test
    89     //修改数据
    90     public void test4(){
    91         StuScore stu = new StuScore();
    92         stu.setName("测试1");
    93         stu.setStuid(9);
    94         this.mapper.updateStu(stu);
    95     }
    96 }
    4.实现类
     1 package dao.Impl;
     2 
     3 import java.io.IOException;
     4 import java.io.InputStream;
     5 import java.util.Properties;
     6 
     7 import org.apache.ibatis.io.Resources;
     8 import org.apache.ibatis.session.SqlSession;
     9 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    10 
    11 import dao.StuScoreDao;
    12 import entity.StuScore;
    13 
    14 public class StuScoreImpl implements StuScoreDao {
    15     private static SqlSession sqlSession;
    16     //如果有多个mapper文件,为防止混淆,可以使用NAMESPACE来取指定mapper文件中的sql,第一个方法selectByStuid()示例了用法
    17     private static final String NAMESPACE = StuScore.class.getName();//即 entity.StuScore
    18     static{
    19         InputStream fis = null;
    20         InputStream inputStream = null;
    21         try {
    22             //创建Properties对象
    23             Properties prop = new Properties();
    24             //创建输入流,指向配置文件,getResourceAsStream可以从classpath加载资源
    25             fis= Resources.getResourceAsStream("test.properties");
    26             //加载属性文件
    27             prop.load(fis);
    28             inputStream = Resources.getResourceAsStream("mybatis.xml");
    29             //build的第二个参数对应mybatis.xml配置文件的<environment id="development">标签的id,
    30             //其中后面两个参数可选,若第二个参数不写则默认为"development"
    31             sqlSession = new SqlSessionFactoryBuilder().build(inputStream,"development",prop).openSession();
    32         } catch (IOException e) {
    33             // TODO Auto-generated catch block
    34             e.printStackTrace();
    35         }finally{
    36             if(fis != null){
    37                 try {
    38                     fis.close();
    39                 } catch (IOException e) {
    40                     // TODO Auto-generated catch block
    41                     e.printStackTrace();
    42                 }
    43             }
    44             if(inputStream != null){
    45                 try {
    46                     inputStream.close();
    47                 } catch (IOException e) {
    48                     // TODO Auto-generated catch block
    49                     e.printStackTrace();
    50                 }
    51             }
    52         }
    53     }
    54     
    55     /**
    56      * 根据学号查询学生
    57      * @param stuid
    58      * @return
    59      */
    60     @Override
    61     public StuScore selectByStuid(Integer stuid) {
    62         // TODO Auto-generated method stub
    63         //示例使用NAMESAPCE的用法
    64         return sqlSession.selectOne(NAMESPACE+".selectByStuid",stuid);
    65     }
    66 
    67     /**
    68      * 增加学生
    69      * @param stu
    70      */
    71     @Override
    72     public void insertStu(StuScore stu) {
    73         // TODO Auto-generated method stub
    74         sqlSession.insert("add",stu);
    75     }
    76 
    77     /**
    78      * 根据stuid删除学生
    79      * @param stu
    80      */
    81     @Override
    82     public void deleteStu(Integer stuid) {
    83         // TODO Auto-generated method stub
    84         sqlSession.delete("delete",stuid);
    85     }
    86 
    87     /**
    88      * 更新学生数据
    89      * @param stu
    90      */
    91     @Override
    92     public void updateStu(StuScore stu) {
    93         // TODO Auto-generated method stub
    94         sqlSession.update("update", stu);
    95     }
    96 
    97 }
    5.自己写实现类的测试方法
     1 package test;
     2 
     3 import org.junit.After;
     4 import org.junit.Before;
     5 import org.junit.Test;
     6 
     7 import dao.StuScoreDao;
     8 import dao.Impl.StuScoreImpl;
     9 import entity.StuScore;
    10 
    11 public class TestMybatis {
    12     
    13     private StuScoreDao stuScoreDao;
    14     
    15     @Before
    16     public void setUp() throws Exception {
    17         this.stuScoreDao = new StuScoreImpl();
    18     }
    19 
    20     @After
    21     public void tearDown() throws Exception {
    22     }
    23 
    24     @Test
    25     //根据学号查询学生
    26     public void test1() {
    27         StuScore stuScores = this.stuScoreDao.selectByStuid(2);
    28         System.out.println(stuScores.getName());
    29     }
    30     
    31     @Test
    32     //增加学生
    33     public void test2(){
    34         StuScore stuScore = new StuScore();
    35         stuScore.setName("测试");
    36         stuScore.setStuid(9);
    37         this.stuScoreDao.insertStu(stuScore);
    38     }
    39     
    40     @Test
    41     //删除
    42     public void test3(){
    43         this.stuScoreDao.deleteStu(9);
    44     }
    45     
    46     @Test
    47     //修改数据
    48     public void test4(){
    49         StuScore stu = new StuScore();
    50         stu.setName("测试1");
    51         stu.setStuid(9);
    52         this.stuScoreDao.updateStu(stu);
    53     }
    54 }
  • 相关阅读:
    android中样式和自定义button样式
    android——实现多语言支持
    sizeof,数组,指针
    C++预处理相关
    内联函数
    牛客C++刷题
    leetcode刷题列表
    ends在linux和Windows下输出结果不同
    计算机负数为什么使用补码及浮点型计算
    个人技术博客:VUE:0基础入门
  • 原文地址:https://www.cnblogs.com/fenglanglang/p/6007653.html
Copyright © 2011-2022 走看看