• 07_MyBatis原始的Dao编写方法


    【UserDao.java 】

    package com.Higgin.Mybatis.dao;
    
    import com.Higgin.Mybatis.po.User;
    
    public interface UserDao {
        //根据id查询用户信息
        public User findUserById(int id) throws Exception;
        
        //添加用户信息
        public void insertUser(User user) throws Exception;
        
        //删除用户信息
        public void deleteUser(int id) throws Exception;
    }

    【UserDaoImpl.java】

    package com.Higgin.Mybatis.dao;
    
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    
    import com.Higgin.Mybatis.po.User;
    
    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 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();
        }
    }

    【UserDaoTest.java】

    【建立Junit测试方法流程】

    1.新建一个将要测试类,右击,选择Junit Test Case(最后会生成一个专门的测试类,不需自己新建一个test类)

    2.如下图选择,点击Next

    3.选出需要测试的方法

    4.会自动生成以下模板代码

    代码如下

    package com.Higgin.Mybatis.dao.test;
    
    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 com.Higgin.Mybatis.dao.UserDao;
    import com.Higgin.Mybatis.dao.UserDaoImpl;
    import com.Higgin.Mybatis.po.User;
    
    public class UserDaoTest{
        
        private SqlSessionFactory sqlSessionFactory; 
        
        //此方法在执行testFindUserById() 之前执行
        @Before
        public void setUp() throws Exception {
            //创建sqlSessionfactory
            //MyBatis配置文件
            String resource="SqlMapConfig.xml";
            //得到配置文件流
            InputStream inputStream=Resources.getResourceAsStream(resource);
            //创建会话工厂,传入MyBatis的配置文件信息  
         //这里千万别写成SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
        //不然会NullPointerException报错
    sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); } @Test public void testFindUserById() throws Exception { //创建UserDao的对象 UserDao userDao =new UserDaoImpl(sqlSessionFactory); //调用UserDao的方法 User user =userDao.findUserById(4); System.out.println(user.toString()); } }

    【运行结果】

     【原始Dao方法的问题总结】

    1.dao接口实现类方法中存在大量的模板方法,应该设法将这些模板的代码提取出来,减少工作量。

    2.调用sqlSession方法时,将statement的id硬编码了

    3.调用sqlSession方法是传入的变量,由于sqlSession方法使用泛型,及时变量传入错误,在编译阶段也不会 报错,不利于开发。

  • 相关阅读:
    初中几何
    角平分线导致的三角形内外角关系
    解方程
    初中|数学题目整理
    求一次函数解析式
    整式的四则运算
    分式方程
    做辅助线的方法
    线段相等的证明思路
    python2.7安装sqlite3模块
  • 原文地址:https://www.cnblogs.com/HigginCui/p/5699938.html
Copyright © 2020-2023  润新知