Mybatis入门到精通-开发Dao方法

数据库 waitig 364℃ 百度已收录 0评论

4.开发Dao方法

我们已经对Mybatis进行了初步的入门,接下来就要开始开发Dao方法了:

4.1写UserDao接口

public interface UserDao {
    //根据id查询用户信息
    public User findUserById(int id);
    //根据用户名模糊查询
    public List<User> findUserByName(String name) ;
    //添加用户信息
    public void insertUser(User user);
    //删除用户信息
    public void deleteUser(int id);
    //更新用户信息
    public void updateUser(User user);
}

4.2写UserDaoImpl实现类

public class UserDaoImpl implements UserDao{
    private SqlSessionFactory sqlSessionFactory;
    //需要向dao实现类中注入SqlSessionFactory,由于没和Spring整合,这里通过构造函数注入
    public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }
    public User getUserById(int id) {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        User user = sqlSession.selectOne("user.getUserById", id);
        //释放资源
        sqlSession.close();
        return user;    }

    public List<User> findUserByName(String name)  {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        List<User> list = sqlSession.selectList("user.findByUsername", name);
        //释放资源
        sqlSession.close();
        return list;
    }

    public void insertUser(User user) {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        sqlSession.insert("test.addUser", user);
        sqlSession.commit();//执行插入要先commit
        sqlSession.close();
    }

    public void deleteUser(int id) {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        sqlSession.delete("user.updateUser", id);
        sqlSession.commit();//执行插入要先commit
        sqlSession.close();
    }

    public void updateUser(User user) {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        sqlSession.delete("user.updateUser", user);
        sqlSession.commit();//执行插入要先commit
        sqlSession.close();
    }
}

​ 从UserDaoImpl实现类中可以看出,首先SqlSessionFactory需要注入进来,这里通过构造函数来注入,传个SqlSessionFactory进来即可完成注入。另外,sqlSession都是在具体方法内部创建的,没有将sqlSession放到外面,因为在方法内部,相对于每个线程是独立的,不会引起线程安全问题。

4.3编写单元测试类

public class App
{
    public static void main( String[] args ) throws IOException {
        //1.读取配置文件
        InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
        //2.根据配置文件创建SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //创建UserDao的对象
        UserDao userDao = new UserDaoImpl(sqlSessionFactory);
        System.out.println(userDao.getUserById(1));
    }
}

4.4原始Dao开发存在的问题

  • dao接口实现类方法中存在大量的重复代码,从设计上来看,应该抽取;

  • 调用sqlSession方法时,将statement的id硬编码了,类似于user.getUserById这种都写死了;

  • sqlSession的方法中,要求传入的参数是Object类型的,也就是说我传错了参数,编译不会报错,执行的时候才会报错,不利于开发。



本文由【waitig】发表在等英博客
本文固定链接:Mybatis入门到精通-开发Dao方法
欢迎关注本站官方公众号,每日都有干货分享!
等英博客官方公众号
点赞 (0)分享 (0)