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方法使用泛型,即使变量类型传入错误,在编译阶段也不报错,不利于程序员开发。
  • 相关阅读:
    【分布式锁】RedLock 实现分布式锁
    【反射】遍历对象属性名与值
    【ABP.Net】2.多数据库支持&&初始化数据库
    【ABP.Net】1.创建项目&介绍框架结构
    【Vue-Cli3.0】【2】渲染
    【nuget】PackageReference
    【Vue-Cli3.0】【1】创建一个Vue-Cli3.0的项目
    【干货】干货篇
    踩坑记录-Redis(Windows)的getshell
    极致CMS存储XSS|前台打后台COOKIE漏洞复现
  • 原文地址:https://www.cnblogs.com/bjlhx/p/6819034.html
Copyright © 2011-2022 走看看