zoukankan      html  css  js  c++  java
  • 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;
        }
    }
    
    

    然后创建数据库

    这次使用的是开发环境创建的数据库
    数据库类型如下
    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层接口

        /**
         * @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>
    
    

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

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

    在无知的道路上缓步前行
  • 相关阅读:
    PHP对象的遍历
    PHP对象的复制
    PHP面向对象之类的自动加载
    PHP面向对象之接口
    PHP面向对象之重载
    PHP面向对象之抽象类,抽象方法
    PHP面向对象之final关键字
    PHP面向对象之重写
    使用python操作word
    vc++使用cookie登录网站
  • 原文地址:https://www.cnblogs.com/melovemingming/p/10726406.html
Copyright © 2011-2022 走看看