mybatis学习二-映射文件

mybatis学习二-映射文件,第1张

mybatis学习二-映射文件

先看一张图

不难发现, mybatis就是通过映射文件来管理sql语句的, 不再是传统的将sql语句写在代码中, 将sql和代码分开解耦了.

1. mybatis的更新 *** 作 1.1 插入 *** 作

注意点:





    
    
        
        insert into tb_user value (#{id},#{name},#{age})
    

    @Test
    public void test2() throws IOException {
        //模拟数据
        User user = new User();
        user.setId(3);
        user.setName("hahaha");
        user.setAge(20);


        //加载核心配置文件  Resources就是mybatis框架提供的, 注意是在org.apache.ibatis.io.Resources包下
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapperConfig.xml"); //就在resources下, 直接写
        //获取session工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获取会话对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //执行 *** 作 参数就是, namespace+id
        int insert = sqlSession.insert("userMapper.save",user);
        //测试, 打印出来数据
        System.out.println(insert);

        //mybatis的更新 *** 作默认是不提交事务的
        sqlSession.commit();

        //释放资源
        sqlSession.close();
    }

有人可能会问返回值是什么, 配置时为什么不用加resultType属性

1.2 修改 *** 作

    
        update tb_user set name = #{name} , age = #{age} where id = #{id}
    
    @Test
    public void test3() throws IOException {
        //模拟数据
        User user = new User();
        user.setId(3);
        user.setName("hehehe");
        user.setAge(21);


        //加载核心配置文件  Resources就是mybatis框架提供的, 注意是在org.apache.ibatis.io.Resources包下
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapperConfig.xml"); //就在resources下, 直接写
        //获取session工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获取会话对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //执行 *** 作 参数就是, namespace+id
        int num = sqlSession.update("userMapper.update",user);
        //测试, 打印出来数据
        System.out.println(num);

        //mybatis的更新 *** 作默认是不提交事务的
        sqlSession.commit();

        //释放资源
        sqlSession.close();
    }

1.3 删除 *** 作

    
        delete from tb_user where id = #{id}
    
    @Test
    public void test4() throws IOException {

        //加载核心配置文件  Resources就是mybatis框架提供的, 注意是在org.apache.ibatis.io.Resources包下
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapperConfig.xml"); //就在resources下, 直接写
        //获取session工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获取会话对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //执行 *** 作 参数就是, namespace+id
        int num = sqlSession.delete("userMapper.delete",6);
        //测试, 打印出来数据
        System.out.println(num);

        //mybatis的更新 *** 作默认是不提交事务的
        sqlSession.commit();

        //释放资源
        sqlSession.close();
    }
1.4 小结

可见, 更新 *** 作的返回值都是int, 表示生效的行数
如果sqlSessionFactory.openSession(); 开启事务会话
也就是默认的不自动提交
更新 *** 作是不会自动提交到数据库的. 但是查询 *** 作可以随表查
查询 *** 作就是两个api, 一个是one一个是list

接下来学习映射文件深入的部份, 以上都是简单的入门

2. 映射文件深入学习

首先就要认识mybatis的映射文件真正的作用是什么, 以上的学习, 我们只知道映射文件可以写我们的sql语句, 配置好sql语句之后, 使用时可以通过namespace+id来锁定要的sql语句

mybatis是用在dao层的框架, 映射文件里配置和存放sql语句和dao层又有什么关系呢

在以前javaweb阶段我们学习到, dao层的存在是为业务层的方法提供基础

传统的方法就是, dao层的接口要我们自己写实现类来实现方法, sql语句在这个过程中也会和实现类耦合在一起, 也就是说, mybatis的存在, 可以将传统的方法改变成, 接口+映射文件的形式, 不再需要我们自己写dao层的实现类了, 这样一来不就使得代码和sql语句分开了吗, 也体现了框架面向接口和配置文件做项目的目的.

那么, 怎么实现映射文件来取代实现类, 就是我们学习的重点

2.1 代理开发模式


例如

说白了, 实现类不用写了, mybatis自动会给我们创建代理对象

也就是说, 不再是直接使用namespace+id
而是使用getMapper(接口类)获取代理对象
在通过代理对象锁定sql

2.2 动态sql



动态的sql极大的方便了sql的使用
因为当你给不同的参数
就会动态的执行不同的sql

2.2.1 if
    
        select * from tb_user
        
            
                #{id}
            
        
    
    @Test
    public void test6() throws IOException {
        //模拟数据
        List list = new ArrayList();
        list.add(1);
        list.add(2);
        list.add(3);


        //加载核心配置文件  Resources就是mybatis框架提供的, 注意是在org.apache.ibatis.io.Resources包下
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapperConfig.xml"); //就在resources下, 直接写
        //获取session工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获取会话对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取代理对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List userList = mapper.findByIds(list);
        //测试, 打印出来数据
        System.out.println(userList);

        //mybatis的更新 *** 作默认是不提交事务的
        sqlSession.commit();

        //释放资源
        sqlSession.close();
    }

2.3 sql片段的抽取

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5695511.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存