首页 后端开发 php教程 Mybatis的使用(mapper接口方式)

Mybatis的使用(mapper接口方式)

Mar 06, 2018 pm 04:15 PM
mapper mybatis 接口

使用 Mapper 接口的方式,不用写接口实现类,直接完成数据库操作,简单方便。 为了帮助大家更好地学习Mapper接口,小编总结了一些关于Mapper接口的知识点,希望能够帮助到有需要的人。

先上结构图:
这里写图片描述
下面是具体的代码:
一、User.java

实体类中的的get/set方法以及构造方法及toString方法就不贴了
public class User {    
    private int id;    
    private String name;    
    private int age;
}
登录后复制

二、UserMapper.java
这是mapper接口,面向接口编程的思想还是很重要的。也是本次博文最重要的部分。

接口定义有以下特点:

  1. Mapper 接口方法名和 UserMapper.xml 中定义的每个 sql 的 id 同名。

  2. Mapper 接口方法的输入参数类型和 UserMapper.xml 中定义的 sql 的parameterType 类型相同。

  3. Mapper 接口的返回类型和 UserMapper.xml 中定义的 sql 的 resultType 类型相同

注意创建表的方法,有注解@Param

package com.mi.mapper;import org.apache.ibatis.annotations.Param;import com.mi.beans.User;public interface UserMapper {
    void createTable (@Param("tableName") String tableName);    void add(User user);    void del(int id);    void update(User user);
    User getUser(int id);
    User[] list();
}
登录后复制
登录后复制

三、userMappers.xml
这里需要注意
1.xml文件的namespace要写成mapper接口的路径,像下面.

<mapper namespace="com.mi.mapper.UserMapper">
登录后复制
登录后复制

2.在写动态创建表的语句时,要写成${tableName},而不是#{}. 点击查看两者的区别

create table ${tableName}...
登录后复制
登录后复制

下面是完整代码:包括创建表、CRUD

