MyBatis 映射器

ps 一个用于生成MyBatis配置文件的插件 mybatis-generator

使用方法呢, 是加入maven插件中 然后执行相关命令可以实现自动生成MyBatis配置文件

自动映射

首先编写无参的javabean

package com.ming.MyBatis.POJO;

/**
 * @author ming
 */
public class Role {
    private int id;
    private String roleName;
    private String note;
    
    public Role(){

    }

    /**
     * @param id 
     */
    public void setId(int id) {
        this.id = id;
    }

    /**
     * @param roleName 
     */
    public void setRole_name(String roleName) {
        this.roleName = roleName;
    }

    /**
     * @param note 
     */
    public void setNote(String note) {
        this.note = note;
    }

    /**
     * @return 
     */
    public int getId() {
        return id;
    }

    /**
     * @return 
     */
    public String getRoleName() {
        return roleName;
    }

    /**
     * @return 
     */
    public String getNote() {
        return note;
    }
}

然后创建数据库

这次使用的是开发环境创建的数据库

数据库类型如下

MyBatis 映射器

编写映射文件

<mapper namespace="com.ming.MyBatis.POJO.RoleMapper">
	<select id="getRole" parameterType="int" resultType="com.ming.MyBatis.POJO.Role">
		SELECT id, role_name as roleName, note FROM t_role WHERE id = #{id}
	</select>
	
</mapper>

此时结果会自动映射到VO对象中,根据VO对象自动调用set方法,然后进行赋值操作

此时DAO层接口

/**
     * @param id
     * @return
     */
    public Role getRole(int id);

传递多个参数

如果需要传递多个参数,使用MyBatis提供的Map接口

首先新增加DAO层接口

/**
     * 查询Map
     * @param params
     * @return
     */
    public List<Role> findRoleByteMap(Map<String, String> params);

接着,书写映射文件,传递参数

