美文网首页
带你学习Mybatis之mybatis基本配置及执行

带你学习Mybatis之mybatis基本配置及执行

作者: 墨线宝 | 来源:发表于2024-06-01 11:38 被阅读0次

    mybatis基本配置及执行

    使用mybatis首先需要两个配置文件,一个是mybatis-config.xml,是mybatis的基础配置文件,配置数据库的地址、用户名、密码、别名信息、映射配置文件位置以及一些全局配置;另一个配置文件是mapper.xml,这是实体与表的映射文件,定义了映射规则以及一些SQL语句。

    配置文件配置

    全局配置文件

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <!-- 数据库配置 -->
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/test"/>
                    <property name="username" value="root"/>
                    <property name="password" value="123456"/>
                </dataSource>
            </environment>
        </environments>
        <!-- mapper配置 -->
        <mappers>
            <mapper resource="mapper/UserMapper.xml"/>
        </mappers>
    </configuration>
    

    mapper配置文件

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <!-- namespace为mapper接口的全类名,用于区分不同Mapper接口中的相同方法 -->
    <mapper namespace="com.zhanghe.study.mybatis.mapper.UserMapper">
        <!-- 查询数据的方法 -->
        <select id="selectUser" resultType="com.zhanghe.study.mybatis.model.User">
            select * from users where id = #{id}
        </select>
    </mapper>
    

    执行流程

    程序会先加载mybatis-config.xml配置文件,根据配置文件内容创建SqlSessionFactory对象,然后通过SqlSessionFactory创建SqlSession对象,SqlSession接口中定义了执行SQL语句所需的各种方法,通过SqlSession对象执行配置文件中的定义的SQL语句,完成相应的数据操作,最后通过SqlSession提交事务,关闭SqlSession对象

    创建SqlSessionFactory

    SqlSessionFactory是Mybatis的核心,可以通过SqlSessionFactoryBuilder获得,SqlSessionFactoryBuilder从mybatis的配置文件构建出SqlSessionFactory实例,SqlSessionFactoryBuilder是利用XML或者Java编码获得资源来构建SqlSessionFactory 的,通过它可以构建多个SessionFactory

    public static SqlSessionFactory createFactory(){
        // 获取到mybatis-config.xml配置文件,进而构建SqlSessionFactory
        InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("mybatis-config.xml");
        return new SqlSessionFactoryBuilder().build(is);
    }
    

    SqlSessionFactory的作用是创建SqlSession,而SqlSession相当于一个会话,相当于JDBC中的connection对象,每次应用程序需要访问数据库,我们就要通过SqlSessionFactory创建SqlSession,所以SqlSessionFactory应该在整个应用的生命周期中。而如果我们多次创建同一个数据库的SqlSessionFactory,则每次创建的SqlSessionFactory会打开更多的数据库连接资源,那么连接资源很开会被耗尽,因此SqlSessionFactory的职责是唯一的,在应用中使用同一个SqlSessionFactory对象即可

    获取SqlSession

    通过SqlSessionFactory实例,可以获取到SqlSession的实例,sqlSession提供了在数据库执行SQL命令所需的所有方法,可以通过SqlSession实例来直接执行已映射的SQL语句

    SqlSession是一个会话,相当于JDBC中的一个Connection对象,它的生命周期应该是在请求数据库处理事务的过程中,且SqlSession是线程非安全的对象,涉及多线程时要特别的当心,每次创建的SqlSession对象都要及时的关闭它,它长期存在就会使数据库连接池的活动资源减少,对系统性能影响很大

    SqlSession session = sqlSessionFactory.openSession(true);
    
    老版本执行
    public static SqlSession getCurrentSession(){
        SqlSessionFactory factory = createFactory();
        return factory.openSession();
    }
    
    SqlSession session = getCurrentSession();
    // selectOne方法的两个参数  1、sql的唯一标识(namespace+id)   2、sql所需要的参数
    User user = session.selectOne("com.zhanghe.study.mybatis.mapper.UserMapper.selectUser",2);
    System.out.println(user);
    // 关闭session
    session.close();
    
    新版本执行

    由于老版本操作时容易出现一些问题,新版本的mybatis进行了改善,将整个mapper文件的命名空间映射为一个接口,每个mapper中的sql语句映射为接口中的方法

    public interface UserMapper {
    
        User selectUser(Integer id);
    }
    
    session = getCurrentSession();
    // mybatis为接口创建代理对象
    UserMapper userMapper = session.getMapper(UserMapper.class);
    User user1 = userMapper.selectUser(2);
    System.out.println(user1);
    session.close();
    

    https://zhhll.icu/2021/框架/mybatis/基础/4.mybatis整体流程/

    本文由mdnice多平台发布

    相关文章

      网友评论

          本文标题:带你学习Mybatis之mybatis基本配置及执行

          本文链接:https://www.haomeiwen.com/subject/awfjqjtx.html