zoukankan      html  css  js  c++  java
  • java-mybaits-00202-DAO-原始DAO开发方法

    原始Dao开发方法需要程序员编写Dao接口和Dao实现类。
    原本的ibatis的 
             需要在dao实现类中注入一个SqlSessionFactory工厂。

    1.思路

    程序员需要写dao接口和dao实现类。
    需要向dao实现类中注入SqlSessionFactory,在方法体内通过SqlSessionFactory创建SqlSession

    2  映射文件

    使用上一节

    3、Dao编写

    public interface UserDao {
        // 一般会把异常抛出
        public User getUserById(int id) throws Exception;
        public void insertUser(User user) throws Exception;
    }

    实现类

    package com.lhx.mybatis.olddaomybatis;
    
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    
    import com.lhx.mybatis.po.User;
    
    public class UserDaoImpl implements UserDao {
    
        private SqlSessionFactory sqlSessionFactory;
        
        public SqlSessionFactory getSqlSessionFactory() {
            return sqlSessionFactory;
        }
    
        public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
            this.sqlSessionFactory = sqlSessionFactory;
        }
    
        //注入SqlSessionFactory
        public UserDaoImpl(SqlSessionFactory sqlSessionFactory){
           this.setSqlSessionFactory(sqlSessionFactory);
        }
         
        public void insertUser(User user) throws Exception {
           SqlSession sqlSession = sqlSessionFactory.openSession();
           try {
               sqlSession.insert("test.insertUser", user);
               sqlSession.commit();
           } finally{
               sqlSession.close();
           }
          
        }
    
        public User getUserById(int id) throws Exception {
           SqlSession session = sqlSessionFactory.openSession();
           User user = null;
           try {
               //通过sqlsession调用selectOne方法获取一条结果集
               //参数1:指定定义的statement的id,参数2:指定向statement中传递的参数
               user = session.selectOne("test.findUserById", 1);
               System.out.println(user);
                        
           } finally{
               session.close();
           }
           return user;
        }
    }
    View Code

    测试代码

    public class TestDao {
        // 会话工厂
        private SqlSessionFactory sqlSessionFactory;
    
        @Before
        public void setUp() throws Exception {
            // 配置文件
            String resource = "SqlMapConfig.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            // 使用SqlSessionFactoryBuilder从xml配置文件中创建SqlSessionFactory
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        }
    
        @Test
        public void testFindUserById() throws Exception {
            UserDao userDao = new UserDaoImpl(sqlSessionFactory);
            User user = userDao.getUserById(1);
            System.out.println(user);
        }
    }
    View Code

    4 总结原始 dao开发问题

    1、dao接口实现类方法中存在大量模板方法,设想能否将这些代码提取出来,大大减轻程序员的工作量。 
    2、调用sqlsession方法时将statement的id硬编码了 
    3、调用sqlsession方法时传入的变量,由于sqlsession方法使用泛型,即使变量类型传入错误,在编译阶段也不报错,不利于程序员开发。
  • 相关阅读:
    Qt4的项目在转到Qt5时遇到的问题解决方案链接
    禁止MFC的MDI程序自动创建空白子窗体
    工厂方法(factory method)
    简单工厂模式(Simple Factory)
    单例模式(Singleton Pattern)
    设计模式六大设计原则
    Windows Server 2003 Sp2 下无法安装SQL Server 2008 Management Studio Express问题
    原生javascript和jquery实现简单的ajax例子
    MS Sql server 2008 学习笔记
    C#面向对象学习笔记概要
  • 原文地址:https://www.cnblogs.com/bjlhx/p/6819034.html
Copyright © 2011-2022 走看看