MyBatis的Mapper映射

MyBatis基于代理机制,让我们无需再编写Dao的实现。
传统Dao接口,现在名称统一以Mapper结尾:
使用步骤:
1:创建接口:IUserDao变成UserMapper:DomainMapper
接口内容和普通的一样
UserMapper:

public interface ProductMapper {
    Product findOne(Long id);
}

2:不再写UserDaoImpl:直接定位到DomainMapper.xml:
namespace:能够链接到mapper接口,就是DomainMapper的权限定名
sql:和接口的方法对应起来.
注意:DomainMapper接口的方法名和id要完全一致

<?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">
<!--
	这个Mapper的主要功能就是写sql
	mapper:根
	namespace:命令空间 (用来确定唯一) 以前这个是可以不加的,现在必需加
     namespace的值,规则的:映射文件XxxMapper.xml所在的包+domain类名+Mapper
 -->
<mapper namespace="cn.shuhan.mapper.ProductMapper">
    <!--id 要跟接口方法一样 最好是copy
    Product findOne(Long id);
    parameterType :参数类型
    resultType:返回值类型  要是没设置别名就写权限定名
    -->
    <select id="findOne" parameterType="long" resultType="cn.shuhan.mapper.Product">
        select * from product where id =#{id}
    </select>
</mapper>

3.将DomainMapper.xml映射设置到MyBatis-config.xml中
在这里插入图片描述
MyBatis-config.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>

    <!--
    引入classpath下的db的配置文件
    -->
    <properties resource="db.properties">

    </properties>
    <!--
     二级缓存:可以不写
    -->
    <settings>
        <setting name="cacheEnabled" value="true"/>
    </settings>
    <!--给类型加上别名
        要加在引入配置文件下   环境搭建上
        type:原数据类型
        alias:别名
        要是不写alias  会默认是类的简单类名  首字母大小写都可以   建议大写 大写一看就知道是一个类
        先配置别名再使用别名
    -->
    <typeAliases>
       <!-- <typeAlias type="cn.itsource.mybatis.domain.Product" alias="product"></typeAlias>-->
        <!--<typeAlias type="cn.itsource.mybatis.domain.Product" ></typeAlias>-->
        <!--扫描包 一个包里的全部类都可以用简单类名
    <package name="cn.shuhan.mapper"></package>-->

    </typeAliases>
    <!--
      环境们:多个环境
      development:开发
    -->
    <environments default="development">
        <!--
          一个环境的配置
        -->
        <environment id="development">
            <!--事务的管理:-->
            <transactionManager type="JDBC"/>
            <!--数据源的排至-->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <!--
         引入写sql语句的mapper配置文件:
              <mapper resource="org/mybatis/example/BlogMapper.xml"/>
        -->
       <!--mapper映射器配置-->
        <mapper resource="cn/shuhan/mapper/ProductMapper.xml"/>
       
    </mappers>

</configuration>

4.测试: 通过工具类获取sqlSession,再通过sqlSession获取到指定mapper接口的代理接口:调用方法;

public class ProductMapperTest {

    @Test
    public void findOne() {
        SqlSession sqlSession = null;
        try {
            //工具类得到sqlsession
            sqlSession = MybatisUtil.getSqlSession();
            //获取映射 
            ProductMapper productMapper = sqlSession.getMapper(ProductMapper.class);
            //打印确认一下productMapper不是原来的对象 而是是被映射处理过的对象 
            System.out.println(productMapper);
            //映射对象调用方法
            System.out.println(productMapper.findOne(3L));
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
        //关闭sqlSession
            if (sqlSession != null) {
                sqlSession.close();
            }
        }
    }
}

5.工具类MyBatisUtil:因为SqlSessionFactory对象是一个重量级的,加载费性能,而且加载一次可以一直用 所以封装一下

public class MybatisUtil {
    static SqlSessionFactory factory;
    static {
        try {
            //通过配置文件获得一个Reader
            Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
            //获取SqlSessionFactory 对象
            factory= new SqlSessionFactoryBuilder().build(reader);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //提供获取sqlsession的公共方法
    public static SqlSession getSqlSession(){
        return factory.openSession();
    }
}
发布了4 篇原创文章 · 获赞 2 · 访问量 528

猜你喜欢

转载自blog.csdn.net/weixin_43204812/article/details/84994128
今日推荐