发表于: 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
评论