【SSM_08】Mybatis-配置

2021-02-04 10:50:02 浏览数 (1)

一、Mybatis概述

1. 简介

mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。mybatis通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句。最后mybatis框架执行sql并将结果映射为java对象并返回。 采用ORM思想解决了实体和数据库映射的问题,对jdbc 进行了封装,屏蔽了jdbc api 底层访问细节,使我们不用与jdbc api 打交道,就可以完成对数据库的持久化操作。

2. 配置
代码语言:javascript复制
① 核心配置文件【mybatisConfig.xml】
<!-- 约束文件 -->
<?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>
    <!-- 加载配置文件 -->
    <properties resource="jdbc.properties" />

    <!-- 别名 -->
    <typeAliases>
        <!-- 单个类起别名 -->
        <typeAlias type="com.softwareMan.domain.User" alias="user" />

        <!-- 整个包内起别名 -->
        <package name="com.softwareMan.domain"/>
    </typeAliases>

    <!-- 开发环境 -->
    <environments default="first">
        <environment id="first">
            <!-- 事务 -->
            <transactionManager type="JDBC" />
            <!-- 数据源 -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.dirveClass}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 加载映射文件 -->
    <mappers>
        <!-- 配单个(基于 XML) -->
        <mapper resource="mapper/userMapper.xml" />

        <!-- 配单个(基于注解) -->
        <mapper class="com.softwareMan.dao.UserDao" />

        <!-- 
            配多个 

            ## 注意
            - 使用此种方式时,接口与映射文件需再同一路径下
            - IDEA 在使用这种方式时,若将映射文件写道 java 文件夹内时,IDEA 不会获取静态资源
            【pom加如下配置使其能够获取静态资源】
            <build>
                <resources>
                    <resource>
                    <directory>src/main/java</directory>
                    <includes>
                        <include>**/*.xml</include>
                    </includes>
                    </resource>
                </resources>
            </build>
        -->
        <package name="com.softwareMan.dao"/>
    </mappers>
</configuration>
    
---------------------------------------------------------------------------------------------------------------

② 映射文件【daomapper.xml】
<?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 namespace="userMapper">
    <!-- 
        id 为唯一标识
        parameterType、resultType参数与结果集需要配全限定名(或别名【常用数据类型Mybatis底层已有别名】) 

        ## 注意    
        此数 标签名 见名知意,可以混用【不推荐】
    -->
    <select id="findByUserId" parameterType="int" resultType="com.softwareMan.domain.User">
        <!-- sql 语句 #{} 为占位符,内填类的属性名,为单一值时可任意 -->
        select * from user where id = #{value}
    </select>
</mapper>
        

----------------------------------------------------------------------------------------------------------------

③ 执行【Test.java】
public static void main(String[] args) throws IOException {
    //加载核心配置文件
    InputStream rs = Resources.getResourceAsStream("mybatisConfig.xml");
    //创建 session 工厂对象
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(rs);
    /*
        获取 sqlSession 会话对象
        * openSession():执行增删改时需要手工提交事务
        提交事务方法:sqlSession.commit();

        * openSession(boolean):为 true 时,自动提交事务
    */
    SqlSession sqlSession = factory.openSession();

    /*
        普通方式执行 sql

        此处增删改方法可以混用
        原因:方法分为两类,增删改底层调用同一种方法
        - update : 增、删、改
        - select : 查
    */
    List<User> list = sqlSession.selectList("userMapper.find");

    /*
        使用接口代理对象执行

        注意:
        映射文件 命名空间 为接口的全限定名
        映射文件 id 为接口方法名
    */
    UserDao mapper = sqlSession.getMapper(UserDao.class);
    List<User> list = mapper.findAll();

    //打印结果集
    System.out.println(list);
}

0 人点赞