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)注册的路径也可能写错。

 

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

  1. Mybatis基于接口注解配置SQL映射器(一)

    上文已经讲解了基于XML配置的SQL映射器,在XML配置的基础上MyBatis提供了简单的Java注解,使得我们可以不配置XML格式的Mapper文件,也能方便的编写简单的数据库操作代码. Mybat ...

  2. MyBatis 3 使用注解配置SQL映射器

    l 在映射器Mapper接口上使用注解 l 映射语句 @Insert,@Update,@Delete,@SeelctStatements l 结果映射 一对一映射 一对多映射 l 动态SQL @Sel ...

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

    关系型数据库和SQL是经受时间考验和验证的数据存储机制.和其他的ORM 框架如Hibernate不同,MyBatis鼓励开发者可以直接使用数据库,而不是将其对开发者隐藏,因为这样可以充分发挥数据库服务 ...

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

    本章将涵盖以下话题: l 在映射器Mapper接口上使用注解 l 映射语句 @Insert,@Update,@Delete,@SeelctStatements l 结果映射 一对一映射 一对多映射 l ...

  5. 使用注解配置SQL映射器

    在上一章,我们看到了我们是怎样在映射器Mapper XML配置文件中配置映射语句的.MyBatis也支持使用注解来配置映射语句.当我们使用基于注解的映射器接口时,我们不再需要在XML配置文件中配置了. ...

  6. Mybatis基于XML配置SQL映射器(二)

    Mybatis之XML注解 之前已经讲到通过 mybatis-generator 生成mapper映射接口和相关的映射配置文件: 下面我们将详细的讲解具体内容 首先我们新建映射接口文档  sysUse ...

  7. MyBatis中映射器Mapper概述

    MyBatis真正强大之处在于它的映射器.因为它异常强大并且编写相对简单,不仅比传统编写SQL语句做的更好并且能节省将近95%的代码量 XML中顶级元素汇总 cache: 给定命名空间的缓存配置 ca ...

  8. MyBatis学习笔记3--使用XML配置SQL映射器

    <resultMap type="Student" id="StudentResult"> <id property="id&quo ...

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

    一.使用注解配置映射器 动态sql: 用的并不是很多,了解下: Student.java 实体bean: package com.cy.model; public class Student{ pri ...

随机推荐

  1. (大型网站之Nginx)图解正向代理、反向代理、透明代理

    一.正向代理(Forward Proxy) 一般情况下,如果没有特别说明,代理技术默认说的是正向代理技术.关于正向代理的概念如下: 正向代理(forward)是一个位于客户端[用户A]和原始服务器(o ...

  2. IDEA控制台乱码终极解决方案

    1. 问题描述 由于本机的IDEA 2019.1出现了无法连接插件商店和Spring Boot模板的问题,就重装了了最新的IDEA 2019.2.4版本,使用了一段时间以后,没有改任何的配置,控制台的 ...

  3. Unity编辑器环境在Inspector面板中显示变量

    Serialize功能Unity3D 中提供了非常方便的功能可以帮助用户将 成员变量 在Inspector中显示,并且定义Serialize关系. 简单的说,在没有自定义Inspector的情况下所有 ...

  4. Vue 中Axios 使用

    1.安装axios npm install axios 2.在使用的地方导入 import axios from 'axios' 3.再方法中调用 sendHttp: function () { ax ...

  5. openresty开发系列28--openresty中操作mysql

    openresty开发系列28--openresty中操作mysql Mysql客户端   应用中最常使用的就是数据库了,尤其mysql数据库,那openresty lua如何操作mysql呢?   ...

  6. 二、HTTP请求

    一.测试对象:v2ex的api 文档:https:www.v2ex.com/p/7vpTEc53 api:https://www.v2ex.com/api/topic/hot.json 最热主题:相当 ...

  7. Fiddler抓包工具版面认识(一)

    Fiddler是一个蛮好用的抓包工具,可以将网络传输发送与接受的数据包进行截获.重发.编辑.转存等操作.也可以用来检测网络安全.反正好处多多,举之不尽呀!当年学习的时候也蛮费劲,一些蛮实用隐藏的小功能 ...

  8. 使用 Ninja 代替 make

    使用 Ninja 代替 make 摘自:https://www.jianshu.com/p/d118615c1943 22017.01.14 11:41:44字数 1408阅读 26336 前言 在传 ...

  9. mysql 1045

    1.sudo gedit /etc/my.cnf 2.加入 skip-grant-tables 3.直接登录,输密码时回车 mysql -u root -p 4.修改密码 use mysql; upd ...

  10. 使用Varnish为网站加速

    (1).Varnish概述 Varnish是一款高性能的开源HTTP加速器,可以有效降低web服务器的负载,提升访问速度.根据官方的说法,Varnish是一个cache型的HTTP反向代理. Varn ...