Mybatis外掛和批量操作
擴充套件一個簡單的實現
@Intercepts({ @Signature(type = StatementHandler.class,method = "parameterize",args = java.sql.Statement.class) }) public class MyFirstPlugin implements Interceptor { /** * intercept:攔截 * 攔截目標物件的方法的執行 * @param invocation * @return * @throws Throwable */@Override public Object intercept(Invocation invocation) throws Throwable { System.out.println("MyFirstPlugin....interceptor:"+invocation.getMethod()); //動態改變sql執行的引數:以前1號員工,現在4號 Object target = invocation.getTarget(); System.out.println("當前攔截物件:"+target); //拿到StatementHandler====》ParameterHandler===》ParameterObject//拿到目標物件target的元資料 MetaObject metaObject = SystemMetaObject.forObject(target); Object value = metaObject.getValue("parameterHandler.parameterObject"); System.out.println("SQL語句用的引數是"+value); metaObject.setValue("parameterHandler.parameterObject",4); //執行目標方法 Object proceed = invocation.proceed();//返回執行後的返回值 return proceed; } /** * plugin:包裝目標物件——包裝:為目標物件建立一個代理類 * @param target * @return */ @Override public Object plugin(Object target) { System.out.println("MyFirstPlugin....plugin:mybatis將要包裝的物件"+target); //我們可以藉助Plugin的wrap方法來使用當前的intercept包裝我們目標物件 Object wrap = Plugin.wrap(target, this); //返回為當前target建立好的動態代理 return wrap; } /** * setProperties:將外掛註冊時的property屬性設定進來 * @param properties */ @Override public void setProperties(Properties properties) { System.out.println("外掛配置的資訊"+properties); } }
@Test public void testPlugin() throws IOException { SqlSession sqlSession = getSqlSession(); EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class); Employee e = mapper.getEmps(1); System.out.println(e); }
分頁外掛pageHelper
配置依賴
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.2</version> </dependency>
在全域性配置檔案中配置攔截器
<plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin> </plugins>
在程式碼中使用PageHelper.startPage( )即可實現分頁
@Test public void test() throws IOException { SqlSession sqlSession = getSqlSession(); EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class); PageHelper.startPage(1,5); List<Employee> employeeList = mapper.getEmps(); for (Employee e:employeeList) { System.out.println(employeeList); } }
外掛會自動查詢數量和進行分頁的sql
其他資訊
@Test public void test() throws IOException { SqlSession sqlSession = getSqlSession(); EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class); Page<Object> page = PageHelper.startPage(1, 5); List<Employee> employeeList = mapper.getEmps(); for (Employee e:employeeList) { System.out.println(employeeList); } System.out.println("當前頁碼"+page.getPageNum()); System.out.println("總記錄數"+page.getTotal()); System.out.println("每頁記錄數"+page.getPageSize()); System.out.println("總頁碼"+page.getPages()); }
還可以使用PageInfo達到更多分頁的資訊:
@Test public void test() throws IOException { SqlSession sqlSession = getSqlSession(); EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class); Page<Object> page = PageHelper.startPage(1, 5); List<Employee> employeeList = mapper.getEmps(); PageInfo info = new PageInfo(employeeList); for (Employee e:employeeList) { System.out.println(employeeList); } System.out.println("當前頁碼"+info.getPageNum()); System.out.println("總記錄數"+info.getTotal()); System.out.println("每頁記錄數"+info.getPageSize()); System.out.println("總頁碼"+info.getPages()); System.out.println("是否第一頁"+info.isIsFirstPage()); System.out.println("是否最後一頁"+info.isIsLastPage());
批量操作
可以使用<foreach>標籤做批量,但是使用這個標籤是對sql執行拼接,但是比如MySQL資料庫對於大量資料的這種處理是特別麻煩!
使用批量:
@Test public void testBatch() throws IOException { String str = "mybatis-config.xml"; Reader reader = Resources.getResourceAsReader(str); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); //可以執行批量操作sqlSession SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH); try { EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class); long start = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { mapper.addEmployee(new Employee(UUID.randomUUID().toString().substring(1,5)+"lala","1","[email protected]")); } sqlSession.commit(); long end = System.currentTimeMillis(); System.out.println("執行的時長"+(end-start)); } finally { sqlSession.close(); } }
預編譯SQL一次==》設定引數10000次==》資料庫執行(批量,1次)
非批量:
public void testBatch() throws IOException { String str = "mybatis-config.xml"; Reader reader = Resources.getResourceAsReader(str); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); //可以執行批量操作sqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); try { EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class); long start = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { mapper.addEmployee(new Employee(UUID.randomUUID().toString().substring(1,5)+"lala","1","[email protected]")); } sqlSession.commit(); long end = System.currentTimeMillis(); System.out.println("執行的時長"+(end-start)); } finally { sqlSession.close(); } }
預編譯SQL==》設定引數==》執行——呼叫多少次執行多少次
與spring整合的時候,批量:
在spring配置檔案中:
<!--配置一個可以批量執行的SqlSession--> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactoryBean"/> <constructor-arg name="executorType" value="BATCH"/> </bean>
使用:在service中
@Autowired private SqlSession sqlSession;這個就是可以使用批量的SqlSession
相關推薦
Mybatis外掛和批量操作
擴充套件一個簡單的實現 @Intercepts({ @Signature(type = StatementHandler.class,method = "parameterize",args = java.sql.Statement.class) }) pub
maven+mybatis+mybatis-generator+sql server 2005自動生成程式碼,加上自定義分頁外掛和批量插入更新外掛
第一步:準備需要的jar包。由於maven只要配置pom.xml就可以從倉庫下載jar包。因此我們首先配置pom.xml。 注意com.microsoft.sqlserver需要自己加入maven倉庫的。 <dependencies> ......
mybatis新增和批量新增
需要 開始 long 報錯 result 新增 sel mage blog 先上圖: 圖1 新增一條數據,並返回新增後的主鍵,沒問題。 圖2 批量新增,這樣寫就會報錯。剛開始我以為是要 insert into table(id,**,**) values(id,**,*
模擬admin組件自己開發stark組件之搜索和批量操作
btn 但是 相關 操作 else htm actions 函數 自己 搜索相關,搜索的本質就是從數據庫查詢出來的數據過濾 用戶自定義給出過濾條件joker.py list_display = (‘id‘,‘title‘,‘price‘,) show_add_btn =
jQuery之事件和批量操作、事件委託示例
一、常用事件 click(function(){...}) // 點選時觸發 focus(function(){...}) // 獲得焦點觸發 blur(function(){...}) // 失去焦點觸發 change(function(){...}) // 內容改變後觸發
myBatis 配置檔案 批量操作(增、刪、改)操作(資料庫 oracle 11g)
1、更新 <update id="batchUpdate" parameterType="java.util.List"> <foreach collection="list" item="item" index="index" open="
mybatis單條和批量插入返回插入成功後的主鍵id
有些時候我們在新增記錄成功後希望能直接獲取到該記錄的主鍵id值,而不需要再執行一次查詢操作。在使用mybatis作為ORM元件時,可以很方便地達到這個目的。鑑於mybatis目前已經支援xml配置和註解2種方式,所以分別給予詳細介紹。使用xml配置方式1.xml配置:<!-- 插入資料:返回記錄的id值
頁面實現全選和批量操作
全選的思路是:遍歷標籤下的type為checkbox的input標籤,改變這些checkbox的check狀態和點選全選的狀態一樣 批量操作的思路是:用js獲取記錄中的id用逗號拼接,傳到後臺執行批量操作的處理 全選js: $("#checkAll").click(fun
SSM之Mybatis查詢以及批量操作
這篇文章是在我的SpringMVC前後端資料互動基礎上把資料庫環節打通,主要涉及mybatis的查詢(傳多個引數),批量刪除,新增,修改,資料庫是MySQL,註釋很詳細,直接看程式碼即可: JSP <%@ page language="java" import="ja
Dojo 1.6 最新官方教程: 如何使用dojo.query 進行DOM查詢和批量操作
在本講義中,我們將學到DOM的查詢,以及如何使用dojo.query來方便的查詢並操作DOM節點。 難度:初學者 適用的Dojo 版本: 1.6 作者: Bryan Forbes 譯者: feijia 入門 對DOM程式設計的一個關鍵要素是能夠快速高效的獲
MyBatis插入和批量插入
注意事項: 批量插入的時候,需要注意動態SQL的寫法:即拼接出來的SQL語句和常規的SQL語句語法一致。 批量插入的時候,需要注意,在後臺要寫成user.name或者map.name,否則會出錯 插入返回主鍵需要通過entity.getId()來進行返回。 概述
SpringCloud或SpringBoot+Mybatis-Plus利用AOP+mybatis外掛實現資料操作記錄及更新對比
引文 本文主要介紹如何使用Spring AOP + mybatis外掛實現攔截資料庫操作並根據不同需求進行資料對比分析,主要適用於系統中需要對資料操作進行記錄、在更新資料時準確記錄更新欄位 核心:AOP、mybatis外掛(攔截器)、mybatis-Plus實體規範、資料對比 1、相關技術簡介 mybat
mybatis使用foreach進行批量插入和刪除操作
JD div foreach class AR tis 默認 post AC 一、批量插入 1.mapper層 int insertBatchRoleUser(@Param("lists") List<RoleUser> lists);//@Param
mybatis中使用replace into和 insert INTO … ON DUPLICATE KEY UPDATE批量操作
一、replace into <insert id=“a" useGeneratedKeys="true"> REPLACE INTO table_name (product_id,departs_date,price_value) VALUES
C# 遍歷所有的子控件和孫控件,包括容器中的,並批量操作和調用
cnblogs ati tex foreach pri int 遍歷 asc 語句 這裏要用兩個知識,一個是遞歸,一個是隊列。 //定義一個Control類型的隊列allCtrls private static Queue <Control> allCtrls
數據庫--MyBatis的(insert,update,delete)三種批量操作
tno open let 項目 sep arraylist htm 子句 由於 轉自:http://blog.csdn.net/starywx/article/details/23268465 前段時間由於項目趕期沒顧上開發過程中的性能問題,現對部分代碼進行優化的過程中發
StackExchange.Redis學習筆記(四) 事務控制和Batch批量操作
成了 pan arp 展示 關於 public 連續 因此 用戶 Redis事物 Redis命令實現事務 Redis的事物包含在multi和exec(執行)或者discard(回滾)命令中 和sql事務不同的是,Redis調用Exec只是將所有的命令變成一個單元一起執行,期
Mybatis 批量操作
name targe str public del tor rop arch 設置 轉自:https://www.cnblogs.com/liaojie970/p/5577018.html Mapper.xml: <?xml version="1.0" en
mybatis批量操作
gin bat 格式 integer tiny entity reat del case mybatis批量操作: 批量保存: <insert id="batchInsertBeneficiary" parameterType="com.api.params.Ben
Django ORM批量操作和foreign key
The objects clas length 批量操作 小寫 sql delete 不同 批量操作 Django ORM 中的批量操作 Django ORM 中的批量操作 在Hibenate中,通過批量提交SQL操作,部分地實現了數據庫的批量操作。但在Django的ORM