您现在的位置是:首页 > 文章详情

MyBatis 映射器

日期:2019-04-16点击:333

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

原文链接:https://yq.aliyun.com/articles/698691
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章