zoukankan      html  css  js  c++  java
  • 通过Mybatis原始Dao来实现curd操作

    环境的配置见我上一篇博客

    首先,在上一篇博客中,我们知道,SqlSession中封装了对数据库的curd操作,通过sqlSessionFactory可以创建SqlSession,而SqlSessionFactory是通过SqlSessionFactoryBuilder来进行创建的。

    通过ss实例,来实现对数据库的curd操作。

    例如: ss.delete("test.deleteUserById", 3);

    然后,关于SqlSessionFactoryBuilder

    SqlSessionFactoryBuilder用于创建SqlSessionFactory,并且SqlSessionFactory一旦创建完成就不需要SqlSessionFactoryBuilder了,所以可以把它当做一个工具类使用。

    最佳的使用方法是放到方法体内当局部变量。

    关于SqlSessionFactory

    SqlSessionFactory是一个接口,接口中定义了openSession的不同重载方法。最佳使用范围是整个应用运行期间,一旦创建后可以重复使用。所以创建一个实例就够了

    所以通常以单例模式管理它。

    关于SqlSession

    SqlSession是一个面向用户的接口,其中定义了数据库的操作方法。

    每个线程都应该有它自己的SqlSession实例,该实例不能被共享使用,它也是线程不安全的。所以使用的最佳范围是请求或方法内。绝对不能把它实例的引用放到一个类的静态字段或实例字段中。

    打开一个SqlSession,使用完毕要记得关闭它。所以通常放到finally代码块中以确保每次都能关闭。

    这里直接进入正题~~

    配置文件依旧用的上一篇博客定义的User.xml

    首先,编写Dao接口和Dao实现类

    在这里,用查询操作来举例子。

    要实现Insert,update,delete操作,都是同样的道理,这里不再赘述。

    由于SqlSessionFactory一旦创建后可以重复使用。所以创建一个实例就够了,并且可以通过构造方法把它传入进去。

    public class UserDaoImpl implements UserDao {
    
        private SqlSessionFactory sqlSessionFactory;
    
        //通过构造方法注入
        public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
            super();
            this.sqlSessionFactory = sqlSessionFactory;
        }
    
        @Override
        public User findUserById(Integer id) {
            //sqlSession是线程不安全的,所以它最佳的使用范围在方法体内,用完就能销毁
            SqlSession ss = sqlSessionFactory.openSession();
            User user = ss.selectOne("test.findUserById", id);
            return user;
        }
    
        @Override
        public List<User> findUserByUserName(String username) {
            SqlSession ss = sqlSessionFactory.openSession();
            List<User> list = ss.selectList("test.findUserByUserName",username);
            return list;
        }
        
    }

    测试代码:

    public class UserDaoTest {
    
        private SqlSessionFactory factory;
        
        //在测试方法前执行这个方法
        @Before
        public void setUp() throws Exception{
            String resource = "SqlMapConfig.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            factory = new SqlSessionFactoryBuilder().build(inputStream);
            
        }
        @Test
        public void testFindUserById() throws Exception{
            UserDao userdao = new UserDaoImpl(factory);
            User user = userdao.findUserById(1);
            System.out.println(user);
        }
    
        @Test
        public List<User> testFindUserByUsername() throws Exception{
            UserDao ud = new UserDaoImpl(factory);
            List<User> list = ud.findUserByUserName("王");
            return list;
            
        }
    }

    这是第一个方法的运行结果:

    原始Dao开发存在的问题:

    Dao方法体依旧存在重复代码,即:通过SqlSessionFactory创建SqlSession,调用SqlSession的数据库操作方法。

    在本例中,调用sqlSession的数据库操作方法需要指定id,这里存在硬编码,不利于开发维护。

  • 相关阅读:
    puppeteer 离线安装chromium
    如何在Taro项目中使用Iconfont(阿里图标)
    POI3.8内存中限制行数为100问题记录
    centos下puppeteer调用chromium报错,缺少包
    VS Code 简单配置运行Java
    使用VSCode 断点调试 js项目,html页面
    Java--Excel--poi 边框、单元格换行、 背景色、合并单元格相关
    浅析Spring Aware
    Spring MVC 注解
    异常处理
  • 原文地址:https://www.cnblogs.com/tonbby/p/9159640.html
Copyright © 2011-2022 走看看