手记

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方法还有瑕疵,具体怎么改进请看接下来的更新。。。

1人推荐
随时随地看视频
慕课网APP

热门评论

uusu11


查看全部评论