Mybatis的原始dao开发方法

在进入主题之前先提一下sqlSession。sqlSession是一个面向用户(程序员)的接口。sqlSession中提供了很多操作数据库的方法,如: selectOne(返回单个对象)、selectList(返回单个或多个对象)。sqlSession是线程不安全的,在sqlSession实现了类中除了接口的方法(操作数据库的方法)还有数据域数据。所以,sqlSession最佳应用场合在方法体内,定义成局部变量使用 在原始的dao开发方法,程序员需要写接口和实现类(本实例中user.xml和user.java在前文中已经提到过故不赘述)。接口代码如下:
public interface UserDao {

    //根据id查询用户
    public void findUserById(int id);
    //根据id删除用户
    public void deleteUserById(int id);
    //更新用户
    public void updateUser(User user) throws ParseException;
}
而且根据以上的结论可以知道需要向dao实现类注入sqlSessionFactory,在方法体内通过sqlSessioFactory在方法体内创建sqlSession。实现类如下:
public class UserDaoimpl implements UserDao {

    private SqlSessionFactory sqlSessionFactory;
    
    public UserDaoimpl(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }

    //根据id查询用户
    @Override
    public void findUserById(int id) {
        SqlSession sqlSession=sqlSessionFactory.openSession();
        User user=sqlSession.selectOne("test.findUserById", id);
        System.out.println(user);
        
        sqlSession.close();
    }
    //根据id删除用户
    @Override
    public void deleteUserById(int id) {
        SqlSession sqlSession=sqlSessionFactory.openSession();
        sqlSession.delete("test.deleteUserById",1);
        sqlSession.commit();
        sqlSession.close();

    }
    //更新用户
    @Override
    public void updateUser(User user) throws ParseException {
        SqlSession sqlSession=sqlSessionFactory.openSession();
           sqlSession.insert("test.insertUser",user);
           sqlSession.commit();
           sqlSession.close();

    }

}
接下来就是测试代码了,注意测试代码中@before注解,这个注解的意思是在所有的test之前执行该注解里的内容,即执行测试之前生成sqlSessionFactory。
public class DaoTest {

    private SqlSessionFactory sqlSessionFactory;
    
    @Before
    public void setup() throws IOException{
        InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        
        }
    @Test
    public void findUserByIdTest(){
        UserDao userDao = new UserDaoImpl(sqlSessionFactory);
        
        User user = userDao.findUserById(1);
        
        System.out.println(user);
        
    }
    @Test
    public void insertUserTest(){
        UserDao userDao = new UserDaoImpl(sqlSessionFactory);
        
        userDao.insertUser(new User("大凯","1",new Date(),"河北"));
    }
    @Test
    public void deleteUserTest(){    
        UserDao userDao = new UserDaoImpl(sqlSessionFactory);
        
        userDao.deleteUser(30);
    }
    @Test
    public void updateUserTest(){    
        UserDao userDao = new UserDaoImpl(sqlSessionFactory);
        
        userDao.updateUser(new User(31,"毛蛋","1",new Date(),"江西"));;
    }
    
}
好了,大家可以看到在实现类里还是有很多重复代码,这显然不是我们想看到的,所以这种原始dao方法还有瑕疵,具体怎么改进请看接下来的更新。。。

相关内容推荐