利用原始dao的开发方式来开发一个dao。
首先需要定义一个dao接口
public interface UserDao {
/**
* @author:kevin
* @Description: 根据id查询用户信息
* @Date:20:33 2018/3/28
*/
public User findUserById(int id);
/**
* @author:kevin
* @Description: 插入用户信息
* @Date:20:33 2018/3/28
*/
public void insertUser(User user);
/**
* @author:kevin
* @Description: 根据id删除用户信息
* @Date:20:33 2018/3/28
*/
public void dalateUser(int id);
/**
* @author:kevin
* @Description: 修改用户信息
* @Date:20:33 2018/3/28
*/
public void updateUserBy(User user);
}
由于SqlSession的线程的不安全性,我们需要把它定义到方法内部,定义接口的实现类。
public class UserDaoImpl implements UserDao {
private SqlSessionFactory sqlSessionFactory;
public UserDaoImpl(SqlSessionFactory sqlSessionFactory){
this.sqlSessionFactory = sqlSessionFactory;
}
@Override
public User findUserById(int id) {
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = sqlSession.selectOne("selectUser",id);
sqlSession.close();
return user;
}
@Override
public void insertUser(User user) {
SqlSession sqlSession = sqlSessionFactory.openSession();
sqlSession.insert("test.insertUser",user);
sqlSession.commit();
sqlSession.close();
}
@Override
public void dalateUser(int id) {
SqlSession sqlSession = sqlSessionFactory.openSession();
//通过sqlsession操作数据库
sqlSession.delete("test.deleteUserById",39);
//提交事务
sqlSession.commit();
sqlSession.close();
}
@Override
public void updateUserBy(User user) {
SqlSession sqlSession = sqlSessionFactory.openSession();
sqlSession.update("test.updateUser",user);
//提交事务
sqlSession.commit();
sqlSession.close();
}
下面我们利用junit来测试一下dao的方法。
public class UserDaoTest {
private SqlSessionFactory factory;
private UserDao dao;
@Before
public void loadFactory() throws Exception{
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建会话工厂
factory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void testfindUserById(){
dao = new UserDaoImpl(factory);
User user = dao.findUserById(1);
System.out.println(user);
}
@Test
public void testInsertUser(){
dao = new UserDaoImpl(factory);
User user = new User();
user.setUsername("秦王");
user.setBirthday(new Date());
user.setSex("1");
user.setAddr("四川成都");
dao.insertUser(user);
}
@Test
public void testDalateUser(){
dao = new UserDaoImpl(factory);
User user = new User();
user.setId(38);
user.setUsername("青云");
user.setBirthday(new Date());
user.setSex("1");
user.setAddr("四川成都");
dao.updateUserBy(user);
}
运行每个测试用例程序都正确输出,至此,原始的dao开发方式结束。