<select id="findRoleByteMap" parameterType="map" resultMap="roleMap">
		SELECT id, role_name, note FROM t_role
		WHERE role_name LIKE CONCAT('%', #{roleName}, '%')
		AND note LIKE CONCAT('%', #{note}, '%')
	</select>

这里呢,定义了一个结果集

对于返回的数据,使用typehand进行拦截,将会调用自定义别名的role类

<resultMap type="role" id="roleMap">
		<!-- id为主键映射关系 其中数据库中的id为主键 -->
		<id column="id" property="id" javaType="int" jdbcType="INTEGER"/>
		<!-- result为其他基本数据类型和实体类之间的映射 映射关系为role_name 到 roleName之间的映射 数据类型为string到VARCHAR之间的映射关系 -->
		<result column="role_name" property="roleName" javaType="string" jdbcType="VARCHAR"/>
		<!-- 这里使用typeHandler表示遇到此处理集的时候,将会执行com.ming.MyBatis.StringTypeHandler -->
		<result column="note" property="note" typeHandler="com.ming.MyBatis.StringTypeHandler"/>
	</resultMap>

现在的完整文件

<?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.ming.MyBatis.POJO.RoleMapper">
	<resultMap type="role" id="roleMap">
		<!-- id为主键映射关系 其中数据库中的id为主键 -->
		<id column="id" property="id" javaType="int" jdbcType="INTEGER"/>
		<!-- result为其他基本数据类型和实体类之间的映射 映射关系为role_name 到 roleName之间的映射 数据类型为string到VARCHAR之间的映射关系 -->
		<result column="role_name" property="roleName" javaType="string" jdbcType="VARCHAR"/>
		<!-- 这里使用typeHandler表示遇到此处理集的时候,将会执行com.ming.MyBatis.StringTypeHandler -->
		<result column="note" property="note" typeHandler="com.ming.MyBatis.StringTypeHandler"/>
	</resultMap>
	
	<select id="getRole" parameterType="int" resultType="com.ming.MyBatis.POJO.Role">
		SELECT id, role_name as roleName, note FROM t_role WHERE id = #{id}
	</select>
	
	<select id="findRoleByteMap" parameterType="map" resultMap="roleMap">
		SELECT id, role_name, note FROM t_role
		WHERE role_name LIKE CONCAT('%', #{roleName}, '%')
		AND note LIKE CONCAT('%', #{note}, '%')
	</select>
</mapper>
<?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="db.properties"/>
	<!-- 定义别名 -->
	<typeAliases>
		<typeAlias type="com.ming.MyBatis.POJO.Role" alias="role"/>
	</typeAliases>
	
	<!-- 自定义数据处理 -->
	<typeHandlers>
		<typeHandler jdbcType="VARCHAR" javaType="string" handler="com.ming.MyBatis.StringTypeHandler"/>
	</typeHandlers>
	<!-- 定义数据库信息 -->
	<environments default="development">
		<environment id="development">
			<!-- jdbc事物管理 -->
			<transactionManager type="JDBC"/>
			<!-- 数据库链接信息 -->
			<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>
		<mapper resource="RoleMapper.xml"/>
	</mappers>
</configuration>

书写结果展示

<%@ page import="org.apache.ibatis.session.SqlSession" %>
<%@ page import="com.ming.Util.SqlSessionFactoryUtil" %>
<%@ page import="com.ming.MyBatis.POJO.RoleMapper" %>
<%@ page import="com.ming.MyBatis.POJO.Role" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.List" %>
<%@ page import="javax.swing.text.html.HTMLDocument" %>
<%@ page import="java.util.Iterator" %>
<html>
<body>
<h2>Hello World!</h2>

<%
    long startTime = System.currentTimeMillis(); //获取开始时间
    SqlSession sqlSession = null;
    List<Role> role = null;
    for(int i = 0; i < 10; i++) {
        try {
            sqlSession = SqlSessionFactoryUtil.openSqlSesion();
            RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);
            Map<String, String> paramsMap = new HashMap<String, String>();
            paramsMap.put("roleName", "name");
            paramsMap.put("note", "note");
            role = roleMapper.findRoleByteMap(paramsMap);
            sqlSession.commit();
        } catch (Exception e) {
            e.printStackTrace();
            sqlSession.rollback();
        } finally {
            if (sqlSession != null) {
                sqlSession.close();
            }
        }
    }
    long endTime = System.currentTimeMillis(); //获取结束时间

%>

<%
    Iterator iterator = role.iterator();
    while(iterator.hasNext()){
        %>
            <%=((Role)iterator.next()).getNote()%>

        <%
    }
%>
</body>
</html>

数据库中大概有一万多条记录,时间较长

MyBatis 映射器

ps 一万多条list担心内存

此时可以在此处输出查询日志,用于进行分析

注解传递参数

使用param注解传递参数

新建一个DAO接口

/**
     * @param roleName 
     * @param note
     * @return
     */
    public List<Role> findRoleByteMap1(@Param("roleName") String roleName, @Param("note") String note);

再次编写映射文件,对DAO层和SQL语句进行映射配置

<select id="findRoleByteMap1" resultMap="roleMap">
		SELECT id, role_name, note FROM t_role
		WHERE role_name LIKE CONCAT('%', #{roleName}, '%')
		AND note LIKE CONCAT('%', #{note}, '%')
	</select>

再次编写展示层

<%@ page import="org.apache.ibatis.session.SqlSession" %>
<%@ page import="com.ming.Util.SqlSessionFactoryUtil" %>
<%@ page import="com.ming.MyBatis.POJO.RoleMapper" %>
<%@ page import="com.ming.MyBatis.POJO.Role" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.List" %>
<%@ page import="javax.swing.text.html.HTMLDocument" %>
<%@ page import="java.util.Iterator" %>
<html>
<body>
<h2>Hello World!</h2>

<%
    long startTime = System.currentTimeMillis(); //获取开始时间
    SqlSession sqlSession = null;
    List<Role> role = null;
    for(int i = 0; i < 10; i++) {
        try {
            sqlSession = SqlSessionFactoryUtil.openSqlSesion();
            RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);
            Map<String, String> paramsMap = new HashMap<String, String>();
            paramsMap.put("roleName", "name");
            paramsMap.put("note", "note");
            role = roleMapper.findRoleByteMap1("name", "note");
            sqlSession.commit();
        } catch (Exception e) {
            e.printStackTrace();
            sqlSession.rollback();
        } finally {
            if (sqlSession != null) {
                sqlSession.close();
            }
        }
    }
    long endTime = System.currentTimeMillis(); //获取结束时间

%>

<%
    Iterator iterator = role.iterator();
    while(iterator.hasNext()){
        %>
            <%=((Role)iterator.next()).getNote()%>

        <%
    }
%>
</body>
</html>

运行结果

MyBatis 映射器

原文 

https://www.iming.info/mybatis-ying-she-qi/

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » MyBatis 映射器

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址