发表于: 2018-03-20 21:11:51
1 485
今日完成
·junit单元测试
·整合spring和mybatis(未完待续)
1.junit单元测试
1.1什么是junit单元测试
就是测试自己的代码是否能正确执行,并且运行的结果是否是自己的预期。单元是最小的元素,代码最零碎的元素都要测试到,也是类似于考试后的检查。比如你写了一个简单的运算方法,使用单元测试就能测试出它运算结果是不是正确的,是不是你想要的结果,从而可以拨乱改正,保证运行。
使用junit的好处:
通过写测试方法可以一目了然的看出是否出错。系统自动运行,可以单独测试某一个模块,找出具体原因,只需要看最后结果就能知道是否通畅,对方向有偏差的也能及时调整过来。
1.2.junit环境配置
·安装插件:File-->settings-->Plguins-->Browse repositories-->输入JUnit-->选择JUnit 安装,jar包也要在pom里配置好。
如果没有JUnitGenerator V2.0就直接搜索“JUnitGenerator”,然后找到安装点右边Install安装。
JUnitGenerator是自动生成测试代码,如果没有的话也可以自己写。
1.3.测试方法:
在需要测试的类里面空白处右键,选择goto——test,快捷键shift + ctrl + t
然后在弹出的选择框里面创建Test类
然后在下面选择要测试的方法,上面选择测试的父类,一定要选择,不然没办法执行测试
ok生成测试类
package pojo;
import junit.framework.TestCase;
import org.junit.Test;
import static org.junit.Assert.*;
public class UserTest extends TestCase {
@Test
public void testGetId() throws Exception {
System.out.print("测试testGetId()\n");
}
@Test
public void testSetId() throws Exception {
System.out.print("测试testSetId()\n");
}
@Test
public void testGetCreate_at() throws Exception {
System.out.print("测试第三个\n");
}
}
在里面写你要测试的方法,生成的测试方法记得要在前面+test首字母大写:
@Test
public void setId() throws Exception { System.out.print("测试testSetId()\n");}
@Test
public void testSetId() throws Exception { System.out.print("测试testSetId()\n");}
然后右键运行测试方法。
注意光标的位置,idea对这个有判断的,光标在什么地方,鼠标在什么地方右键,它会判断该地方可以用什么样的方法:
测试:
2.spring整合mybatis
网上看了很多,但大都不怎么统一,经常缺斤少两,今天也是看的比较茫然,先整理出具体思路,尝试整合:
·spring整合mybatis有好几种方法,不过都需要通过mybatis的spring-mybatis.jar包,然后配置数据源
·先使用mybatis.SqlSession的实现类mybatis.spring.SqlSessionTemplate
·整合的话之前写的Mapper指向的就不是之前User实体类了,而是根据具体的方法指向,然后由mybatis给出实例化查询
·根据整合的方式不同,需要配置的resource文件调用的方法也不相同。
目录:
配置springxml文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations" value="Mapper"/>
<property name="typeAliasesPackage" value="com.java.dao"/>
<!--指定实体类映射文件,可以指定同时指定某一包以及子包下面的所有配置文件,mapperLocations和configLocation 有一个即可,
当需要为实体类指定别名时,可指定configLocation属性,再在mybatis总配置文件中采用mapper引入实体类映射文件 -->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
<bean id="slqSession" class="org.mybatis.spring.SqlSessionTemplate ">
<!--指向上面的bean-->
<constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>
<bean id="suserimpl" class="com.java.daoimpl.SuserImpl">
<property name="sqlSessionTemlpate" ref="slqSession"/>
</bean>
<!--这里使用spring的驱动,不使用"com.mysql.jdbc.Driver,这是在下面用-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/jnshu" />
<property name="username" value="root" />
<property name="password" value="root" />
</bean>
</beans>
)先配置Mybatis的工厂bean,获取Mybatis的配置文件:
<property name="dataSource" ref="dataSource"/> 配置数据源 ref指向最下面的bean(id=dataSource)
<property name="configLocation" value="classpath:mybatis-config.xml"/>mybatis配置文件路径,配置这两数据源个必不可少。
<property name="mapperLocations" value="Mapper"/>规定mapperLocations的classpath,我这里其实不配也可以通过,会在资源目录下自动扫描(mybatis里也配置了,看下面)
<property name="typeAliasesPackage" value="com.java.dao"/>这个设置直接读取包,这样在mapper文件里可以直接写对应的类名字,不用写全部路径
<constructor-arg index="0" ref="sqlSessionFactory"/>使用构造函数注入 index是多个构造函数的情况下的顺序,从0开始。
mybytis配置文件(未动,相同的配置覆盖):
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--定义外部资源!这里定义的要在下面的数据源(dataSource type="POOLED")中使用到!位置为资源根目录resources,区分大小写!-->
<properties resource="mysql.properties" />
<typeAliases>
<!--给名字不好用的com.java.pojo.User类定义个别名User,这样可以在任何地方用User调用,注意是任何地方!-->
<!--一定要对应user Mapper里的resoultType,不然会报:java.lang.ClassNotFoundException: Cannot find class: User(找不到User类)-->
<typeAlias alias="User" type="com.java.pojo.User"></typeAlias>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="Mapper/User.xml"/>
</mappers>
</configuration>
mapper(user.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">
<!--<mapper namespace="com.java.pojo.User">-->
<mapper namespace="com.java.dao.Suser">
<!--<resultMap type="model.user" id="allUserList">-->
<!--<result column="id" property="id"/>-->
<!--<result column="create_at" property="create_at"/>-->
<!--<result column="updatae_at" property="updatae_at"/>-->
<!--<result column="name" property="name"/>-->
<!--<result column="age" property="age"/>-->
<!--<result column="six" property="six"/>-->
<!--<result column="pro" property="pro"/>-->
<!--<result column="brother" property="brother"/>-->
<!--</resultMap>-->
<select id="selectById" parameterType="int" resultType="User">
SELECT * FROM jnshu_user WHERE id = #{id}
</select>
<insert id="insertUser" parameterType="User" useGeneratedKeys="true" >
INSERT INTO jnshu_user(create_at,updatae_at,name,age,six,pro,brother) values (#{create_at},#{updatae_at},#{name},#{age},#{six},#{pro},#{brother})
</insert>
<update id="updateUser" parameterType="User" >
Update jnshu_ser SET name=#{name},age=#{age},six=#{six},pro=#{pro},brother=#{brother} WHEN name=#{name} AND id=#{id}
</update>
<delete id="delectUser" parameterType="int" >
DELECT FROM jnshu_user WHERE id=#{id}
</delete>
<!--<select id="findAllUSer" parameterType="model.user" resultMap="allUserList ">-->
<!--SELECT * FROM jnshu_user-->
<!--</select>-->
</mapper>
这里只用了selectById,下面写出来还未测试
Suser接口:
package com.java.dao;
import com.java.pojo.User;import java.util.List;
public interface Suser {
public User selectById(User user);
void updateUser(User user);
void delectUSer(int id);
void insert(User user);
List<User> findAllUser();
}
SuserImpl接口实例:
修改selectById(参数) id改为user类,通过里面的属性传参。
package com.java.daoimpl;
import com.java.dao.Suser;
import com.java.pojo.User;
import org.apache.ibatis.session.SqlSession;
import org.mybatis.spring.SqlSessionTemplate;
import java.util.List;
public class SuserImpl implements Suser{
private SqlSessionTemplate sqlSessionTemlpate;
public User selectById(User user) {
return (User)sqlSessionTemlpate.selectOne("com.java.pojo.User.getUser",user);
}
public void updateUser(User user) {
}
public void delectUSer(int id) {
}
public void insert(User user) {
}
public List<User> findAllUser() {
return null;
}
public void setSqlSessionTemlpate(SqlSessionTemplate sqlSessionTemlpate) {
this.sqlSessionTemlpate = sqlSessionTemlpate;
}
public SqlSessionTemplate getSqlSessionTemlpate() {
return sqlSessionTemlpate;
}
}
测试类:
package mybatistest;
import com.java.dao.Suser;
import com.java.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.Reader;
public class Test {
public static void main(String[] args)throws IOException{
Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sqlSessionFactory.openSession();
// User user = session.selectOne("selectById",1);
// session.commit();
// System.out.print(user.getName());
// Suser.class获取SuserClass对象
// class的classforName(String name)也可以获取,但是需要强制转换,因为使用的是字符串,而且必须获取ClassNotFoundException异常
// 也可以通过类里面的getClass()获取
Suser su = session.getMapper(Suser.class);
User u = new User();
u.setId(1);
User user = su.selectById(u);
System.out.print("查出的名字为:" + user.getName() + ",年龄:" + user.getAge() + ";");
session.close();
}
}
用junit测试了下(尝试测试,不知道对不对):
package mybatistest;
import junit.framework.TestCase;
public class TestTest extends TestCase
public void testMain() throws Exception
System.out.print("查出");
}
}
然后运行了测试类,改了下输出方便查看,竟然一次就运行通过了。日志输出先不管…
明天计划完成的事情:
1.再强化整合一下框架,还没写完。感觉看的又多又乱,分不清,一下也看不完,吸收不了。
2.注解的方法
3.hibernate,记得刚开始接触java的时候学的就是hibernate框架,struts没看,但是现在全都忘掉了。
问题与收获:
1.有时候感觉抓不到重点。而且学习方法要有效率,不能盲目寻找,要有目的的去查。不能心急焦虑,有错才有进步,基础扎实了后面才会走的顺;
2.会了junit的简单测试
·之前没有接触过这个概念,还有具体调试方法也不知道,所以被整了一天,还有很多地方没弄明白需要看。
·@注释 各种注释的意思 @Test如何测试的 是可以直接在代码Class里直接@、还是说需要创建出Test类在里面@Test等等。可莫名其妙的是自动生成的测试代码都是报红的:@Test,然后删除了又新建也不行,重复删除创建…又好了。
·@基于注解方式还没了解
3.Spring整合Mybatis的方法,只用了一种,基础还没理解透彻。但是明白了大致方向(主要是各种配置的映射关系,函数是写在实体类里还是别的地方,SQL映射文件,mapper文件在哪里调用等待)。
评论