mybatis配置文件

写的很乱是为了让自己加深记忆用的
mybatis的配置文件

<!--声明关联的数据文件-->
<properties resource="db.properties"></properties>
    <settings>
        <!--是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!--打开日志 STDOUT_LOGGING是mybatis自带-->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
        <!--打开懒加载-->
        <setting name="lazyLoadingEnabled" value="true"/>
    </settings>
    <typeAliases>
        <!--一个类书写一个-->
        <!--<typeAlias type="com.entry.TabAccount" alias="TabAccount"/>-->
        <!--给包起别名-->
        <package name="com.entry"/>
    </typeAliases>
    <!--environments数据源环境  一个项目可以有多个数据源 default="development" 默认数据源是development-->
    <environments default="development">
        <!--environment:一个数据源,每一个都有一个唯一的id-->
        <environment id="development">
            <!--transactionManager:事务管理 jdbc:jdbc自己管理事务  MANAGED:交给容器-->
            <transactionManager type="JDBC"/>
            <!--dataSource:数据源
             pooled:数据库连接池的形式提供链接
             UNPOOLED:普通数据源
             JNDI:远程数据源
             -->
            <dataSource type="POOLED">
                <property name="driver" value="${db.className}"/>
                <property name="url" value="${db.url}"/>
                <property name="username" value="${db.username}"/>
                <property name="password" value="${db.pwd}"/>
            </dataSource>
        </environment>
    </environments>
    <!--加载映射文件的-->
    <mappers>
        <mapper resource="com/mapper/TabAccountMapper.xml"/>
        <!--这种命名方式要求 mapper.xml文件的namespace的值必须与mapper接口相对应
        因为他是先定位到接口文件  然后因为namespace指定的接口 使mapper接口中的方法与mapper.xml文件的sql相对应
        所以使用class指定mapper映射文件是必须有mapper接口,且mapper.xml文件的namespace值必须与mapper接口相对应
        namespace值不能随便写-->
        <!--<mapper class="com.mapper.TabAccountMapper"/>-->
        <!--resource 是直接定位到mapper.xml文件 通过bean id定位SQL时可以不写mapper接口  mapper.xml 文件的namespace是可以随便写的-->
        <mapper resource="com/mapper/TabRoleMapper.xml"/>
        <mapper resource="com/mapper/TabDepartmentMapper2.xml"/>
        <mapper resource="com/mapper/TabStaffMapper2.xml"/>
    </mappers>

mapper.xml的配置文件

<!--命名空间:namespace:定位文件  id定位sql——namespace随便写 定位文件   id定位sql-->
<!--mapper.xml配合接口使用:namespace对应接口  id对应接口方法名  以后定位就直接找接口.方法()-->
<!--<mapper namespace="aaa">-->
<mapper namespace="com.mapper.TabAccountMapper">
    <!--id定位sql_id对应方法名   resultType:映射的要求,每一行的数据类型是什么-->
    <!--select:里边是查询sql-->
    <select id="selectAccount" resultType="java.util.Map">
      select * from tab_account
    </select>
    <select id="selectAccountById" resultType="java.util.Map">
        select * from tab_account where accountid=1
    </select>
    <select id="selectAccount2" resultType="TabAccount">
      select * from tab_account
    </select>
    <select id="selectAccountById2" resultType="TabAccount">
        select * from tab_account where accountid=1
    </select>
    <select id="selectCountAccount" resultType="int">
        select count(*) from tab_account
    </select>


    <!--接受参数一个Map  #{key}-->
    <insert id="insertAccount" parameterType="java.util.Map">
      insert into tab_account(accountname,accountpassw)values(#{a},#{b})
    </insert>
    <!--实体  #{属性名}-->
    <insert id="insertAccount2" parameterType="TabAccount">
      insert into tab_account(accountname,accountpassw)values(#{accountname},#{accountpassw})
    </insert>
    <!--接收单一值  取值:#{随便写}-->
    <delete id="deleteAccountById" parameterType="int">
        delete from tab_account where accountid=#{id}
    </delete>
    <!--如果接收的是多个的时候,parameterType不写  #{param定义的别名}-->
    <insert id="insertAccount3" >
      insert into tab_account(accountname,accountpassw)values(#{accountname},#{pwd})
    </insert>

</mapper>

测试方法

  1. 通过mapper接口获取方法并定位sql
    此方法mybatis文件的指定mapper映射文件时不管是class 还是 resource 指定的mapper.xml文件的namespace的值都要与接口位置对应不能随便写
InputStream is= Resources.getResourceAsStream("mybatis.xml");
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder=new SqlSessionFactoryBuilder();
            /*一个数据源对应一个sqlSessionFactory,默认的哪一个*/
            SqlSessionFactory sqlSessionFactory=sqlSessionFactoryBuilder.build(is);
            //执行sql
            SqlSession sqlSession=sqlSessionFactory.openSession();
            /*获取mapper接口*/
            TabRoleMapper roleMapper=sqlSession.getMapper(TabRoleMapper.class);
           List roleList=roleMapper.selectRole();
            System.out.println(roleList);
            TabAccountMapper mapper=sqlSession.getMapper(TabAccountMapper.class);//获取代理类——共性的代码给提取
            List list=mapper.selectStaffAccount();
            System.out.println(list);
  1. 通过bean id 定位sql
    此方法mybatis文件的指定mapper映射文件时,使用class方式指定mapper.xml 文件时不能没有mapper接口mapper.xml文件的namespace的值要与mapper接口位置对应

如果使用resource指定mapper.xml 文件时是直接定位到mapper.xml文件与mapper接口无关
所以不要mapper接口namespace的值可以随便写

try {
            InputStream is= Resources.getResourceAsStream("mybatis.xml");
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder=new SqlSessionFactoryBuilder();
            /*一个数据源对应一个sqlSessionFactory,默认的哪一个*/
            SqlSessionFactory sqlSessionFactory=sqlSessionFactoryBuilder.build(is);
            //执行sql
            SqlSession sqlSession=sqlSessionFactory.openSession();
            //namespace定位文件  id定位sql
            List<Map> list=sqlSession.selectList("aaa.selectAccount");
            System.out.println(list);
        } catch (IOException e) {
            e.printStackTrace();
        }
posted @ 2021-04-01 14:16  忆尘不散  阅读(126)  评论(0)    收藏  举报