文章目录
一、持久层 Dao 实现类
session 写在 UserDaoImpl 而不是放在 MybatisCRUDTest 中是因为 session 在这里需要调用,为了调用完封装,所以就都放在这里了,没写在外面,写在了方法里,也是为了调用完然后关闭。
public class UserDaoImpl implements UserDao {
private SqlSessionFactory factory;
public UserDaoImpl(SqlSessionFactory factory){
this.factory=factory;
}
@Override
public List<User> findAll() {
//1.根据factory获取SQLSession对象
SqlSession sqlSession = factory.openSession();
//2.调用SQLSession中的方法,实现查询列表,省略了 getMapper 的创建代理的步骤过程,直接调用需要的方法
List<User> users = sqlSession.selectList("mybatis.dao.UserDao.findAll");
//3.释放资源
sqlSession.close();
return users;
}
@Override
public void saveUser(User user) {
//1.根据factory获取SqlSession对象
SqlSession session = factory.openSession();
//2.调用方法实现保存
session.insert("mybatis.dao.UserDao.saveUser",user);
//3.提交事务
session.commit();
//4.释放资源
session.close();
}
@Override
public void updateUser(User user) {
//1.根据factory获取SqlSession对象
SqlSession session = factory.openSession();
//2.调用方法实现更新
session.update("mybatis.dao.UserDao.updateUser",user);
//3.提交事务
session.commit();
//4.释放资源
session.close();
}
@Override
public void deleteUser(int userId) {
//1.根据factory获取SqlSession对象
SqlSession session = factory.openSession();
//2.调用方法实现更新
session.update("mybatis.dao.UserDao.deleteUser",userId);
//3.提交事务
session.commit();
//4.释放资源
session.close();
}
@Override
public User findById(int userId) {
//1.根据factory获取SqlSession对象
SqlSession session = factory.openSession();
//2.调用SqlSession中的方法,实现查询一个
User user = session.selectOne("mybatis.dao.UserDao.findById",userId);
//3.释放资源
session.close();
return user;
}
@Override
public List<User> findByName(String username) {
//1.根据factory获取SqlSession对象
SqlSession session = factory.openSession();
//2.调用SqlSession中的方法,实现查询列表
List<User> users = session.selectList("mybatis.dao.UserDao.findByName",username);
//3.释放资源
session.close();
return users;
}
@Override
public int findTotal() {
//1.根据factory获取SqlSession对象
SqlSession session = factory.openSession();
//2.调用SqlSession中的方法,实现查询一个
Integer count = session.selectOne("mybatis.dao.UserDao.findTotal");
//3.释放资源
session.close();
return count;
}
}
二、测试
public class MybatisCRUDTest {
private InputStream in;
private SqlSessionFactory factory;
private UserDao userDao;
@Before//测试方法执行之前执行
public void init() throws IOException {
//1.读取配置文件
in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建 SqlSessionFactory 工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
factory = builder.build(in);
//3.创建 Dao 接口的实现类
userDao = new UserDaoImpl(factory);
}
@After//测试方法执行之后执行
public void destroy() throws IOException {
//释放资源
in.close();
}
@Test
public void testFindALL() {
List<User> users = userDao.findAll();
for (User user : users) {
System.out.println(user);
}
}
@Test
public void testFindOne() {
User user = userDao.findById(56);
System.out.println(user);
}
@Test
public void testSaveUser() throws Exception {
User user = new User();
user.setUsername("mybatis dao user");
//6.执行操作
userDao.saveUser(user);
}
@Test
public void testUpdateUser() throws Exception {
//1.根据 id 查询
User user = userDao.findById(41);
//2.更新操作
user.setAddress("北京市天安门");
userDao.updateUser(user);
}
@Test
public void testDeleteUser() throws Exception {
userDao.deleteUser(56);
}
@Test
public void testFindTotal() throws Exception {
int res = userDao.findTotal();
System.out.println(res);
}
}