<?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,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的 -->&lt;mapper namespace=&quot;com.mi.mapper.UserMapper&quot;&gt;
    <!-- 创建表 -->
    <update id="createTable" parameterType="String">
        create table ${tableName} (id int primary key auto_increment,name varchar(20),age int)    </update>
    <!-- 添加数据 -->
    <insert id="add" parameterType="com.mi.beans.User">
        insert into t_user(name,age) value(#{name},#{age})    </insert>
    <!-- 删除数据 -->
    <delete id="del" parameterType="int">
        delete from t_user where id = #{id}    </delete>
    <!-- 修改数据 -->
    <update id="update" parameterType="com.mi.beans.User">
        update t_user set name=#{name},age=#{age} where id=#{id}    </update>
    <!--根据id查询得到一个user对象-->
    <select id="getUser" parameterType="int" 
        resultType="com.mi.beans.User">
        select * from t_user where id=#{id}    </select>
    <!-- 查询所有的用户 -->
    <select id="list" resultType="com.mi.beans.User">
        select * from t_user;       
    </select></mapper>
登录后复制

四、conf.xml
这里需要配置两个东西

  • 配置JDBC的连接

  • 配置mapper.xml

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
 &lt;!DOCTYPE configuration PUBLIC &quot;-//mybatis.org//DTD Config 3.0//EN&quot;
  &quot;http://mybatis.org/dtd/mybatis-3-config.dtd&quot;&gt;&lt;configuration&gt;
    &lt;environments default=&quot;development&quot;&gt;
        &lt;environment id=&quot;development&quot;&gt;
            &lt;transactionManager type=&quot;JDBC&quot; /&gt;
            &lt;!-- 配置数据库连接信息 --&gt;
            &lt;dataSource type=&quot;POOLED&quot;&gt;
                &lt;property name=&quot;driver&quot; value=&quot;com.mysql.jdbc.Driver&quot; /&gt;
                &lt;property name=&quot;url&quot; value=&quot;jdbc:mysql://localhost:3306/mybatis&quot; /&gt;
                &lt;property name=&quot;username&quot; value=&quot;root&quot; /&gt;
                &lt;property name=&quot;password&quot; value=&quot;root&quot; /&gt;
            &lt;/dataSource&gt;
        &lt;/environment&gt;
    &lt;/environments&gt;
        &lt;!-- 注册userMapper.xml文件 --&gt;
    &lt;mappers&gt;
        &lt;mapper resource=&quot;com/mi/mapping/userMappers.xml&quot;/&gt;
    &lt;/mappers&gt;&lt;/configuration&gt;
登录后复制

五、SqlSessionUtil.java
我在这里写了一个工具类,主要目的是要拿到sqlSession,因为之后每次操作数据库都需要写一遍,所以进行一次封装.

package com.mi.util;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 SqlSessionUtil 
{
      public static SqlSession getSqlSession() throws Exception{
      String resource = &quot;conf.xml&quot;;
      //使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
      InputStream is = Resources.getResourceAsStream(resource);
      //构建sqlSession的工厂
      SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
      //创建能执行映射文件中sql的sqlSession
      SqlSession sqlSession = sessionFactory.openSession();
      return sqlSession;
   }
}
登录后复制

六、MyTest.java
这是测试类,通过上面的工具类sqlSession,最关键的是下面这句

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
登录后复制
登录后复制

MyBatis通过动态代理的方式实现mapper接口,之后就好办了,执行接口中准备好的方法就可以了。
注意不要忘了sqlSession.commit()和sqlSession.close().否则在执行过程中虽然不会报错,但是数据库中是不会有变化的.

这里我只执行了创建表的方法.
package com.mi.test;import org.apache.ibatis.session.SqlSession;import com.mi.beans.User;import com.mi.mapper.UserMapper;
import com.mi.util.SqlSessionUtil;public class MyTest {
    public static void main(String[] args) throws Exception {
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        userMapper.createTable(&quot;t_user&quot;);
        sqlSession.commit();
        sqlSession.close();
    }
}
登录后复制
登录后复制

使用 Mapper 接口的方式,不用写接口实现类,直接完成数据库操作,简单方便。
先上结构图:
这里写图片描述
下面是具体的代码:
一、User.java

实体类中的的get/set方法以及构造方法及toString方法就不贴了public class User {    private int id;    private String name;    private int age;
登录后复制

二、UserMapper.java
这是mapper接口,面向接口编程的思想还是很重要的。也是本次博文最重要的部分。

接口定义有以下特点:

  1. Mapper 接口方法名和 UserMapper.xml 中定义的每个 sql 的 id 同名。

  2. Mapper 接口方法的输入参数类型和 UserMapper.xml 中定义的 sql 的parameterType 类型相同。

  3. Mapper 接口的返回类型和 UserMapper.xml 中定义的 sql 的 resultType 类型相同

注意创建表的方法,有注解@Param

package com.mi.mapper;import org.apache.ibatis.annotations.Param;import com.mi.beans.User;public interface UserMapper {
    void createTable (@Param(&quot;tableName&quot;) String tableName);    void add(User user);    void del(int id);    void update(User user);
    User getUser(int id);
    User[] list();
}
登录后复制
登录后复制

三、userMappers.xml
这里需要注意
1.xml文件的namespace要写成mapper接口的路径,像下面.

&lt;mapper namespace=&quot;com.mi.mapper.UserMapper&quot;&gt;
登录后复制
登录后复制

2.在写动态创建表的语句时,要写成${tableName},而不是#{}. 点击查看两者的区别

create table ${tableName}...
登录后复制
登录后复制

下面是完整代码:包括创建表、CRUD

<?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,namespace的值习惯上设置成包名+sql映射文件名,
 这样就能够保证namespace的值是唯一的 -->&lt;mapper namespace=&quot;com.mi.mapper.UserMapper&quot;&gt;
    <!-- 创建表 -->
    <update id="createTable" parameterType="String">
        create table ${tableName} (id int primary key auto_increment,name varchar(20),age int)    
    </update>
    <!-- 添加数据 -->
    <insert id="add" parameterType="com.mi.beans.User">
        insert into t_user(name,age) value(#{name},#{age})    
    </insert>
    <!-- 删除数据 -->
    <delete id="del" parameterType="int">
        delete from t_user where id = #{id}
     </delete>
    <!-- 修改数据 -->
    <update id="update" parameterType="com.mi.beans.User">
        update t_user set name=#{name},age=#{age} where id=#{id}    
    </update>
    <!--根据id查询得到一个user对象-->
    <select id="getUser" parameterType="int" 
        resultType="com.mi.beans.User">
        select * from t_user where id=#{id}    
    </select>
    <!-- 查询所有的用户 -->
    <select id="list" resultType="com.mi.beans.User">
        select * from t_user;       
    </select></mapper>
登录后复制

四、conf.xml
这里需要配置两个东西

  • 配置JDBC的连接

  • 配置mapper.xml

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
 &lt;!DOCTYPE configuration PUBLIC &quot;-//mybatis.org//DTD Config 3.0//EN&quot;
  &quot;http://mybatis.org/dtd/mybatis-3-config.dtd&quot;&gt;&lt;configuration&gt;
    &lt;environments default=&quot;development&quot;&gt;
        &lt;environment id=&quot;development&quot;&gt;
            &lt;transactionManager type=&quot;JDBC&quot; /&gt;
            &lt;!-- 配置数据库连接信息 --&gt;
            &lt;dataSource type=&quot;POOLED&quot;&gt;
                &lt;property name=&quot;driver&quot; value=&quot;com.mysql.jdbc.Driver&quot; /&gt;
                &lt;property name=&quot;url&quot; value=&quot;jdbc:mysql://localhost:3306/mybatis&quot; /&gt;
                &lt;property name=&quot;username&quot; value=&quot;root&quot; /&gt;
                &lt;property name=&quot;password&quot; value=&quot;root&quot; /&gt;
            &lt;/dataSource&gt;
        &lt;/environment&gt;
    &lt;/environments&gt;
        &lt;!-- 注册userMapper.xml文件      --&gt;
    &lt;mappers&gt;
        &lt;mapper resource=&quot;com/mi/mapping/userMappers.xml&quot;/&gt;
    &lt;/mappers&gt;&lt;/configuration&gt;
登录后复制

五、SqlSessionUtil.java
我在这里写了一个工具类,主要目的是要拿到sqlSession,因为之后每次操作数据库都需要写一遍,所以进行一次封装.

package com.mi.util;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 SqlSessionUtil 
{
      public static SqlSession getSqlSession() throws Exception{
        String resource = &quot;conf.xml&quot;;
         //使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
        InputStream is = Resources.getResourceAsStream(resource);
        //构建sqlSession的工厂
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
      //创建能执行映射文件中sql的sqlSession
        SqlSession sqlSession = sessionFactory.openSession();
        return sqlSession;
    }
}
登录后复制

六、MyTest.java
这是测试类,通过上面的工具类sqlSession,最关键的是下面这句

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
登录后复制
登录后复制

MyBatis通过动态代理的方式实现mapper接口,之后就好办了,执行接口中准备好的方法就可以了。
注意不要忘了sqlSession.commit()和sqlSession.close().否则在执行过程中虽然不会报错,但是数据库中是不会有变化的.

这里我只执行了创建表的方法.
package com.mi.test;import org.apache.ibatis.session.SqlSession;import com.mi.beans.User;import com.mi.mapper.UserMapper;
import com.mi.util.SqlSessionUtil;public class MyTest {
    public static void main(String[] args) throws Exception {
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        userMapper.createTable(&quot;t_user&quot;);
        sqlSession.commit();
        sqlSession.close();
    }
}
登录后复制
登录后复制

相关推荐:

mybatis分页插件pageHelper实例详解

Oracle结合Mybatis实现取表的10条数据

Spring Boot 、 Mybatis 、 Redis快速搭建现代化Web项目


以上是Mybatis的使用(mapper接口方式)的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章标签

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

详解MyBatis动态SQL标签中的Set标签功能 详解MyBatis动态SQL标签中的Set标签功能 Feb 26, 2024 pm 07:48 PM

详解MyBatis动态SQL标签中的Set标签功能

电脑主板内部接口都有什么 推荐电脑主板内部接口介绍 电脑主板内部接口都有什么 推荐电脑主板内部接口介绍 Mar 12, 2024 pm 04:34 PM

电脑主板内部接口都有什么 推荐电脑主板内部接口介绍

解析MyBatis的缓存机制:比较一级缓存和二级缓存的特点和用法 解析MyBatis的缓存机制:比较一级缓存和二级缓存的特点和用法 Feb 25, 2024 pm 12:30 PM

解析MyBatis的缓存机制:比较一级缓存和二级缓存的特点和用法

Go语言中常见的编程范式和设计模式 Go语言中常见的编程范式和设计模式 Mar 04, 2024 pm 06:06 PM

Go语言中常见的编程范式和设计模式

使用MyBatis中的小于等于转义字符方法是什么? 使用MyBatis中的小于等于转义字符方法是什么? Feb 24, 2024 am 11:12 AM

使用MyBatis中的小于等于转义字符方法是什么?

PHP接口简介及其定义方式 PHP接口简介及其定义方式 Mar 23, 2024 am 09:00 AM

PHP接口简介及其定义方式

NotImplementedError()的处理方案 NotImplementedError()的处理方案 Mar 01, 2024 pm 03:10 PM

NotImplementedError()的处理方案

透视鸿蒙系统:功能实测与使用感受 透视鸿蒙系统:功能实测与使用感受 Mar 23, 2024 am 10:45 AM

透视鸿蒙系统:功能实测与使用感受

See all articles