• 技术文章 >后端开发 >php教程

    Mybatis的使用(mapper接口方式)

    赶牛上岸赶牛上岸2018-03-06 16:15:00原创5417

    使用 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的值是唯一的 --><mapper namespace="com.mi.mapper.UserMapper">
        <!-- 创建表 -->
        <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
    这里需要配置两个东西

    <?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="development">
            <environment id="development">
                <transactionManager type="JDBC" />
                <!-- 配置数据库连接信息 -->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver" />
                    <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
                    <property name="username" value="root" />
                    <property name="password" value="root" />
                </dataSource>
            </environment>
        </environments>
            <!-- 注册userMapper.xml文件 -->
        <mappers>
            <mapper resource="com/mi/mapping/userMappers.xml"/>
        </mappers></configuration>

    五、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 = "conf.xml";
          //使用类加载器加载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("t_user");
            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("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的值是唯一的 --><mapper namespace="com.mi.mapper.UserMapper">
        <!-- 创建表 -->
        <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
    这里需要配置两个东西

    <?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="development">
            <environment id="development">
                <transactionManager type="JDBC" />
                <!-- 配置数据库连接信息 -->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver" />
                    <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
                    <property name="username" value="root" />
                    <property name="password" value="root" />
                </dataSource>
            </environment>
        </environments>
            <!-- 注册userMapper.xml文件      -->
        <mappers>
            <mapper resource="com/mi/mapping/userMappers.xml"/>
        </mappers></configuration>

    五、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 = "conf.xml";
             //使用类加载器加载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("t_user");
            sqlSession.commit();
            sqlSession.close();
        }
    }

    相关推荐:

    mybatis分页插件pageHelper实例详解

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

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

    以上就是Mybatis的使用(mapper接口方式)的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:Mybatis mapper 接口
    上一篇:简单的理解PHP冒泡排序 下一篇:DB2死锁的解决过程全记录
    PHP编程就业班

    相关文章推荐

    • PHP高并发实例详解之解决商品库存超卖问题• 带你聊聊PHP中的泛型之基础知识浅析• 各位大大一起来帮忙看一下!解决办法• 文件下传的若干有关问题• 请教各位测试这段代码的结果是什么

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网