利用原始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开发方式结束。