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"
        "http://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"
        "http://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=密码

  可能遇到的错误:

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

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

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

 

原文地址:https://www.cnblogs.com/wanghj-15/p/11186171.html

时间: 2024-08-29 11:47:03

SQL映射器Mapper接口(MyBatis)的相关文章

Java Persistence with MyBatis 3(中文版) 第四章 使用注解配置SQL映射器

在上一章,我们看到了我们是怎样在映射器Mapper XML配置文件中配置映射语句的.MyBatis也支持使用注解来配置映射语句.当我们使用基于注解的映射器接口时,我们不再需要在XML配置文件中配置了.如果你愿意,你也可以同时使用基于XML和基于注解的映射语句. 本章将涵盖以下话题: l 在映射器Mapper接口上使用注解 l 映射语句 @Insert,@Update,@Delete,@SeelctStatements l 结果映射 一对一映射 一对多映射 l 动态SQL @SelectProvi

Java Persistence with MyBatis 3(中文版) 第三章 使用XML配置SQL映射器

关系型数据库和SQL是经受时间考验和验证的数据存储机制.和其他的ORM 框架如Hibernate不同,MyBatis鼓励开发者可以直接使用数据库,而不是将其对开发者隐藏,因为这样可以充分发挥数据库服务器所提供的SQL语句的巨大威力.与此同时,MyBaits消除了书写大量冗余代码的痛苦,它使使用SQL更容易. 在代码里直接嵌套SQL语句是很差的编码实践,并且维护起来困难.MyBaits使用了映射器配置文件或注解来配置SQL语句.在本章中,我们会看到具体怎样使用映射器配置文件来配置映射SQL语句.

小峰mybatis(5)mybatis使用注解配置sql映射器--动态sql

一.使用注解配置映射器 动态sql: 用的并不是很多,了解下: Student.java 实体bean: package com.cy.model; public class Student{ private Integer id; private String name; private Integer age; public Student(){ } public Student(String name, Integer age){ this.name = name; this.age =

小峰mybatis(4)mybatis使用注解配置sql映射器

主流开发还是使用xml来配置:使用注解配置比较快,但是不支持所有功能:有些功能还是得用配置文件: 一.基本映射语句: @Inert @Update @Delete @Select 二.结果集映射语句 项目结够: Student.java model实体类: package com.cy.model; public class Student{ private Integer id; private String name; private Integer age; public Student(

Spring集成MyBatis的使用-使用Mapper映射器

Spring集成MyBatis使用 前面复习MyBatis时,发现在测试时,需要手动创建sqlSessionFactory,Spring将帮忙自动创建sqlSessionFactory,并且将自动扫描Mapper映射器 (1)集成步骤 step1 导包: spring-webmvc, mybatis, mybatis-spring, dbcp, ojdbc, spring-jdbc, junit, mysql相关等 <dependencies> <!--导入junit测试包-->

(八)mybatis之映射器

映射器 映射器是由Java接口和XML文件(或注解)共同组成的,作用如下: ①   定义参数类型. ②   描述缓存. ③   描述SQL语句. ④   定义查询结果和POJO的映射关系. 以下用两种方式进行Mapper的实现. 1. XML文件配置方式实现Mapper 第一步:给出Java接口. package com.mapper; import com.entity.User; public interface UserMapper(){ public User getUser(int i

mybatis的简单使用调用mapper接口

mybatis 是apache下的一个面向sql编程的半自动化的ORM持久层的框架.特点:面向sql编程,达到高性能的使用目的. 下面是简单使用 现导入jar包,只有mybatis和数据库驱动包(这里用的是mysql的驱动包)是必须的,其余是日志需要的包 db.properties配置连接池的配置文件 1 jdbc.driverClassName=com.mysql.jdbc.Driver 2 jdbc.url=jdbc:mysql://localhost:3306/mybatis 3 jdbc

MyBatis中SQL映射的XML文件

Mappers 既然MyBatis的行为已经由上篇介绍的MyBatis配置文件的元素配置完了,我们现在就要定义SQL映射语句了.但是,首先我们需要告诉MyBatis到哪里去找到这些配置.Java在这方面没有提供一个很好的方法,所以最佳的方式是告诉MyBatis去哪里去找映射文件.你可以使用相对于类路径的资源引用,或者字符表示,或url应用的完全限定名. MyBatis架构中,POJOs对象对象一个映射器接口,映射器接口和对应的SQL映射的XML在同一包下. SQL映射的XML文件 MyBatis

mybatis 映射器

1 映射器 Mapper 是由java接口和 XML 文件共同组成.它的作用如下 1)定义参数类型 2)描述缓存 3)描述 SQL 语句 4)定义查询结果和POJO的映射关系 2 SqlSessionFactoryBuilder 主要作用是用来生成 SqlSessionFactory,生成以后就不用了,所以它的生命周期只存在于方法局部. 3 SqlSessionFactory 的作用是创建SqlSession,而 SqlSession 就是一个会话,相当于是JDBC的 Connection 对象