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方法使用泛型,即使变量类型传入错误,在编译阶段也不报错,不利于程序员开发。
原文地址:https://www.cnblogs.com/bjlhx/p/6819034.html