zoukankan      html  css  js  c++  java
  • 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方法还有瑕疵,具体怎么改进请看接下来的更新。。。

    一杯敬朝阳,一杯敬月光
  • 相关阅读:
    【转载】webDriver拾级而上·之五 iframe的处理
    Linux课程笔记 用户和用户组管理
    Linux课程笔记 文件和目录权限
    Linux课程笔记 软硬链接
    Java算法面试题
    Linux课程笔记 Day09 课上内容总结 MySql,Php的安装及Apache,Nginx,Php的优化
    Day13 高级子查询
    Day12 SET运算符
    Day11 其他数据库对象
    Linux课程笔记 Day08 课上内容总结 Apache,Raid技术及Nginx
  • 原文地址:https://www.cnblogs.com/scuury/p/8546670.html
Copyright © 2011-2022 走看看