2018-07-29

1.什么是mapper代理接口方式?

MyBatis之mapper代理方式。mapper代理使用的是JDK的动态代理策略

2.使用mapper代理方式有什么好处

使用这种方式可以不用写接口的实现类,免除了复杂的方法,使得代码更加清晰易懂

按照以前的DAO 开发模式 ,我们有一个写了一个接口类 然后需要写这接口的实现类

现在就是MyBATis 通过帮我们生成了这个实现了。而我们要做的就是配置好这实现类的 XML。

也就是说 使用了mybatis 开发中不需要写数据库的实现类 而只要实现接口 所有的实现又mybatis的配置文件去生成。

3.使用mappper代理方式要遵循什么规范?

1.接口名要和对应的映射文件的名称相同(只是后缀名不同)

2.接口的全限定名要和mapper映射文件的namespace 一致

3.接口中的方法名要和mapper映射文件中的唯一标识的id相同

4.要在同一目录下面(可以创建一个源文件夹,然后创建一个和src目录下面相同的包,已达到xml和接口分离的作用)

5: 接口的方法返回类型和mapper 映射文件返回的类型一致

6 接口的方法参数类型和mapper 映射文件输入类型要一致

For Example

1.建立一个web项目

2.在webRoot文件夹下面lib中导入mybatis的jar、log4j的jar(日志文件)、mysql-connection的jar(mysql连接数据库的jar包),使用什么数据库就导入什么jar包

注意:要添加到构建路径中才能够被使用

3.创建一个源文件夹用于存放mybatis的主配置文件和接口的映射文件(要创建和src目录下面的接口的包名相同)、还有properties文件(键值对文件)

注意:配置文件如果要用于配置数据库一定要写正确不能多加空格,字符,写得颠三倒四

  如com.mysql.jdbc.Driver 不能写成com.jdbc.mysql.Driver

  也不能多加一个点,少一个点

config|--com.imp

|--main_config.xml

    |--main_config.properties

 driver=com.mysql.jdbc.Driver
url=jdbc\:mysql\://localhost\:3306/myweb?characterEncoding\=utf-8&&useSSL=false
username=root
password=root
<?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>
<properties resource="main_config.properties"></properties>
<typeAliases>
<package name="com.pojo"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<mappers>
<package name="com.imp"/>
</mappers>
</configuration>

main_config.xml

4.写一个对应数据库的pojo类(com.pojo)

package com.pojo;

public class Students {
/**
* 学号 姓名 年龄
*/
private int id;
private String name;
private int age;
/**
* 默然的构造函数
*/
public Students() {
super();
// TODO 自动生成的构造函数存根
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
} }

Students.java

5.写一个接口类(com.imp)

 package com.imp;

 import java.util.List;

 import com.pojo.Students;

 public interface IStudents {

     List<Students> selectAll();

 }

IStudents.java

6.写一个和接口名相同的映射文件(xml)(com.imp)

 <?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 namespace="com.imp.IStudents">
<select id="selectAll" resultType="students">
select * from students
</select> </mapper>

IStudents.xml

7.写一个工具类(com.util)

 package com.util;

 import java.io.IOException;
import java.io.InputStream; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class DataBaseManager { /**
* 使用的是静态方法
* @return
* @throws IOException
*/
public static SqlSession getSqlSession() throws IOException{
//加载配置文件
InputStream inputStream = Resources.getResourceAsStream("main_config.xml");
//创建会话工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//开启会话
SqlSession sqlSession = sqlSessionFactory.openSession(); return sqlSession;
} }

DataBaseManager .java

8.写一个测试类

 package com.test;

 import java.io.IOException;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import com.imp.IStudents;
import com.pojo.Students;
import com.util.DataBaseManager; public class TestBasic {
@Test
public void testSelectAll() throws IOException{
//获取sqlsession
SqlSession sqlSession = DataBaseManager.getSqlSession();
System.out.println(sqlSession); IStudents mapper =sqlSession.getMapper(IStudents.class);
List<Students> all = mapper.selectAll();
for (Students students : all) {
System.out.println(students.getId()+students.getName()+students.getAge());
} }
}

TestBasic .java

9.最后生成的目录如下图所示

