当前位置: 首页 > Web前端 > HTML5

MyBatis 映射器

时间:2023-04-05 16:08:42 HTML5

ps 一个用于生成MyBatis配置文件的插件 mybatis-generator使用方法呢, 是加入maven插件中 然后执行相关命令可以实现自动生成MyBatis配置文件自动映射首先编写无参的javabeanpackage 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; }}然后创建数据库这次使用的是开发环境创建的数据库数据库类型如下编写映射文件<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>数据库中大概有一万多条记录,时间较长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>运行结果