MyBatis 映射器

ps 一個用於生成MyBatis配置文件的插件 mybatis-generator 使用方法呢, 是加入maven插件中 而後執行相關命令能夠實現自動生成MyBatis配置文件html

自動映射

首先編寫無參的javabeanjava

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;
    }
}

複製代碼

而後建立數據庫

此次使用的是開發環境建立的數據庫 數據庫類型以下 sql

1554124784598.remmina-2019-4-13-20-0-18.273289-1

編寫映射文件

<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層接口apache

/**
     * @param id
     * @return
     */
    public Role getRole(int id);
複製代碼

傳遞多個參數

若是須要傳遞多個參數,使用MyBatis提供的Map接口bash

首先新增長DAO層接口session

/**
     * 查詢Map
     * @param params
     * @return
     */
    public List<Role> findRoleByteMap(Map<String, String> params);
複製代碼

接着,書寫映射文件,傳遞參數mybatis

<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類app

<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>
複製代碼

如今的完整文件maven

<?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>

複製代碼

數據庫中大概有一萬多條記錄,時間較長

2019-04-14-05-04-05----

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>


複製代碼

運行結果

2019-04-14-07-03-44----

相關文章
相關標籤/搜索