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; } }
這次使用的是開發環境創建的數據庫
數據庫類型如下
<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>
運行結果