上一篇👉:MyBatis----Mybatis的参数、返回值深入
🚴大家好!我是近视的脚踏实地,后边这系列主要是记录自己MyBatis的学习笔记,这篇文章主要来学习mybatis传统的DAO层开发,这部分了解即可
唯有行动 才能解除你所有的不安
1、编写dao实现类的使用-查询列表
我们学习了使用代理dao的方式,那么接下来如果不使用代理dao,也就是自己写实现类,该如何进行开发
那么首先一个新的 maven工程,把之前的src下的源码都复制过来,以及pom文件的坐标,那么接着要先进行简单的改造,把QueryVo类删掉,因为不需要使用了,然后对应地把userdao接口中的关于QueryVo的方法删掉,然后映射配置里边,resultMap里边的内容我们并不需要,我们只需要实体类和数据库字段名一样就可以了,因为这里我们主要是为了学习自己写dao的方式,接着把对应的resultMap属性都改回成resultType。那么因为平时开发用的比较多的就是使用代理dao接口的方式,所以此篇的学习对于我们来说都是一个了解的知识点。
接着我们前边进行的实体类和我们的数据库列对不上的这些操作,我们重新把它对上,改回来,然后User实体类中的属性名称也都改回来,改成和数据库字段一样的名称,重新生成get和set方法。
那么准备工作做好后,就可以开始写一个dao的实现类
package monster.zf.dao.impl;
import monster.zf.dao.UserDao;
import monster.zf.domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import java.util.List;
/**
* @author Monster丶ZF
* @version 1.8
* @remakeTodo
* @Package monster.zf.dao.impl
* @date 2020/11/10 14:43
*/
public class UserDaoImpl implements UserDao {
private SqlSessionFactory factory;
private UserDaoImpl(SqlSessionFactory factory){
this.factory = factory;
}
/**
* 查询所有
* @return
*/
public List<User> findAll() {
//1.根据factory获取SqlSession对象
SqlSession session = factory.openSession();
//2.调用SqlSession中的方法,实现列表查询
//此处写的参数是能获取配置信息的key,也就是配置文件中的namespace属性的值加上方法名称
List<User> users = session.selectList("monster.zf.dao.UserDao.findAll");
//3.释放资源
session.close();
return users;
}
public void saveUser(User user) {
}
public void updateUser(User user) {
}
public void deleteUser(Integer userId) {
}
public User findById(Integer userid) {
return null;
}
public List<User> findByName(String username) {
return null;
}
public int findTotal() {
return 0;
}
}
接下来就去测试类中测试一下这个方法,那么测试类也要相应改造一下
package monster.zf;
import monster.zf.dao.UserDao;
import monster.zf.dao.impl.UserDaoImpl;
import monster.zf.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.Date;
import java.util.List;
/**
* @author Monster丶ZF
* @version 1.8
* @remakeTodo 测试类
* @Package monster.zf
* @date 2020/11/9 11:26
*/
public class MybatisTest {
private InputStream in;
private UserDao userDao;
@Before
public void init() throws Exception {
//1.读取配置文件
in = Resources.getResourceAsStream("sqlMapConfig.xml");
//2.创建sqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//3.使用工厂对象,创建dao对象
userDao = new UserDaoImpl(factory);
}
@After
public void destroy() throws Exception {
//6.释放资源
in.close();
}
/**
* 查询所有
*
* @throws Exception
*/
@Test
public void testFindAll() {
//5.使用代理对象执行方法
List<User> users = userDao.findAll();
for (User user : users) {
System.out.println(user);
}
}
}
接着运行这个查询所有的方法👇:
那么可以发现,查询所有这个功能依然可用,不过这个可用和之前代理dao就有点不一样了,原因是现在我们自己写着dao实现类,无形中会多很多代码,而这些代码其实mybatis都给我们实现了,所以从这点来说,其实从实际的开发来说,我们根本就不需要自己来写代码 ,而是直接创建一个代理dao对象接口了
2、编写dao实现类的使用-保存操作
那么同样的道理,在自己写的dao实现类中手动实现保存的操作
接着到测试类中进行测试
运行结果👇:
3、编写dao实现类的使用-修改删除等其他操作
接着来实现更新的操作,也是先把dao实现类中的代码写好,其实都是一样的,只需要把调用的方法改一下就可以👇:
接着到测试类中测试👇:
运行结果👇:
接着是删除也是一样,先在dao实现类把代码写好👇:
接着去测试👇:
运行结果👇:
接着是查询一个的操作,同样先在dao实现类中写好代码👇:
接着去测试类进行测试👇:
运行结果👇:
接着是模糊查询,同理先在dao实现类写好代码👇:
接着去测试类进行测试👇:
运行结果👇:
接着是查询总记录数,同理先在dao实现类写好代码👇:
接着去测试类进行测试👇:
运行结果👇:
下一篇👉MyBatis---- SqlMapConfig.xml配置文件
本篇博客到这就完啦,非常感谢您的阅读🙏,那么下一篇将会学习一些配置开发,如果对您有帮助,可以帮忙点个赞或者来波关注鼓励一下喔😬