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
<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>
複製代碼
數據庫中大概有一萬多條記錄,時間較長
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>
複製代碼
運行結果