我们在(4)中基础上,在添加增删改查的操作,代码和具体目录请看(4)Mybatis - 回顾实现查询所有功能
- 首先我们在UserDao中添加方法
- 映射文件中写一个对应的配置
- 但是我们insert时value 我们不能写问号,我们要取值 所以取值的类型,我们要告诉sql语句 我们有一个什么样的参数
- 我们添加属性 parameterType 的含义就是参数的类型,而目前我们的参数类型是User
- 按照Mybatis的要求去写value值,注意:value中要与实体类的属性来提供,实体类的名称一致
- 添加测试类
- 添加testSave()方法
- 但是要关闭资源,我们把这个变量定义到外面去
- 因为前面的代码都相同,我们再定义一个方法init ()用来创建
- 在定义一个方法, destory()释放资源,注意:在释放资源之前,我们必须要提交事务
- 在采用注解的方式,@Before,@After 在test之前创建资源和之后释放资源
import com.dao.UserDao;
import com.domain.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 org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.InputStream;
import java.util.List;
public class MybatisTest {
private InputStream in;
private SqlSession sqlSession;
private UserDao userDao;
@Before//用于在测试方法之前执行
public void init()throws Exception{
//1.读取配置文件,生成字节输入流
in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.获取SqlSessionFactory
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//3.获取SqlSession对象
sqlSession = factory.openSession();
//4.获取dao的代理对象
userDao = sqlSession.getMapper(UserDao.class);
}
@After//用于在测试方法之后执行
public void destory()throws Exception{
//5.提交事务
sqlSession.commit();
//6.释放资源
sqlSession.close();
in.close();
}
/**
* 测试查询所有
*/
@Test
public void testFindAll(){
//5.执行查询所有方法
List<User> users = userDao.findAll();
for(User user: users){
System.out.println(user);
}
}
/**
* 测试保存操作
*/
@Test
public void testSave()throws Exception{
User user = new User();
user.setUsername("test");
user.setAddress("成都市");
user.setSex("男");
user.setBirthday("2019");
//5.执行查询所有方法
userDao.saveUser(user);
}
}
测试结果:
如果写入数据库的内容是??
解决办法: