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