JAVA从入门到精通之SQL映射器Mapper接口(MyBatis)
沉沙 2019-08-07 来源 : 阅读 2422 评论 0

摘要:本篇文章探讨了JAVA从入门到精通之SQL映射器Mapper接口(MyBatis),希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

本篇文章探讨了JAVA从入门到精通之SQL映射器Mapper接口(MyBatis),希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

JAVA从入门到精通之SQL映射器Mapper接口(MyBatis)

"

SQL映射器Mapper接口

  MyBatis基于代理机制,可以让我们无需再写Dao的实现。直接把以前的dao接口定义成符合规则的Mapper。

   注意事项:

  1.接口必须以Mapper结尾,名字是DomainMapper

  2.mapper.xml文件要和Mapper接口建立关系,通过namespace:要能连接到Mapper接口

  3.mapper.xml中写查询语句的标签的传入参数类型(parameterType)、返回结果类型(resultType)必须和mapper接口中对应方法的传入参数类型和返回结果类型一致,id名字必须和mapper接口中的对应方法名保持一致。

操作步骤:

1、 创建一个DomainMapper接口:直接定义方法(共用了xml配置方式接口+注解方式两种)

注意:映射器Mapper接口,替换dao层,不用再写mapper层(dao层)实现类;名字统一以Mapper结尾。

package cn.wang._02mapper.mapper;import cn.wang._02mapper.domain.Product;import org.apache.ibatis.annotations.Select;import java.util.List;public interface ProductMapper {   
    /**
     * 查询一个商品:使用了接口+注解的方式     */
    @Select(""select * from Product where id = #{id}"")
    Product findOne(Long id);    /**
     * 查询所有商品:使用了xml配置方式     */
    List<Product> findAll();
}

2、 在mapper目录(原dao目录)下创建映射文件DomainMapper.xml(ProductMapper.xml)

<?xml version=""1.0"" encoding=""UTF-8""?><!DOCTYPE mapper PUBLIC ""-//mybatis.org//DTD Mapper 3.0//EN""
        ""//mybatis.org/dtd/mybatis-3-mapper.dtd""><!--
    这个Mapper的主要功能就是写sql
    namespace:mapper接口的完全限定名,在mybatis映射器中是用来和映射器接口产生联系,而不再是和domain实体类联系 --><mapper namespace=""cn.wang._02mapper.mapper.ProductMapper"">    <!--
        sql的id:mapper接口的对应方法名
        resultType和parameterType都和方法的参数和返回类型对应
        parameterType : 传入的参数类型(原本应该用的是全限定名,这里用的是别名)  long:大Long  _long:小long (具体的对应请参见文档)
        resultType : 返回的结果类型(每一条数据返回的对象类型) 自己的对象一定是全限定类名(这里写的是别名)
                注意:xml配置方式和接口+注解方式两种方式不能同时对同一sql操作使用     -->    <!--查询一个-->    <!--<select id=""findOne"" parameterType=""long"" resultType=""cn.wang._02mapper.domain.Product"">
        select * from product where id=#{id}
    </select>-->    <!--查询所有-->    <select id=""findAll"" resultType=""cn.wang._02mapper.domain.Product"">
        select * from product    </select></mapper>

3、在resources目录下创建核心配置文件:

<?xml version=""1.0"" encoding=""UTF-8"" ?><!DOCTYPE configuration
        PUBLIC ""-//mybatis.org//DTD Config 3.0//EN""
        ""//mybatis.org/dtd/mybatis-3-config.dtd""><!--根节点  子节点的前后是有顺序的 --><configuration>    <!-- environments:环境集合
        default:默认使用哪一个环境(必须对应一个环境的id)     -->    <!--引入外部的属性文件
        不写classpath的原因:resources默认到classpath中寻找资源    -->    <properties resource=""jdbc.properties"" />    <!--
        配置自定义别名
        注意:别名不区分大小写。
           共两种配置方式:
            一:一个一个配置(typeAlias)
                    type 类型的完全限定名
                    alias 别名
            二:统一为某个包下的所有类起别名(package)
                    name : 包名,别名就是类名(不区分大小写)    -->    
    <environments default=""development"">        <!--
            environment:一个环境  id:为这个环境取唯一一个id名称        -->        <environment id=""development"">            <!--
                transactionManager:事务管理(共有两个值) type:JDBC(支持事务)/MANAGED(什么都不做)            -->            <transactionManager type=""JDBC"" />            <!-- 数据源, 连接池  type(POOLED):MyBatis自带的连接池
                     type=""UNPOOLED"" 不使用连接池
                    type=""POOLED"" 使用连接池
                    type=""JNDI"" 容器中使用             -->            <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代表的是相应的ORM映射文件 -->    <mappers>        <mapper resource=""cn/wang/_02mapper/mapper/ProductMapper.xml"" />    </mappers></configuration>

MybatisUtils工具类

package cn.wang.Utils;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.Reader;public class MybatisUtils {    //保证sqlSessionFactory是单例    private static SqlSessionFactory sqlSessionFactory;    // SqlSessionFactory类似于JPA的EntityManagerFactory,Hibernate的SessionFactory    // SqlSession 类似于JPA的EntityManager,Hibernate的Session    //该类被加载的时候就执行该静态代码块    static {        try {
            Reader reader = Resources.getResourceAsReader(""MyBatis-Config.xml"");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        } catch (Exception e) {//异常的类型要写大一些,才能够看到具体的报错            e.printStackTrace();
        }
    }    //提供一个外界调用的类    public static SqlSession getSession(){        //创建并返回SqlSession对象        return sqlSessionFactory.openSession();
    }    //关闭sqlSession,释放资源(很重要,不然项目上线后会造成内存溢出)    public static void colseSession(SqlSession sqlSession){        if(sqlSession !=null){
            sqlSession.close();
        }
    }
}

jdbc.properties文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///mysql数据库名称jdbc.username=用户名
jdbc.password=密码

  可能遇到的错误:

JAVA从入门到精通之SQL映射器Mapper接口(MyBatis)

    (1)namespace写错了,应该对应mapper接口的完全限定名。

    (2)Mapper映射文件忘记在核心配置文件中注册了。

    (3)注册的路径也可能写错。

"      本文由职坐标整理发布,学习更多的相关知识,请关注职坐标IT知识库!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 2
看完这篇文章有何感觉?已经有3人表态,33%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程