您的位置:首页 > 其它

mybatis原始dao开发改进(dao接口和dao实现类)

2017-04-25 22:34 567 查看

思路

程序员需要写dao接口和dao实现类。

需要向dao实现类中注入SqlSessionFactory,在方法体内通过SqlSessionFactory创建SqlSession。

dao接口编写

import java.util.List;
/**
*
* <p>Title: UserDao</p>
* <p>Description: dao接口,用户管理</p>
*/
public interface UserDao {

//根据id查询用户信息
public User findUserById(int id) throws Exception;

//根据用户名列查询用户列表
public List<User> findUserByName(String name) throws Exception;

//添加用户信息
public void insertUser(User user) throws Exception;

//删除用户信息
public void deleteUser(int id) throws Exception;

}


dao实现类

import java.util.Date;
import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import cn.itcast.mybatis.po.User;

/**
*
* <p>
* Title: UserDaoImpl
* </p>
* <p>
* Description:dao接口实现类
*/
public class UserDaoImpl implements UserDao {

// 需要向dao实现类中注入SqlSessionFactory
// 这里通过构造方法注入
private SqlSessionFactory sqlSessionFactory;

public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
this.sqlSessionFactory = sqlSessionFactory;
}

@Override
public User findUserById(int id) throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();

User user = sqlSession.selectOne("test.findUserById", id);

// 释放资源
sqlSession.close();

return user;

}

@Override
public List<User> findUserByName(String name) throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();

List<User> list = sqlSession.selectList("test.findUserByName", name);

// 释放资源
sqlSession.close();

return list;
}

@Override
public void insertUser(User user) throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();

//执行插入操作
sqlSession.insert("test.insertUser", user);

// 提交事务
sqlSession.commit();

// 释放资源
sqlSession.close();

}

@Override
public void deleteUser(int id) throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();

//执行插入操作
sqlSession.delete("test.deleteUser", id);

// 提交事务
sqlSession.commit();

// 释放资源
sqlSession.close();

}

}


测试

import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;

import cn.itcast.mybatis.po.User;

public class UserDaoImplTest {

private SqlSessionFactory sqlSessionFactory;

// 此方法是在执行testFindUserById之前执行
@Before
public void setUp() throws Exception {
// 创建sqlSessionFactory

// mybatis配置文件
String resource = "SqlMapConfig.xml";
// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);

// 创建会话工厂,传入mybatis的配置文件信息
sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream);
}

@Test
public void testFindUserById() throws Exception {
// 创建UserDao的对象
UserDao userDao = new UserDaoImpl(sqlSessionFactory);

// 调用UserDao的方法
User user = userDao.findUserById(1);

System.out.println(user);

}

}


原始dao开发问题总结

1、dao接口实现类方法中存在大量模板方法,设想能否将这些代码提取出来,大大减轻程序员的工作量。

2、调用sqlsession方法时将配置文件中对应的statement的id硬编码了。

3、调用sqlsession方法时传入的变量,由于sqlsession方法使用泛型,即使变量类型传入错误,在编译阶段也不报错,不利于程序员开发。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mybatis