คำนำ
บทความนี้ส่วนใหญ่บอกเล่าเรื่องราวของ Springboot ที่รวม Mybatis, Druid และ Pagehelper และใช้แหล่งข้อมูลและการแบ่งหน้าหลายแหล่ง ในหมู่พวกเขา Springboot รวม mybatis ซึ่งได้รับการอธิบายไว้ในบทความก่อนหน้านี้ดังนั้นฉันจะไม่อธิบายมากเกินไปที่นี่ โฟกัสคือวิธีการกำหนดค่า DRUID และ PAGEHELPER ในหลายแหล่งข้อมูล
บทนำ Druid และการใช้งาน
ก่อนที่จะใช้ดรูอิดมาดู Druid สั้น ๆ
Druid เป็นพูลเชื่อมต่อฐานข้อมูล Druid สามารถกล่าวได้ว่าเป็นกลุ่มการเชื่อมต่อฐานข้อมูลที่ดีที่สุดในปัจจุบัน! เป็นที่ชื่นชอบอย่างมากจากนักพัฒนาซอฟต์แวร์สำหรับคุณสมบัติที่ยอดเยี่ยมประสิทธิภาพและความสามารถในการปรับขนาด
Druid ได้ปรับใช้แอพพลิเคชั่นมากกว่า 600 รายการในอาลีบาบาและผ่านการทดสอบอย่างเข้มงวดของการปรับใช้ขนาดใหญ่ในสภาพแวดล้อมการผลิตมานานกว่าหนึ่งปี Druid เป็นกลุ่มการเชื่อมต่อฐานข้อมูลที่พัฒนาโดยอาลีบาบาที่เรียกว่าการตรวจสอบ!
ในเวลาเดียวกัน Druid ไม่ได้เป็นเพียงแค่พูลเชื่อมต่อฐานข้อมูลแกนหลักของ Druid ส่วนใหญ่มีสามส่วน:
ฟังก์ชั่นหลักของ Druid มีดังนี้:
ฉันจะไม่พูดถึงการแนะนำโปรดดูเอกสารอย่างเป็นทางการสำหรับรายละเอียด
จากนั้นเริ่มแนะนำวิธีใช้ Druid
ก่อนอื่นการพึ่งพา Maven เพียงเพิ่มขวด Druid
<Ederency> <roupId> com.alibaba </groupId> <ratifactid> druid </artifactid> <version> 1.1.8 </version>
ในแง่ของการกำหนดค่าสิ่งสำคัญคือการเพิ่มใน application.properties หรือ application.yml ดังนี้
หมายเหตุ: เนื่องจากฉันใช้แหล่งข้อมูลสองแหล่งที่นี่จึงแตกต่างกันเล็กน้อย คำแนะนำสำหรับการกำหนดค่า DRUID มีรายละเอียดด้านล่างดังนั้นฉันจะไม่อธิบายที่นี่
## แหล่งข้อมูลเริ่มต้น master.datasource.url = jdbc: mysql: // localhost: 3306/springboot? useunicode = true & characterencoding = utf8 & allowmultiqueries = tru emaster.datasource.username = rootmaster.datasource.password = 123456master.datasource.driverclassName = com.mysql.jdbc.driver ## คลัสเตอร์แหล่งข้อมูลอื่น dataSource.url = jdbc: mysql: // localhost: 3306/springboot_test? useunicode = true & catreatencoding = utf8cluster.datasource.username = rootcluster.dataSource.datarsBassnquce ข้อมูลการกำหนดค่าสำหรับพูลการเชื่อมต่อ # เริ่มต้นขนาดต่ำสุด, สปริงสูงสุด. datasource.type = com.alibaba.druid.pool.druiddatasourcespring.datasource.initialsize = 5 Spring.datasource.minidle = 5 Spring.datasource Spring.datasource.maxwait = 60000 # กำหนดค่าระยะเวลาในการดำเนินการในการตรวจจับเพื่อตรวจจับการเชื่อมต่อที่ไม่ได้ใช้งานที่ต้องปิดในมิลลิวินาทีในสปริง. Spring.datasource.validationQuery = เลือก 1 จาก dual spring.datasource.testhialidle = True Spring.datasource.testonborrow = False Spring.datasource.testonreturn = False # เปิด pscache และระบุขนาดของ pscache Spring.datasource.MaxPoolPreparedStatementPerConnesionesize = 20 # กำหนดค่าตัวกรองสำหรับการตรวจสอบสถิติที่สกัดกั้น หลังจากลบออกแล้วอินเตอร์เฟสการตรวจสอบ SQL ไม่สามารถนับได้ 'Wall' ใช้สำหรับ Firewall Spring.datasource.Filters = Stat, Wall, Log4j # Open MergesQl ฟังก์ชั่นผ่านคุณสมบัติ ConnectProperties; slow SQL Records Spring.datasource.connectionProperties = druid.stat.mergesql = true; druid.stat.slowsqlmillis = 5000
หลังจากเพิ่มไฟล์การกำหนดค่าสำเร็จให้เขียนคลาสที่เกี่ยวข้องกับ DRUID
ขั้นแรกคลาส MasterDataSourceConfig.java ซึ่งเป็นคลาสการกำหนดค่าแหล่งข้อมูลเริ่มต้น
@configuration@mapperscan (basepackages = masterDataSourceConfig.package, sqlsessionfactoryref = "masterSqlSessionFactory") คลาสสาธารณะ MasterDataSourceConfig {แพ็คเกจสตริงสุดท้ายคงที่ = "com.pancm.dao.master"; สตริงสุดท้ายคงที่ mapper_location = "classpath: mapper/master/*. xml"; @Value ("$ {master.datasource.url}") url สตริงส่วนตัว; @Value ("$ {master.datasource.username}") ชื่อผู้ใช้สตริงส่วนตัว; @Value ("$ {master.datasource.password}") รหัสผ่านสตริงส่วนตัว; @Value ("$ {master.datasource.driverclassName}") สตริงส่วนตัว driverclassName; @Value ("$ {Spring.Datasource.InitialSize}") ค่าเริ่มต้น INT ส่วนตัว; @Value ("$ {Spring.datasource.minidle}") private int minidle; @Value ("$ {Spring.datasource.maxactive}") int maxactive ส่วนตัว; @Value ("$ {Spring.datasource.maxwait}") int maxwait ส่วนตัว; @Value ("$ {Spring.datasource.timeBetweenevictionRunsmillis}") INt TimebetweeneVictionRunsmillis ส่วนตัว; @Value ("$ {Spring.datasource.MinevictableidletItimeMillis}") int private int minevictableidletimeMillis ส่วนตัว; @Value ("$ {Spring.Datasource.ValidationQuery}") Private String ValidationQuery; @Value ("$ {Spring.datasource.testhialidle}") บูลีนส่วนตัวทดสอบในขณะเดียวกัน; @Value ("$ {Spring.datasource.testonborrow}") Boolean Private Boolean Testonborrow; @Value ("$ {Spring.datasource.testonReturn}") บูลีนส่วนตัว testonreturn; @Value ("$ {Spring.datasource.poolpreparedStatements}") บูลีนส่วนตัว poolean poolpreparedStatements; @Value ("$ {Spring.Datasource.MaxPoolPreparedStatementPerConnesionesize}") int maxpoolpreparedStatementPerconnectionize ส่วนตัว @Value ("$ {Spring.Datasource.Filters}") ตัวกรองสตริงส่วนตัว; @Value ("{spring.datasource.connectionProperties}") สตริงการเชื่อมต่อส่วนตัว @Bean (name = "MasterDataSource") @Primary DataSource MasterDataSource () {DRUIDDATASOURCE DATASOURCE = ใหม่ DRUIDDATASOURCE (); dataSource.seturl (URL); DataSource.SetUserName (ชื่อผู้ใช้); DataSource.SetPassword (รหัสผ่าน); DataSource.SetDriverClassName (DriverClassName); // dataSource การกำหนดค่าเฉพาะ SetInitialSize (ค่าเริ่มต้น); DataSource.setMinidle (minidle); DataSource.SetMaxactive (maxactive); DataSource.setMaxWait (MaxWait); DataSource.SettimeBetweenevictionRunsmillis (TimebetweenevictionRunsmillis); DataSource.SetMineVictableIdletImeMillis (minevictableidletimeMillis); DataSource.SetValidationQuery (ValidationQuery); dataSource.settesthavyidle (testharhialidle); DataSource.SettestonBorrow (TestonBorrow); DataSource.SettestonReturn (TestOnReturn); DataSource.SetPoolPreparedStatements (PoolPreparedStatements); DataSource.SetMaxPoolPreparedStatementPerConnectionize (MaxPoolPreparedStatementPerConnectionize); ลอง {dataSource.setFilters (ตัวกรอง); } catch (sqlexception e) {e.printstacktrace (); } dataSource.SetConnectionProperties (ConnectionProperties); ส่งคืนแหล่งข้อมูล; } @Bean (name = "MasterTransactionManager") @Primary DataSourceTransactionManager MasterTransactionManager () {ส่งคืน DataSourceTransactionManager ใหม่ (MasterDataSource ()); } @Bean (name = "MastERSQLSessionFactory") @Primary สาธารณะ SQLSessionFactory MastersQlSessionFactory (@qualifier ("MasterDataSource") DataSource MasterDataSource) SessionFactory.SetDataSource (MasterDataSource); SessionFactory.SetMapperLocations (ใหม่ PathMatchingResourcePatterNresolver () .getResources (MasterDataSourceConfig.mapper_Location)); return sessionfactory.getObject (); -คำอธิบายประกอบทั้งสองนี้อธิบายไว้ด้านล่าง:
**@primary **: โลโก้ถั่วนี้หากมีผู้สมัครถั่วหลายชนิดที่คล้ายกัน, ถั่ว
มีการพิจารณาลำดับความสำคัญ เมื่อกำหนดค่าแหล่งข้อมูลหลายแหล่งให้ระวังว่าจะต้องมีแหล่งข้อมูลหลักและใช้ @Primary เพื่อทำเครื่องหมายถั่ว
**@mapperscan **: สแกนอินเตอร์เฟส Mapper และการจัดการคอนเทนเนอร์
ควรสังเกตว่า SQLSessionFactoryRef แสดงถึงการกำหนดอินสแตนซ์ที่ไม่ซ้ำกันของ SQLSessionFactory
หลังจากการกำหนดค่าข้างต้นเสร็จสิ้น Druid สามารถใช้เป็นกลุ่มการเชื่อมต่อ อย่างไรก็ตามดรูอิดไม่ได้เป็นเพียงแค่พูลการเชื่อมต่อ นอกจากนี้ยังสามารถกล่าวได้ว่าเป็นแอปพลิเคชันการตรวจสอบ มันมาพร้อมกับอินเทอร์เฟซการตรวจสอบเว็บซึ่งสามารถดูข้อมูลที่เกี่ยวข้องกับ SQL ได้อย่างชัดเจน
การใช้ฟังก์ชั่นการตรวจสอบของ Druid ใน Springboot คุณจะต้องเขียนคลาส StatViewServlet และ WebStatFilter เพื่อใช้บริการลงทะเบียนและกฎการกรอง ที่นี่เราสามารถเขียนสองสิ่งนี้เข้าด้วยกันโดยใช้ **@การกำหนดค่า ** และ **@bean **
เพื่อความเข้าใจที่ง่ายคำแนะนำการกำหนดค่าที่เกี่ยวข้องจะถูกเขียนในรหัสด้วยดังนั้นฉันจะไม่เข้าไปดูรายละเอียดที่นี่
รหัสมีดังนี้:
@ConfigurationPublic คลาส DRUIDCONFIGURATION {@Bean สาธารณะ servletRegistrationBean DruidStatViewServle () {// ลงทะเบียนบริการ ServletRegistrationBean ServletRegistrationBean = ใหม่ ServletRegistrationBean // Whitelist (หมายถึงว่างเปล่าสามารถเข้าถึงได้ทั้งหมดคั่นด้วยเครื่องหมายจุลภาคสำหรับหลาย IPS) servletRegistrationBean.addinitParameter ("อนุญาต", "127.0.0.1"); // IP Blacklist (Dony มีความสำคัญกว่าอนุญาตเมื่อมีการดำรงอยู่ร่วมกัน) ServletRegistrationBean.addinitParameter ("Deny", "127.0.0.2"); // ตั้งค่าชื่อผู้ใช้ล็อกอินและรหัสผ่าน servletRegistrationBean.addinitParameter ("loginusername", "pancm"); ServletRegistrationBean.addinitParameter ("LoginPassword", "123456"); // ไม่ว่าจะเป็นไปได้ที่จะรีเซ็ตข้อมูล servletregistrationbean.addinitparameter ("รีเซ็ตได้", "เท็จ"); ส่งคืน ServletRegistrationBean; } @Bean Public FilterRegistrationBean DRUIDSTATFILTER () {FilterRegistrationBean FilterRegistrationBean = FilterRegistrationBean ใหม่ (ใหม่ WebStatFilter ()); // เพิ่มกฎการกรอง FilterRegistrationBean.addurlpatterns ("/*"); // เพิ่มข้อมูลรูปแบบที่ไม่จำเป็นต้องละเว้น FilterRegistrationBean.addinitParameter ("การยกเว้น", "*.js,*. gif,*. jpg,*. png,*. css,*. ico,/druid/*"); System.out.println ("การเริ่มต้น druid สำเร็จ!"); Return FilterRegistrationBean; -หลังจากเขียนแล้วเริ่มโปรแกรมป้อน: http://127.0.0.1:8084/druid/index.html ในเบราว์เซอร์จากนั้นป้อนชื่อผู้ใช้และรหัสผ่านเพื่อเข้าถึงเว็บอินเตอร์เฟส
การกำหนดค่าแหล่งข้อมูลหลายข้อมูล
ก่อนที่จะทำการกำหนดค่าแหล่งข้อมูลหลายข้อมูลให้ดำเนินการสคริปต์ต่อไปนี้ในฐานข้อมูล MySQL ของ SpringBoot และ SpringBoot_Test ตามลำดับ
-สคริปต์ของไลบรารี Springboot สร้างตาราง `t_user` (` id` int (11) ไม่ใช่ null auto_increment ความคิดเห็น 'ID การสร้างตนเอง', `ชื่อ 'varchar (10) ความคิดเห็น null เริ่มต้น' ชื่อ ',` อายุ' int (2) ความคิดเห็นเริ่มต้น ตาราง `t_student` (` id` int (11) ไม่ใช่ null auto_increment, `name` varchar (16) ค่าเริ่มต้น null,` อายุ 'int (11) ค่าเริ่มต้น, คีย์หลัก (`id`)) เครื่องยนต์ = InnoDB Auto_Increment = 2 ค่าเริ่มต้น
หมายเหตุ: เพื่อที่จะขี้เกียจโครงสร้างของสองตารางนั้นทำเหมือนกัน! แต่มันจะไม่ส่งผลกระทบต่อการทดสอบ!
ข้อมูลเกี่ยวกับแหล่งข้อมูลทั้งสองนี้ได้รับการกำหนดค่าใน Application.properties และการกำหนดค่าได้รับการโพสต์ไว้หนึ่งครั้งดังนั้นฉันจะไม่โพสต์ไว้ที่นี่
ที่นี่เราจะมุ่งเน้นไปที่การกำหนดค่าของแหล่งข้อมูลที่สอง มันคล้ายกับ MasterDataSourceConfig.java ด้านบนความแตกต่างคือมันแตกต่างจาก **@primary ** คำอธิบายประกอบและชื่อโดยไม่ต้องใช้คำอธิบายประกอบ **@primary ** ควรสังเกตว่า MasterDataSourceConfig.java Scans แพ็คเกจและ Mapper อย่างแม่นยำไปยังไดเรกทอรีและสิ่งเดียวกันนี้เป็นจริงสำหรับแหล่งข้อมูลที่สองที่นี่ จากนั้นรหัสมีดังนี้:
@การกำหนดค่า@mapperscan (basepackages = clusterDataSourceConfig.package, sqlSessionFactoryRef = "ClustersQlSessionFactory") คลาสสาธารณะ ClusterDataSourceConfig สตริงสุดท้ายคงที่ mapper_location = "classpath: mapper/cluster/*. xml"; @Value ("$ {cluster.datasource.url}") url สตริงส่วนตัว; @Value ("$ {cluster.datasource.username}") ชื่อผู้ใช้สตริงส่วนตัว; @Value ("$ {cluster.datasource.password}") รหัสผ่านสตริงส่วนตัว; @Value ("$ {cluster.datasource.driverclassName}") สตริงส่วนตัว DriverClass; // เช่น MasterDataSourceConfig, ที่นี่ @bean (name = "ClusterDataSource") DataSource Public ClusterDataSource () {dataSource DRUIDDATASOURCE = ใหม่ DRUIDDATASOURCE (); dataSource.seturl (URL); DataSource.SetUserName (ชื่อผู้ใช้); DataSource.SetPassword (รหัสผ่าน); DataSource.SetDriverClassName (DriverClass); // เช่น MasterDataSourceConfig ที่นี่ ... ส่งคืนแหล่งข้อมูล; } @Bean (name = "ClusterTransactionManager") Public DataSourceTransactionManager ClusterTransactionManager () {ส่งคืน DataSourceTransactionManager ใหม่ (ClusterDataSource ()); } @Bean (name = "ClustersQlSessionFactory") สาธารณะ SQLSessionFactory ClustersQlSessionFactory (@qualifier ("ClusterDataSource") DataSource ClusterDataSource) SessionFactory.SetDataSource (ClusterDataSource); SessionFactory.SetMapperLocations (ใหม่ PathMatchingResourcePatternResolver (). getResources (ClusterDataSourceConfig.mapper_location)); return sessionfactory.getObject (); - หลังจากเขียนการกำหนดค่าสำเร็จให้เริ่มโปรแกรมและดำเนินการทดสอบ
ใช้อินเทอร์เฟซเพื่อเพิ่มข้อมูลในไลบรารี Springboot และ Springboot_Test ตามลำดับ
t_user
โพสต์ http: // localhost: 8084/api/ผู้ใช้ {"ชื่อ": "จางซาน", "อายุ": 25} {"ชื่อ": "li si", "อายุ": 25} {"ชื่อ": "วังวู", "อายุ": 25}}t_student
โพสต์ http: // localhost: 8084/api/นักเรียน {"ชื่อ": "นักเรียน A", "อายุ": 16} {"ชื่อ": "นักเรียน B", "อายุ": 17} {"ชื่อ": "นักเรียน C", "อายุ": 18}หลังจากเพิ่มข้อมูลสำเร็จให้โทรหาอินเทอร์เฟซที่แตกต่างกันสำหรับการสืบค้น
ถาม:
รับ http: // localhost: 8084/api/ผู้ใช้? name = li si
กลับ:
{"id": 2, "ชื่อ": "li si", "อายุ": 25}ถาม:
รับ http: // localhost: 8084/api/นักเรียน? ชื่อ = นักเรียน c
กลับ:
{"id": 1, "ชื่อ": "นักเรียน C", "อายุ": 16}จากข้อมูลเราจะเห็นว่าแหล่งข้อมูลหลายแหล่งได้รับการกำหนดค่าสำเร็จแล้ว
การใช้งาน Pagehelper Pagination
PageHelper เป็นปลั๊กอินเพจสำหรับ mybatis ซึ่งมีประโยชน์มาก! แนะนำเป็นอย่างยิ่งที่นี่! - -
PageHelper ใช้งานง่ายมากคุณเพียงแค่ต้องเพิ่มการพึ่งพา PageHelper ใน Maven
การพึ่งพาของ Maven มีดังนี้:
<Effercy> <mergiED> com.github.pageHelper </groupId> <ratifactId> PageHelper-Spring-Boot-Starter </artifactid> <version> 1.2.3 </เวอร์ชัน> </derness>
หมายเหตุ: ฉันใช้เวอร์ชัน Springboot ที่นี่! รุ่นอื่น ๆ สามารถใช้ได้
หลังจากเพิ่มการพึ่งพาคุณจะต้องเพิ่มการกำหนดค่าหรือรหัสต่อไปนี้
ประเภทแรกจะถูกเพิ่มใน application.properties หรือ application.yml
PageHelper: helperdialect: mysql Offsetaspagenum: Rowboundswithcount จริง: จริงสมเหตุสมผล: เท็จ
ประเภทที่สองจะถูกเพิ่มในการกำหนดค่า mybatis.xml
<bean id = "sqlsessionfactory"> <property name = "dataSource" ref = "dataSource"/> <!-สแกนไฟล์ mapping.xml-> <property name = "mapperlocations" value = "classpath: mapper/*. xml"> name = "properties"> <value> helperDialect = mySQL OffsetAspAgenum = True RowBoundSwithCount = True ondicable = False </value> </porement> </ebean>
ประเภทที่สามจะถูกเพิ่มในรหัสและเริ่มต้นเมื่อเริ่มโปรแกรมโดยใช้คำอธิบายประกอบ **@bean **
@Bean PAGEHELPER PAGEHELPER PAGEHELPER () {PageHelper PageHelper = new PageHelper (); คุณสมบัติคุณสมบัติ = คุณสมบัติใหม่ (); // คุณสมบัติฐานข้อมูล SetProperty ("HelperDialect", "MySQL"); // ว่าจะใช้พารามิเตอร์ออฟเซ็ตเป็นคุณสมบัติ pagenum.setProperty ("Offsetaspagenum", "true"); // ว่าจะสอบถามคุณสมบัติการนับ SetProperty ("RowboundswithCount", "true"); // ว่าจะหาเหตุผลเข้าข้างตนเองคุณสมบัติการแบ่งแยก pagination.setProperty ("สมเหตุสมผล", "false"); PageHelper.SetProperties (คุณสมบัติ); -เนื่องจากเราใช้แหล่งข้อมูลหลายแหล่งที่นี่การกำหนดค่าที่นี่แตกต่างกันเล็กน้อย เราจำเป็นต้องกำหนดค่าใน SessionFactory ที่นี่เราทำการปรับเปลี่ยนที่สอดคล้องกันกับ MasterDatasourceConfig.java ในวิธี MastERSQLSessionFactory เพิ่มรหัสต่อไปนี้
@Bean (name = "MastERSQLSessionFactory") @Primary สาธารณะ SQLSessionFactory MasterSqlSessionFactory (@qualifier ("MasterDataSource") DataSource MasterDataSource) โยนข้อยกเว้น SessionFactory.SetDataSource (MasterDataSource); SessionFactory.SetMapperLocations (ใหม่ PathMatchingResourcePatterNresolver () .getResources (MasterDataSourceConfig.mapper_Location)); // pagination ปลั๊กอิน interceptor interceptor = new PageInterceptor (); คุณสมบัติคุณสมบัติ = คุณสมบัติใหม่ (); // คุณสมบัติฐานข้อมูล SetProperty ("HelperDialect", "MySQL"); // ว่าจะใช้พารามิเตอร์ออฟเซ็ตเป็นคุณสมบัติ pagenum.setProperty ("Offsetaspagenum", "true"); // ว่าจะสอบถามคุณสมบัติการนับ SetProperty ("RowboundswithCount", "true"); // ว่าจะหาเหตุผลเข้าข้างตนเองคุณสมบัติการแบ่งแยก pagination.setProperty ("สมเหตุสมผล", "false"); interceptor.setProperties (คุณสมบัติ); SessionFactory.setPlugins (Interceptor ใหม่ [] {interceptor}); return sessionfactory.getObject (); -หมายเหตุ: เมื่อแหล่งข้อมูลอื่นต้องการเพจโปรดดูรหัสด้านบน
สิ่งที่คุณต้องทราบที่นี่คือพารามิเตอร์ที่สมเหตุสมผลซึ่งหมายถึงการหาเหตุผลเข้าข้างตนเองการเพจและค่าเริ่มต้นเป็นเท็จ หากพารามิเตอร์นี้ถูกตั้งค่าเป็นจริงหน้าแรกจะถูกสืบค้นเมื่อ pagenum <= 0 และหน้า pagenum> (เมื่อจำนวนทั้งหมดเกิน) หน้าสุดท้ายจะถูกสืบค้น เมื่อเท็จโดยค่าเริ่มต้นแบบสอบถามจะขึ้นอยู่กับพารามิเตอร์โดยตรง
หลังจากตั้งค่า pagehelper ถ้าคุณใช้คุณจะต้องเพิ่ม PageHelper.startPage(pageNum,pageSize); ด้านหน้าของการสืบค้น SQL หากคุณต้องการทราบหมายเลขทั้งหมดให้ซื้อหลังจากคำสั่ง Query SQL และเพิ่ม page.getTotal()
ตัวอย่างรหัส:
รายการสาธารณะ <t> findByListEntity (t entity) {รายการ <t> list = null; ลอง {หน้า <?> page = pageHelper.startPage (1,2); System.out.println (getClassName (เอนทิตี)+"ตั้งข้อมูลสองข้อมูลในหน้าแรก!"); list = getMapper (). findByListEntity (เอนทิตี); System.out.println ("มีทั้งหมด:"+page.getTotal ()+"ข้อมูลและการส่งคืนจริงคือ:"+list.size ()+"สองข้อมูล!"); } catch (exception e) {logger.error ("Query"+getClassName (เอนทิตี)+"ล้มเหลว! เหตุผลคือ:", e); } return list; -หลังจากเขียนรหัสแล้วการทดสอบขั้นสุดท้ายจะเริ่มขึ้น
สอบถามข้อมูลทั้งหมดในตาราง T_USER และแบ่งส่วนมัน
ถาม:
รับ http: // localhost: 8084/api/ผู้ใช้
กลับ:
[{"id": 1, "name": "Zhang San", "อายุ": 25}, {"id": 2, "ชื่อ": "Li Si", "อายุ": 25}]Console Print:
เริ่มสอบถาม ...
ผู้ใช้ตั้งค่าข้อมูลสองชิ้นในหน้าแรก!
2018-04-27 19: 55: 50.769 DEBUG 6152 --- [IO-8084-Exec-10] CPDMUSERDAO.FINDBYLISTENTITY_COUNT: ==> การเตรียม: เลือกจำนวน (0) จาก T_USER ที่ 1 = 1 = 1 = 1
2018-04-27 19: 55: 50.770 DEBUG 6152 --- [IO-8084-Exec-10] CPDMUSERDAO.FINDBYLISTENTITY_COUNT: ==> พารามิเตอร์:
2018-04-27 19: 55: 50.771 DEBUG 6152 --- [IO-8084-EXEC-10] CPDMUSERDAO.FINDBYLISTENTITY_COUNT: <== ยอดรวม: 1
2018-04-27 19: 55: 50.772 Debug 6152 --- [IO-8084-Exec-10] Cpdao.master.userdao.findbylistentity: ==> การเตรียม: เลือกรหัส, ชื่อ, อายุจาก t_user ที่ 1 = 1 ขีด จำกัด ?
2018-04-27 19: 55: 50.773 DEBUG 6152 --- [IO-8084-Exec-10] CPDAO.master.userdao.findbyListentity: ==> พารามิเตอร์: 2 (จำนวนเต็ม)
2018-04-27 19: 55: 50.774 DEBUG 6152 --- [IO-8084-Exec-10] CPDAO.master.userdao.findbyListentity: <== ทั้งหมด: 2 ทั้งหมด: 2
มีข้อมูลทั้งหมด: 3 ชิ้นและผลตอบแทนที่เกิดขึ้นจริงคือ: 2 ข้อมูลสองชิ้น!
แบบสอบถามข้อมูลทั้งหมดในตาราง t_student และแบ่งส่วนมัน
ถาม:
รับ http: // localhost: 8084/api/นักเรียน
กลับ:
[{"id": 1, "ชื่อ": "นักเรียน A", "อายุ": 16}, {"id": 2, "ชื่อ": "นักเรียน B", "อายุ": 17}]Console Print:
เริ่มสอบถาม ...
Studnet ตั้งค่าข้อมูลสองชิ้นในหน้าแรก!
2018-04-27 19: 54: 56.155 debug 6152 --- [NIO-8084-Exec-8] CPDCSFindByListEntity_Count: ==> การเตรียม: เลือกจำนวน (0) จาก t_Student ที่ 1 = 1 = 1
2018-04-27 19: 54: 56.155 Debug 6152 --- [NIO-8084-Exec-8] CPDCSFINDBYLISTENTITY_COUNT: ==> พารามิเตอร์:
2018-04-27 19: 54: 56.156 DEBUG 6152 --- [NIO-8084-EXEC-8] CPDCSFINDBYLISTENTITY_COUNT: <== ยอดรวม: 1
2018-04-27 19: 54: 56.157 DEBUG 6152 --- [NIO-8084-Exec-8] CPDCSTUDENTDAO.FINDBYLISTENTITY: ==> การเตรียม: เลือก ID, ชื่อ, อายุจาก T_STUDENT ที่ 1 = 1 ขีด จำกัด ?
2018-04-27 19: 54: 56.157 DEBUG 6152 --- [NIO-8084-EXEC-8] CPDCSTUDENTDAO.FINDBYLISTENTITY: ==> พารามิเตอร์: 2 (จำนวนเต็ม)
2018-04-27 19: 54: 56.157 DEBUG 6152 --- [NIO-8084-EXEC-8] CPDCSTUDENTDAO.FINDBYLISTENTITY: <== ทั้งหมด: 2 ทั้งหมด: 2
มีข้อมูลทั้งหมด: 3 ชิ้นและผลตอบแทนที่เกิดขึ้นจริงคือ: 2 ข้อมูลสองชิ้น!
หลังจากการสืบค้นเสร็จสิ้นมาดูอินเทอร์เฟซการตรวจสอบของ Druid ป้อนในเบราว์เซอร์: http://127.0.0.1:8084/druid/index.html
บันทึกการดำเนินการสามารถมองเห็นได้อย่างชัดเจน!
หากคุณต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับ Druid คุณสามารถตรวจสอบเอกสารอย่างเป็นทางการได้!
บทสรุป
ในที่สุดบทความนี้ก็เสร็จสิ้น เมื่อเขียนรหัสฉันพบปัญหามากมายจากนั้นฉันก็ลองค่อยๆลองและพบข้อมูลเพื่อแก้ปัญหา บทความนี้แนะนำการใช้งานที่เกี่ยวข้องเหล่านี้โดยย่อเท่านั้นและอาจมีความซับซ้อนมากขึ้นในแอปพลิเคชันจริง
บทความอ้างอิง: https://www.bysocket.com/?p=1712
ที่อยู่อย่างเป็นทางการของ Durid: https://github.com/alibaba/druid
PageHelper ที่อยู่อย่างเป็นทางการ: https://github.com/pagehelper/mybatis-pagehelper
ฉันใส่โครงการบน gitHub: https://github.com/xuwujing/springboot คุณสามารถดาวน์โหลดได้ในพื้นที่: คลิกที่นี่
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่าเนื้อหาของบทความนี้จะมีค่าอ้างอิงบางอย่างสำหรับการศึกษาหรือที่ทำงานของทุกคน หากคุณมีคำถามใด ๆ คุณสามารถฝากข้อความไว้เพื่อสื่อสาร ขอบคุณสำหรับการสนับสนุน Wulin.com