mybatis的mapper接口代理使用的三个规范的更多相关文章

  1. JavaWeb_(Mybatis框架)Mapper动态代理开发_三

    系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...

  2. Mybatis学习(2)原始dao开发和使用mapper接口代理开发

    基础知识: 1).SqlSessionFactoryBuilder: 通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory.将SqlSessionFact ...

  3. 5.7 Liquibase:与具体数据库独立的追踪、管理和应用数据库Scheme变化的工具。-mybatis-generator将数据库表反向生成对应的实体类及基于mybatis的mapper接口和xml映射文件(类似代码生成器)

    一. liquibase 使用说明 功能概述:通过xml文件规范化维护数据库表结构及初始化数据. 1.配置不同环境下的数据库信息 (1)创建不同环境的数据库. (2)在resource/liquiba ...

  4. MyBatis 中 Mapper 接口的使用原理

    MyBatis 中 Mapper 接口的使用原理 MyBatis 3 推荐使用 Mapper 接口的方式来执行 xml 配置中的 SQL,用起来很方便,也很灵活.在方便之余,想了解一下这是如何实现的, ...

  5. mybatis从mapper接口跳转到相应的xml文件的eclipse插件

    mybatis从mapper接口跳转到相应的xml文件的eclipse插件 前提条件 开发软件 eclipse 使用框架 mybatis 为了方便阅读源码,项目使用mybatis的时候,方便从mapp ...

  6. Mybatis的Mapper接口方法不能重载

    今天给项目的数据字典查询添加通用方法,发现里边已经有了一个查询所有数据字典的方法 List<Dict> selectDictList(); 但我想设置的方法是根据数据字典的code查询出所 ...

  7. MyBatis使用Mapper动态代理开发Dao层

    开发规范 Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同原始Dao接口实现类方法. Mappe ...

  8. Mybatis笔记 - Mapper动态代理

    使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper接口开发方法. Mapper接口开发方式是基于入门程序的基础上,对 控制程序 进行分层开发,程序员只需要 编写mappe ...

  9. Mybatis(五)Spring整合Mybatis之mapper动态代理开发

    要操作的数据库: IDEA创建的Java工程,目录结构如下: 一.导包 1.spring的jar包 2.Mybatis的jar包 3.Spring+mybatis的整合包. 4.Mysql的数据库驱动 ...

随机推荐

  1. java ---日期的格式化

    import java.util.Date; import java.util.Scanner; import java.text.SimpleDateFormat; import java.util ...

  2. 九大排序算法的Java实现

    1.冒泡排序 package Sort; import java.util.Arrays; public class BubbleSort { public static void main(Stri ...

  3. WP Super Cache+七牛云配置CDN加速,让你的网站秒开

    CDN加速网站是几乎所有的站长都在考虑的问题,CDN,全称是Content Delivery Network,即内容分发网络.所谓CDN加速,通俗的来说就是把原服务器上数据复制到其他服务器上,用户访问 ...

  4. Python进程-实现

    multiprocessing模块介绍 python中的多线程无法利用CPU资源,在python中大部分计算密集型任务使用多进程.如果想要充分地使用多核CPU的资源(os.cpu_count()查看) ...

  5. VS调试再次遭遇“应用程序中断模式”问题,附解决方法

    最近重构某项目过程中发现的,有同事反馈调试不正常,很久以前也发生过,虽然搜索了一下找到解决方案,但个人觉得还是有必要再记录一下. 调试某CS结构的应用程序,大致效果可以看下图: 我们组最终解决方案是: ...

  6. mac下利用Breakpad的dump文件进行调试

    一.前情回顾 最近把公司的一个视频处理程序更新了一个版本,准备提交测试的发现了崩溃的情况.这个程序采用Qt和ffmpeg技术栈开发,主要用于对视频进行渲染拼接处理,在Windows和mac两个平台同时 ...

  7. linux小白成长之路2————yum安装火狐浏览器

    1.使用终端: CentOS左上角:应用程序>收藏>终端  2.使用root权限安装软件: 输入:sudo -i 输入密码(上篇安装linux虚拟机时设定的登录密码,也是超级管理员密码) ...

  8. 爬虫(scrapy中的ImagesPipeline)

    在使用ImagesPipeline对妹子图网站图片进行下载时,遇到302错误,页面被强制跳转. 解决办法如下: # -*- coding: utf-8 -*- # Define your item p ...

  9. 2018最新版本Sublime Text3注册码(仅供测试交流使用)

    -– BEGIN LICENSE -– TwitterInc 200 User License EA7E-890007 1D77F72E 390CDD93 4DCBA022 FAF60790 61AA ...

  10. 用 Go 编写一个简单的 WebSocket 推送服务

    用 Go 编写一个简单的 WebSocket 推送服务 本文中代码可以在 github.com/alfred-zhong/wserver 获取. 背景 最近拿到需求要在网页上展示报警信息.以往报警信息 ...