[{"data":1,"prerenderedAt":21530},["ShallowReactive",2],{"article-backend\u002Fssm":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"date":10,"tags":11,"body":13,"_type":21524,"_id":21525,"_source":21526,"_file":21527,"_stem":21528,"_extension":21529},"\u002Farticles\u002Fbackend\u002Fssm","backend",false,"","SSM 框架学习笔记","Spring、SpringMVC、MyBatis 三大框架整合开发的核心知识点与实践总结","2023-03-23",[12],"软件工程",{"type":14,"children":15,"toc":21495},"root",[16,24,30,45,52,67,73,80,93,98,103,108,113,119,124,129,134,139,144,150,158,163,168,173,181,186,191,196,201,209,214,219,224,230,236,244,284,289,299,305,318,490,496,514,701,707,715,754,760,793,811,879,933,1026,1032,1360,1366,1374,1431,1439,1649,1657,1670,1676,2020,2026,2079,2085,2161,2167,2196,2263,2269,2285,2293,2379,2387,2425,2431,2457,2504,2510,2518,2581,2588,2625,2630,2661,2667,2673,2680,2732,2739,2777,2784,2865,2871,2878,2922,2929,2967,2974,3069,3075,3082,3133,3140,3177,3184,3265,3271,3278,3291,3298,3335,3342,3379,3386,3482,3488,3496,3503,3526,3533,3561,3568,3640,3646,3652,3660,3667,3719,3726,3788,3795,3876,3882,3889,3934,3941,3980,3987,4060,4066,4073,4118,4125,4163,4170,4258,4264,4271,4316,4323,4393,4400,4488,4494,4499,4505,4511,4519,4527,4558,4566,4618,4623,4633,4641,4715,4723,4760,4767,4797,4804,4878,4887,4894,4994,5000,5013,5025,5031,5038,5090,5098,5234,5240,5264,5271,5408,5414,5419,5427,5435,5487,5495,5631,5636,5644,5652,5689,5697,5735,5742,5823,5829,5834,5842,5850,5932,5940,5948,6070,6076,6089,6095,6102,6139,6146,6287,6294,6390,6396,6402,6409,6446,6453,6573,6579,6586,6623,6631,6669,6676,6757,6763,6781,6787,6795,6801,6809,6917,6923,6944,7066,7072,7088,7205,7211,7224,7361,7367,7395,7400,7407,7469,7474,7481,7542,7548,7556,7730,7736,7742,7750,7755,7763,7792,7798,7806,7814,7851,7859,7864,7870,7878,7883,7888,7893,7898,7904,7909,7915,7946,7954,8527,8535,8850,8858,8863,8871,9447,9453,9461,9467,9473,9481,9486,9491,9496,9501,9506,9511,9516,9521,9526,9532,9538,9544,9550,9595,9603,9670,9676,9802,9808,9814,9820,9843,9849,9857,9863,9896,9902,9989,9995,10001,10007,10020,10104,10112,10118,10123,10156,10230,10236,10242,10248,10261,10268,10386,10394,10475,10493,10609,10617,10745,10751,10769,10898,10906,10919,10927,10939,10945,10953,10961,11046,11052,11107,11113,11175,11181,11189,11263,11271,11302,11310,11373,11379,11387,11553,11561,11667,11675,11683,11779,11787,11795,11902,11908,11916,12036,12044,12190,12196,12203,12260,12268,12424,12432,12525,12531,12539,12813,12821,13078,13084,13092,13100,13141,13149,13317,13323,13331,13394,13402,13439,13445,13491,13499,14033,14040,14143,14149,14167,14175,14358,14366,14430,14438,14542,14548,14579,14587,14718,14727,14855,14860,14866,14897,14908,14916,15021,15029,15062,15070,15115,15121,15136,15243,15249,15322,15419,15425,15431,15444,15450,15579,15585,15612,15618,15624,15645,15657,15820,15839,15929,15937,15948,16185,16195,16298,16304,16315,16338,16349,16434,16442,16493,16499,16562,17309,17315,17328,17488,17494,17499,17505,17511,17517,17522,17528,17535,17824,17838,17872,17880,18030,18038,18510,18516,18522,18530,18535,18548,18554,18562,18570,18588,18595,18611,18634,18640,18646,18653,18932,18939,18973,18980,19167,19175,19304,19317,19415,19457,19462,19468,19474,19513,19518,19524,19529,19540,19565,19571,19644,19650,19656,19673,19884,19890,19916,20125,20133,20146,20152,20157,20162,20167,20272,20278,20522,20528,20533,20538,20544,20550,20555,20560,20566,20579,20732,20738,20744,20790,20795,20803,20859,20867,20925,20931,20939,21079,21085,21091,21099,21173,21181,21235,21241,21248,21362,21369,21483,21489],{"type":17,"tag":18,"props":19,"children":21},"element","h1",{"id":20},"扩展提升",[22],{"type":23,"value":20},"text",{"type":17,"tag":25,"props":26,"children":28},"h3",{"id":27},"数据库截断与清空",[29],{"type":23,"value":27},{"type":17,"tag":31,"props":32,"children":33},"ul",{},[34,40],{"type":17,"tag":35,"props":36,"children":37},"li",{},[38],{"type":23,"value":39},"清空：将表清空，再次添加时，id接着清空之前的表继续自增",{"type":17,"tag":35,"props":41,"children":42},{},[43],{"type":23,"value":44},"截断：删除表，并重新创建一个一模一样的表，id重新计数",{"type":17,"tag":46,"props":47,"children":49},"h2",{"id":48},"mybatis",[50],{"type":23,"value":51},"MyBatis",{"type":17,"tag":53,"props":54,"children":55},"blockquote",{},[56,62],{"type":17,"tag":57,"props":58,"children":59},"p",{},[60],{"type":23,"value":61},"Hibernate和JAP全自动框架",{"type":17,"tag":57,"props":63,"children":64},{},[65],{"type":23,"value":66},"MyBatis半自动",{"type":17,"tag":25,"props":68,"children":70},{"id":69},"_1mybatis简介",[71],{"type":23,"value":72},"1.MyBatis简介",{"type":17,"tag":74,"props":75,"children":77},"h4",{"id":76},"_11-mybatis历史",[78],{"type":23,"value":79},"1.1 MyBatis历史",{"type":17,"tag":57,"props":81,"children":82},{},[83,85,91],{"type":23,"value":84},"MyBatis最初是Apache的一个开源项目",{"type":17,"tag":86,"props":87,"children":88},"strong",{},[89],{"type":23,"value":90},"iBatis",{"type":23,"value":92},", 2010年6月这个项目由Apache Software Foundation迁",{"type":17,"tag":57,"props":94,"children":95},{},[96],{"type":23,"value":97},"移到了Google Code。随着开发团队转投Google Code旗下， iBatis3.x正式更名为MyBatis。代码于",{"type":17,"tag":57,"props":99,"children":100},{},[101],{"type":23,"value":102},"2013年11月迁移到Github。",{"type":17,"tag":57,"props":104,"children":105},{},[106],{"type":23,"value":107},"iBatis一词来源于“internet”和“abatis”的组合，是一个基于Java的持久层框架。 iBatis提供的持久层框架",{"type":17,"tag":57,"props":109,"children":110},{},[111],{"type":23,"value":112},"包括SQL Maps和Data Access Objects（DAO）",{"type":17,"tag":74,"props":114,"children":116},{"id":115},"_12-mybatis特性",[117],{"type":23,"value":118},"1.2 MyBatis特性",{"type":17,"tag":57,"props":120,"children":121},{},[122],{"type":23,"value":123},"1） MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架",{"type":17,"tag":57,"props":125,"children":126},{},[127],{"type":23,"value":128},"2） MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集",{"type":17,"tag":57,"props":130,"children":131},{},[132],{"type":23,"value":133},"3） MyBatis可以使用简单的XML或注解用于配置和原始映射，将接口和Java的POJO（Plain Old Java",{"type":17,"tag":57,"props":135,"children":136},{},[137],{"type":23,"value":138},"Objects，普通的Java对象）映射成数据库中的记录",{"type":17,"tag":57,"props":140,"children":141},{},[142],{"type":23,"value":143},"4） MyBatis 是一个 半自动的ORM（Object Relation Mapping）框架",{"type":17,"tag":74,"props":145,"children":147},{"id":146},"_13-和其它持久化层技术对比",[148],{"type":23,"value":149},"1.3 和其它持久化层技术对比",{"type":17,"tag":57,"props":151,"children":152},{},[153],{"type":17,"tag":86,"props":154,"children":155},{},[156],{"type":23,"value":157},"JDBC：",{"type":17,"tag":57,"props":159,"children":160},{},[161],{"type":23,"value":162},"SQL 夹杂在Java代码中耦合度高，导致硬编码内伤",{"type":17,"tag":57,"props":164,"children":165},{},[166],{"type":23,"value":167},"维护不易且实际开发需求中 SQL 有变化，频繁修改的情况多见",{"type":17,"tag":57,"props":169,"children":170},{},[171],{"type":23,"value":172},"代码冗长，开发效率低",{"type":17,"tag":57,"props":174,"children":175},{},[176],{"type":17,"tag":86,"props":177,"children":178},{},[179],{"type":23,"value":180},"Hibernate 和 JPA：",{"type":17,"tag":57,"props":182,"children":183},{},[184],{"type":23,"value":185},"操作简便，开发效率高",{"type":17,"tag":57,"props":187,"children":188},{},[189],{"type":23,"value":190},"程序中的长难复杂 SQL 需要绕过框架",{"type":17,"tag":57,"props":192,"children":193},{},[194],{"type":23,"value":195},"基于全映射的全自动框架，大量字段的 POJO 进行部分映射时比较困难。",{"type":17,"tag":57,"props":197,"children":198},{},[199],{"type":23,"value":200},"反射操作太多，导致数据库性能下降",{"type":17,"tag":57,"props":202,"children":203},{},[204],{"type":17,"tag":86,"props":205,"children":206},{},[207],{"type":23,"value":208},"MyBatis：",{"type":17,"tag":57,"props":210,"children":211},{},[212],{"type":23,"value":213},"轻量级，性能出色",{"type":17,"tag":57,"props":215,"children":216},{},[217],{"type":23,"value":218},"SQL 和 Java 编码分开，功能边界清晰。Java代码专注业务、SQL语句专注数据",{"type":17,"tag":57,"props":220,"children":221},{},[222],{"type":23,"value":223},"开发效率稍逊于HIbernate，但是完全能够接受",{"type":17,"tag":25,"props":225,"children":227},{"id":226},"_2-搭建mybatis",[228],{"type":23,"value":229},"2. 搭建MyBatis",{"type":17,"tag":74,"props":231,"children":233},{"id":232},"_21-注意事项",[234],{"type":23,"value":235},"2.1 注意事项",{"type":17,"tag":57,"props":237,"children":238},{},[239],{"type":17,"tag":86,"props":240,"children":241},{},[242],{"type":23,"value":243},"MySQL不同版本的注意事项",{"type":17,"tag":245,"props":246,"children":247},"ol",{},[248,266],{"type":17,"tag":35,"props":249,"children":250},{},[251,253],{"type":23,"value":252},"驱动类driver-class-name\n",{"type":17,"tag":31,"props":254,"children":255},{},[256,261],{"type":17,"tag":35,"props":257,"children":258},{},[259],{"type":23,"value":260},"MySQL 5版本使用jdbc5驱动，驱动类使用：com.mysql.jdbc.Driver",{"type":17,"tag":35,"props":262,"children":263},{},[264],{"type":23,"value":265},"MySQL 8版本使用jdbc8驱动，驱动类使用：com.mysql.cj.jdbc.Driver",{"type":17,"tag":35,"props":267,"children":268},{},[269,271],{"type":23,"value":270},"连接地址url\n",{"type":17,"tag":31,"props":272,"children":273},{},[274,279],{"type":17,"tag":35,"props":275,"children":276},{},[277],{"type":23,"value":278},"MySQL 5版本的url：jdbc:mysql:\u002F\u002Flocalhost:3306\u002Fssm",{"type":17,"tag":35,"props":280,"children":281},{},[282],{"type":23,"value":283},"MySQL 8版本的url：jdbc:mysql:\u002F\u002Flocalhost:3306\u002Fssm?serverTimezone=UTC",{"type":17,"tag":57,"props":285,"children":286},{},[287],{"type":23,"value":288},"否则运行测试用例报告如下错误：",{"type":17,"tag":57,"props":290,"children":291},{},[292],{"type":17,"tag":293,"props":294,"children":296},"code",{"className":295},[],[297],{"type":23,"value":298},"java.sql.SQLException: The server time zone value 'ÖÐ¹ú±ê×¼Ê±¼ä' is unrecognized or represents more",{"type":17,"tag":74,"props":300,"children":302},{"id":301},"_22-创建maven工程",[303],{"type":23,"value":304},"2.2 创建Maven工程",{"type":17,"tag":245,"props":306,"children":307},{},[308,313],{"type":17,"tag":35,"props":309,"children":310},{},[311],{"type":23,"value":312},"打包方式：jar",{"type":17,"tag":35,"props":314,"children":315},{},[316],{"type":23,"value":317},"引入依赖",{"type":17,"tag":319,"props":320,"children":324},"pre",{"className":321,"code":322,"language":323,"meta":7,"style":7},"language-java shiki shiki-themes github-dark","\u003Cdependencies> \u003C!-- Mybatis核心 -->\n    \u003Cdependency>\n        \u003CgroupId>org.mybatis\u003C\u002FgroupId>\n        \u003CartifactId>mybatis\u003C\u002FartifactId>\n        \u003Cversion>3.5.7\u003C\u002Fversion>\n    \u003C\u002Fdependency> \u003C!-- junit测试 -->\n    \u003Cdependency>\n        \u003CgroupId>junit\u003C\u002FgroupId>\n        \u003CartifactId>junit\u003C\u002FartifactId>\n        \u003Cversion>4.12\u003C\u002Fversion>\n        \u003Cscope>test\u003C\u002Fscope>\n    \u003C\u002Fdependency> \u003C!-- MySQL驱动 -->\n    \u003Cdependency>\n        \u003CgroupId>mysql\u003C\u002FgroupId>\n        \u003CartifactId>mysql-connector-java\u003C\u002FartifactId>\n        \u003Cversion>8.0.16\u003C\u002Fversion>\n    \u003C\u002Fdependency>\n\u003C\u002Fdependencies>\n","java",[325],{"type":17,"tag":293,"props":326,"children":327},{"__ignoreMap":7},[328,339,348,357,366,375,384,392,401,410,419,428,437,445,454,463,472,481],{"type":17,"tag":329,"props":330,"children":333},"span",{"class":331,"line":332},"line",1,[334],{"type":17,"tag":329,"props":335,"children":336},{},[337],{"type":23,"value":338},"\u003Cdependencies> \u003C!-- Mybatis核心 -->\n",{"type":17,"tag":329,"props":340,"children":342},{"class":331,"line":341},2,[343],{"type":17,"tag":329,"props":344,"children":345},{},[346],{"type":23,"value":347},"    \u003Cdependency>\n",{"type":17,"tag":329,"props":349,"children":351},{"class":331,"line":350},3,[352],{"type":17,"tag":329,"props":353,"children":354},{},[355],{"type":23,"value":356},"        \u003CgroupId>org.mybatis\u003C\u002FgroupId>\n",{"type":17,"tag":329,"props":358,"children":360},{"class":331,"line":359},4,[361],{"type":17,"tag":329,"props":362,"children":363},{},[364],{"type":23,"value":365},"        \u003CartifactId>mybatis\u003C\u002FartifactId>\n",{"type":17,"tag":329,"props":367,"children":369},{"class":331,"line":368},5,[370],{"type":17,"tag":329,"props":371,"children":372},{},[373],{"type":23,"value":374},"        \u003Cversion>3.5.7\u003C\u002Fversion>\n",{"type":17,"tag":329,"props":376,"children":378},{"class":331,"line":377},6,[379],{"type":17,"tag":329,"props":380,"children":381},{},[382],{"type":23,"value":383},"    \u003C\u002Fdependency> \u003C!-- junit测试 -->\n",{"type":17,"tag":329,"props":385,"children":387},{"class":331,"line":386},7,[388],{"type":17,"tag":329,"props":389,"children":390},{},[391],{"type":23,"value":347},{"type":17,"tag":329,"props":393,"children":395},{"class":331,"line":394},8,[396],{"type":17,"tag":329,"props":397,"children":398},{},[399],{"type":23,"value":400},"        \u003CgroupId>junit\u003C\u002FgroupId>\n",{"type":17,"tag":329,"props":402,"children":404},{"class":331,"line":403},9,[405],{"type":17,"tag":329,"props":406,"children":407},{},[408],{"type":23,"value":409},"        \u003CartifactId>junit\u003C\u002FartifactId>\n",{"type":17,"tag":329,"props":411,"children":413},{"class":331,"line":412},10,[414],{"type":17,"tag":329,"props":415,"children":416},{},[417],{"type":23,"value":418},"        \u003Cversion>4.12\u003C\u002Fversion>\n",{"type":17,"tag":329,"props":420,"children":422},{"class":331,"line":421},11,[423],{"type":17,"tag":329,"props":424,"children":425},{},[426],{"type":23,"value":427},"        \u003Cscope>test\u003C\u002Fscope>\n",{"type":17,"tag":329,"props":429,"children":431},{"class":331,"line":430},12,[432],{"type":17,"tag":329,"props":433,"children":434},{},[435],{"type":23,"value":436},"    \u003C\u002Fdependency> \u003C!-- MySQL驱动 -->\n",{"type":17,"tag":329,"props":438,"children":440},{"class":331,"line":439},13,[441],{"type":17,"tag":329,"props":442,"children":443},{},[444],{"type":23,"value":347},{"type":17,"tag":329,"props":446,"children":448},{"class":331,"line":447},14,[449],{"type":17,"tag":329,"props":450,"children":451},{},[452],{"type":23,"value":453},"        \u003CgroupId>mysql\u003C\u002FgroupId>\n",{"type":17,"tag":329,"props":455,"children":457},{"class":331,"line":456},15,[458],{"type":17,"tag":329,"props":459,"children":460},{},[461],{"type":23,"value":462},"        \u003CartifactId>mysql-connector-java\u003C\u002FartifactId>\n",{"type":17,"tag":329,"props":464,"children":466},{"class":331,"line":465},16,[467],{"type":17,"tag":329,"props":468,"children":469},{},[470],{"type":23,"value":471},"        \u003Cversion>8.0.16\u003C\u002Fversion>\n",{"type":17,"tag":329,"props":473,"children":475},{"class":331,"line":474},17,[476],{"type":17,"tag":329,"props":477,"children":478},{},[479],{"type":23,"value":480},"    \u003C\u002Fdependency>\n",{"type":17,"tag":329,"props":482,"children":484},{"class":331,"line":483},18,[485],{"type":17,"tag":329,"props":486,"children":487},{},[488],{"type":23,"value":489},"\u003C\u002Fdependencies>\n",{"type":17,"tag":74,"props":491,"children":493},{"id":492},"_23-创建mybatis的核心配置文件",[494],{"type":23,"value":495},"2.3 创建MyBatis的核心配置文件",{"type":17,"tag":53,"props":497,"children":498},{},[499,504,509],{"type":17,"tag":57,"props":500,"children":501},{},[502],{"type":23,"value":503},"习惯上命名为mybatis-config.xml，这个文件名仅仅只是建议，并非强制要求。将来整合Spring之后，这个配置文件可以省略，所以大家操作时可以直接复制、粘贴。",{"type":17,"tag":57,"props":505,"children":506},{},[507],{"type":23,"value":508},"核心配置文件主要用于配置连接数据库的环境以及MyBatis的全局配置信息。",{"type":17,"tag":57,"props":510,"children":511},{},[512],{"type":23,"value":513},"核心配置文件存放的位置是src\u002Fmain\u002Fresources目录下。",{"type":17,"tag":319,"props":515,"children":517},{"className":321,"code":516,"language":323,"meta":7,"style":7},"\u003C?xml version=\"1.0\" encoding=\"UTF-8\" ?> \u003C!DOCTYPE configuration PUBLIC \"-\u002F\u002Fmybatis.org\u002F\u002FDTD Config 3.0\u002F\u002FEN\"\n        \"http:\u002F\u002Fmybatis.org\u002Fdtd\u002Fmybatis-3-config.dtd\">\n\n\u003C!--设置连接数据库的环境-->\n\u003Cconfiguration>\n    \u003Cenvironments default=\"development\">\n        \u003Cenvironment id=\"development\">\n            \u003CtransactionManager type=\"JDBC\"\u002F>\n            \u003CdataSource type=\"POOLED\">\n                \u003Cproperty name=\"driver\" value=\"com.mysql.cj.jdbc.Driver\"\u002F>\n                \u003Cproperty name=\"url\" value=\"jdbc:mysql:\u002F\u002Flocalhost:3306\u002Fssm?serverTimezone=UTC\"\u002F>\n                \u003Cproperty name=\"username\" value=\"root\"\u002F>\n                \u003Cproperty name=\"password\" value=\"wangkun1\"\u002F>\n            \u003C\u002FdataSource>\n        \u003C\u002Fenvironment>\n    \u003C\u002Fenvironments>\n\n    \u003C!--引入映射文件-->\n    \u003Cmappers>\n        \u003Cmapper resource=\"mappers\u002FUserMapper.xml\"\u002F>\n    \u003C\u002Fmappers>\n\u003C\u002Fconfiguration>\n",[518],{"type":17,"tag":293,"props":519,"children":520},{"__ignoreMap":7},[521,529,537,546,554,562,570,578,586,594,602,610,618,626,634,642,650,657,665,674,683,692],{"type":17,"tag":329,"props":522,"children":523},{"class":331,"line":332},[524],{"type":17,"tag":329,"props":525,"children":526},{},[527],{"type":23,"value":528},"\u003C?xml version=\"1.0\" encoding=\"UTF-8\" ?> \u003C!DOCTYPE configuration PUBLIC \"-\u002F\u002Fmybatis.org\u002F\u002FDTD Config 3.0\u002F\u002FEN\"\n",{"type":17,"tag":329,"props":530,"children":531},{"class":331,"line":341},[532],{"type":17,"tag":329,"props":533,"children":534},{},[535],{"type":23,"value":536},"        \"http:\u002F\u002Fmybatis.org\u002Fdtd\u002Fmybatis-3-config.dtd\">\n",{"type":17,"tag":329,"props":538,"children":539},{"class":331,"line":350},[540],{"type":17,"tag":329,"props":541,"children":543},{"emptyLinePlaceholder":542},true,[544],{"type":23,"value":545},"\n",{"type":17,"tag":329,"props":547,"children":548},{"class":331,"line":359},[549],{"type":17,"tag":329,"props":550,"children":551},{},[552],{"type":23,"value":553},"\u003C!--设置连接数据库的环境-->\n",{"type":17,"tag":329,"props":555,"children":556},{"class":331,"line":368},[557],{"type":17,"tag":329,"props":558,"children":559},{},[560],{"type":23,"value":561},"\u003Cconfiguration>\n",{"type":17,"tag":329,"props":563,"children":564},{"class":331,"line":377},[565],{"type":17,"tag":329,"props":566,"children":567},{},[568],{"type":23,"value":569},"    \u003Cenvironments default=\"development\">\n",{"type":17,"tag":329,"props":571,"children":572},{"class":331,"line":386},[573],{"type":17,"tag":329,"props":574,"children":575},{},[576],{"type":23,"value":577},"        \u003Cenvironment id=\"development\">\n",{"type":17,"tag":329,"props":579,"children":580},{"class":331,"line":394},[581],{"type":17,"tag":329,"props":582,"children":583},{},[584],{"type":23,"value":585},"            \u003CtransactionManager type=\"JDBC\"\u002F>\n",{"type":17,"tag":329,"props":587,"children":588},{"class":331,"line":403},[589],{"type":17,"tag":329,"props":590,"children":591},{},[592],{"type":23,"value":593},"            \u003CdataSource type=\"POOLED\">\n",{"type":17,"tag":329,"props":595,"children":596},{"class":331,"line":412},[597],{"type":17,"tag":329,"props":598,"children":599},{},[600],{"type":23,"value":601},"                \u003Cproperty name=\"driver\" value=\"com.mysql.cj.jdbc.Driver\"\u002F>\n",{"type":17,"tag":329,"props":603,"children":604},{"class":331,"line":421},[605],{"type":17,"tag":329,"props":606,"children":607},{},[608],{"type":23,"value":609},"                \u003Cproperty name=\"url\" value=\"jdbc:mysql:\u002F\u002Flocalhost:3306\u002Fssm?serverTimezone=UTC\"\u002F>\n",{"type":17,"tag":329,"props":611,"children":612},{"class":331,"line":430},[613],{"type":17,"tag":329,"props":614,"children":615},{},[616],{"type":23,"value":617},"                \u003Cproperty name=\"username\" value=\"root\"\u002F>\n",{"type":17,"tag":329,"props":619,"children":620},{"class":331,"line":439},[621],{"type":17,"tag":329,"props":622,"children":623},{},[624],{"type":23,"value":625},"                \u003Cproperty name=\"password\" value=\"wangkun1\"\u002F>\n",{"type":17,"tag":329,"props":627,"children":628},{"class":331,"line":447},[629],{"type":17,"tag":329,"props":630,"children":631},{},[632],{"type":23,"value":633},"            \u003C\u002FdataSource>\n",{"type":17,"tag":329,"props":635,"children":636},{"class":331,"line":456},[637],{"type":17,"tag":329,"props":638,"children":639},{},[640],{"type":23,"value":641},"        \u003C\u002Fenvironment>\n",{"type":17,"tag":329,"props":643,"children":644},{"class":331,"line":465},[645],{"type":17,"tag":329,"props":646,"children":647},{},[648],{"type":23,"value":649},"    \u003C\u002Fenvironments>\n",{"type":17,"tag":329,"props":651,"children":652},{"class":331,"line":474},[653],{"type":17,"tag":329,"props":654,"children":655},{"emptyLinePlaceholder":542},[656],{"type":23,"value":545},{"type":17,"tag":329,"props":658,"children":659},{"class":331,"line":483},[660],{"type":17,"tag":329,"props":661,"children":662},{},[663],{"type":23,"value":664},"    \u003C!--引入映射文件-->\n",{"type":17,"tag":329,"props":666,"children":668},{"class":331,"line":667},19,[669],{"type":17,"tag":329,"props":670,"children":671},{},[672],{"type":23,"value":673},"    \u003Cmappers>\n",{"type":17,"tag":329,"props":675,"children":677},{"class":331,"line":676},20,[678],{"type":17,"tag":329,"props":679,"children":680},{},[681],{"type":23,"value":682},"        \u003Cmapper resource=\"mappers\u002FUserMapper.xml\"\u002F>\n",{"type":17,"tag":329,"props":684,"children":686},{"class":331,"line":685},21,[687],{"type":17,"tag":329,"props":688,"children":689},{},[690],{"type":23,"value":691},"    \u003C\u002Fmappers>\n",{"type":17,"tag":329,"props":693,"children":695},{"class":331,"line":694},22,[696],{"type":17,"tag":329,"props":697,"children":698},{},[699],{"type":23,"value":700},"\u003C\u002Fconfiguration>\n",{"type":17,"tag":74,"props":702,"children":704},{"id":703},"_24-创建mapper接口",[705],{"type":23,"value":706},"2.4 创建mapper接口",{"type":17,"tag":53,"props":708,"children":709},{},[710],{"type":17,"tag":57,"props":711,"children":712},{},[713],{"type":23,"value":714},"MyBatis中的mapper接口相当于以前的dao。但是区别在于，mapper仅仅是接口，我们不需要提供实现类。",{"type":17,"tag":319,"props":716,"children":718},{"className":321,"code":717,"language":323,"meta":7,"style":7},"public interface UserMapper { \n    \u002F** 添加用户信息 *\u002F \n    int insertUser(); \n}\n",[719],{"type":17,"tag":293,"props":720,"children":721},{"__ignoreMap":7},[722,730,738,746],{"type":17,"tag":329,"props":723,"children":724},{"class":331,"line":332},[725],{"type":17,"tag":329,"props":726,"children":727},{},[728],{"type":23,"value":729},"public interface UserMapper { \n",{"type":17,"tag":329,"props":731,"children":732},{"class":331,"line":341},[733],{"type":17,"tag":329,"props":734,"children":735},{},[736],{"type":23,"value":737},"    \u002F** 添加用户信息 *\u002F \n",{"type":17,"tag":329,"props":739,"children":740},{"class":331,"line":350},[741],{"type":17,"tag":329,"props":742,"children":743},{},[744],{"type":23,"value":745},"    int insertUser(); \n",{"type":17,"tag":329,"props":747,"children":748},{"class":331,"line":359},[749],{"type":17,"tag":329,"props":750,"children":751},{},[752],{"type":23,"value":753},"}\n",{"type":17,"tag":74,"props":755,"children":757},{"id":756},"_25-创建mapper映射文件",[758],{"type":23,"value":759},"2.5 创建mapper映射文件",{"type":17,"tag":57,"props":761,"children":762},{},[763,765,770,772,777,779,784,786,791],{"type":23,"value":764},"相关概念：",{"type":17,"tag":86,"props":766,"children":767},{},[768],{"type":23,"value":769},"ORM",{"type":23,"value":771},"（",{"type":17,"tag":86,"props":773,"children":774},{},[775],{"type":23,"value":776},"O",{"type":23,"value":778},"bject ",{"type":17,"tag":86,"props":780,"children":781},{},[782],{"type":23,"value":783},"R",{"type":23,"value":785},"elationship ",{"type":17,"tag":86,"props":787,"children":788},{},[789],{"type":23,"value":790},"M",{"type":23,"value":792},"apping）对象关系映射。",{"type":17,"tag":31,"props":794,"children":795},{},[796,801,806],{"type":17,"tag":35,"props":797,"children":798},{},[799],{"type":23,"value":800},"对象：Java的实体类对象",{"type":17,"tag":35,"props":802,"children":803},{},[804],{"type":23,"value":805},"关系：关系型数据库",{"type":17,"tag":35,"props":807,"children":808},{},[809],{"type":23,"value":810},"映射：二者之间的对应关系",{"type":17,"tag":812,"props":813,"children":814},"table",{},[815,835],{"type":17,"tag":816,"props":817,"children":818},"thead",{},[819],{"type":17,"tag":820,"props":821,"children":822},"tr",{},[823,830],{"type":17,"tag":824,"props":825,"children":827},"th",{"align":826},"center",[828],{"type":23,"value":829},"Java概念",{"type":17,"tag":824,"props":831,"children":832},{"align":826},[833],{"type":23,"value":834},"数据库概念",{"type":17,"tag":836,"props":837,"children":838},"tbody",{},[839,853,866],{"type":17,"tag":820,"props":840,"children":841},{},[842,848],{"type":17,"tag":843,"props":844,"children":845},"td",{"align":826},[846],{"type":23,"value":847},"类",{"type":17,"tag":843,"props":849,"children":850},{"align":826},[851],{"type":23,"value":852},"表",{"type":17,"tag":820,"props":854,"children":855},{},[856,861],{"type":17,"tag":843,"props":857,"children":858},{"align":826},[859],{"type":23,"value":860},"属性",{"type":17,"tag":843,"props":862,"children":863},{"align":826},[864],{"type":23,"value":865},"字段\u002F列",{"type":17,"tag":820,"props":867,"children":868},{},[869,874],{"type":17,"tag":843,"props":870,"children":871},{"align":826},[872],{"type":23,"value":873},"对象",{"type":17,"tag":843,"props":875,"children":876},{"align":826},[877],{"type":23,"value":878},"记录\u002F行",{"type":17,"tag":53,"props":880,"children":881},{},[882,887,892,897,905,910,915,920],{"type":17,"tag":57,"props":883,"children":884},{},[885],{"type":23,"value":886},"1、映射文件的命名规则：",{"type":17,"tag":57,"props":888,"children":889},{},[890],{"type":23,"value":891},"表所对应的实体类的类名+Mapper.xml，例如：表t_user，映射的实体类为User，所对应的映射文件为UserMapper.xml",{"type":17,"tag":57,"props":893,"children":894},{},[895],{"type":23,"value":896},"因此一个映射文件对应一个实体类，对应一张表的操作",{"type":17,"tag":57,"props":898,"children":899},{},[900],{"type":17,"tag":86,"props":901,"children":902},{},[903],{"type":23,"value":904},"一张表 ==> 一个实体类 ==> 一个mapper接口 ==> 映射文件",{"type":17,"tag":57,"props":906,"children":907},{},[908],{"type":23,"value":909},"MyBatis映射文件用于编写SQL，访问以及操作表中的数据",{"type":17,"tag":57,"props":911,"children":912},{},[913],{"type":23,"value":914},"MyBatis映射文件存放的位置是src\u002Fmain\u002Fresources\u002Fmappers目录下",{"type":17,"tag":57,"props":916,"children":917},{},[918],{"type":23,"value":919},"2、 MyBatis中可以面向接口操作数据，要保证两个一致：",{"type":17,"tag":31,"props":921,"children":922},{},[923,928],{"type":17,"tag":35,"props":924,"children":925},{},[926],{"type":23,"value":927},"mapper接口的全类名和映射文件的命名空间（namespace）保持一致",{"type":17,"tag":35,"props":929,"children":930},{},[931],{"type":23,"value":932},"mapper接口中方法的方法名和映射文件中编写SQL的标签的id属性保持一致",{"type":17,"tag":319,"props":934,"children":936},{"className":321,"code":935,"language":323,"meta":7,"style":7},"\u003C?xml version=\"1.0\" encoding=\"UTF-8\" ?> \u003C!DOCTYPE mapper PUBLIC \"-\u002F\u002Fmybatis.org\u002F\u002FDTD Mapper 3.0\u002F\u002FEN\"\n        \"http:\u002F\u002Fmybatis.org\u002Fdtd\u002Fmybatis-3-mapper.dtd\">\n\u003Cmapper namespace=\"com.wangkun.mybatis.mapper.UserMapper\">\n\n    \u003C!--int insertUser();-->\n    \u003Cinsert id=\"insertUser\">\n        insert into t_user\n        values (null, 'admin', '123456', 23, '男', '12345@qq.com')\n    \u003C\u002Finsert>\n\n\u003C\u002Fmapper>\n",[937],{"type":17,"tag":293,"props":938,"children":939},{"__ignoreMap":7},[940,948,956,964,971,979,987,995,1003,1011,1018],{"type":17,"tag":329,"props":941,"children":942},{"class":331,"line":332},[943],{"type":17,"tag":329,"props":944,"children":945},{},[946],{"type":23,"value":947},"\u003C?xml version=\"1.0\" encoding=\"UTF-8\" ?> \u003C!DOCTYPE mapper PUBLIC \"-\u002F\u002Fmybatis.org\u002F\u002FDTD Mapper 3.0\u002F\u002FEN\"\n",{"type":17,"tag":329,"props":949,"children":950},{"class":331,"line":341},[951],{"type":17,"tag":329,"props":952,"children":953},{},[954],{"type":23,"value":955},"        \"http:\u002F\u002Fmybatis.org\u002Fdtd\u002Fmybatis-3-mapper.dtd\">\n",{"type":17,"tag":329,"props":957,"children":958},{"class":331,"line":350},[959],{"type":17,"tag":329,"props":960,"children":961},{},[962],{"type":23,"value":963},"\u003Cmapper namespace=\"com.wangkun.mybatis.mapper.UserMapper\">\n",{"type":17,"tag":329,"props":965,"children":966},{"class":331,"line":359},[967],{"type":17,"tag":329,"props":968,"children":969},{"emptyLinePlaceholder":542},[970],{"type":23,"value":545},{"type":17,"tag":329,"props":972,"children":973},{"class":331,"line":368},[974],{"type":17,"tag":329,"props":975,"children":976},{},[977],{"type":23,"value":978},"    \u003C!--int insertUser();-->\n",{"type":17,"tag":329,"props":980,"children":981},{"class":331,"line":377},[982],{"type":17,"tag":329,"props":983,"children":984},{},[985],{"type":23,"value":986},"    \u003Cinsert id=\"insertUser\">\n",{"type":17,"tag":329,"props":988,"children":989},{"class":331,"line":386},[990],{"type":17,"tag":329,"props":991,"children":992},{},[993],{"type":23,"value":994},"        insert into t_user\n",{"type":17,"tag":329,"props":996,"children":997},{"class":331,"line":394},[998],{"type":17,"tag":329,"props":999,"children":1000},{},[1001],{"type":23,"value":1002},"        values (null, 'admin', '123456', 23, '男', '12345@qq.com')\n",{"type":17,"tag":329,"props":1004,"children":1005},{"class":331,"line":403},[1006],{"type":17,"tag":329,"props":1007,"children":1008},{},[1009],{"type":23,"value":1010},"    \u003C\u002Finsert>\n",{"type":17,"tag":329,"props":1012,"children":1013},{"class":331,"line":412},[1014],{"type":17,"tag":329,"props":1015,"children":1016},{"emptyLinePlaceholder":542},[1017],{"type":23,"value":545},{"type":17,"tag":329,"props":1019,"children":1020},{"class":331,"line":421},[1021],{"type":17,"tag":329,"props":1022,"children":1023},{},[1024],{"type":23,"value":1025},"\u003C\u002Fmapper>\n",{"type":17,"tag":74,"props":1027,"children":1029},{"id":1028},"_26-创建测试类",[1030],{"type":23,"value":1031},"2.6 创建测试类",{"type":17,"tag":319,"props":1033,"children":1035},{"className":321,"code":1034,"language":323,"meta":7,"style":7},"package com.wangkun.mybatis.test;\n\nimport com.wangkun.mybatis.mapper.UserMapper;\nimport org.apache.ibatis.io.Resources;\nimport org.apache.ibatis.session.SqlSession;\nimport org.apache.ibatis.session.SqlSessionFactory;\nimport org.apache.ibatis.session.SqlSessionFactoryBuilder;\nimport org.junit.Test;\n\nimport java.io.IOException;\nimport java.io.InputStream;\n\npublic class MybatisTest {\n    @Test\n    public void testInsert() throws IOException {\n\n        InputStream is = Resources.getResourceAsStream(\"mybatis-config.xml\");\n        \u002F\u002F 创建SqlSessionFactoryBuilder对象\n        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();\n        \u002F\u002F 通过核心配置文件所对应的字节输入流创建工厂类SqlSessionFactory，生产SqlSession对象\n        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);\n        \u002F\u002F 创建SqlSession对象，此时通过SqlSession对象所操作的sql都必须手动提交或回滚事务\n        SqlSession sqlSession = sqlSessionFactory.openSession();\n        \u002F\u002F 创建SqlSession对象，此时通过SqlSession对象所操作的sql都会自动提交\n        \u002F\u002F SqlSession sqlSession = sqlSessionFactory.openSession(true);\n\n        \u002F\u002F 通过代理模式创建UserMapper接口的代理实现类对象\n        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);\n        \u002F\u002F 调用UserMapper接口中的方法，就可以根据UserMapper的全类名匹配元素文件，通过调用的方法名匹配 映射文件中的SQL标签，并执行标签中的SQL语句\n        int result = userMapper.insertUser();\n\n        \u002F*上面两行代码就相当于*\u002F\n        \u002F\u002F sqlSession.insert(\"com.wangkun.mybatis.mapper.UserMapper.insertUser\");\n        sqlSession.commit();\n        sqlSession.close();\n\n        System.out.println(\"结果：\" + result);\n    }\n}\n",[1036],{"type":17,"tag":293,"props":1037,"children":1038},{"__ignoreMap":7},[1039,1047,1054,1062,1070,1078,1086,1094,1102,1109,1117,1125,1132,1140,1148,1156,1163,1171,1179,1187,1195,1203,1211,1220,1229,1238,1246,1255,1264,1273,1282,1290,1299,1308,1317,1326,1334,1343,1352],{"type":17,"tag":329,"props":1040,"children":1041},{"class":331,"line":332},[1042],{"type":17,"tag":329,"props":1043,"children":1044},{},[1045],{"type":23,"value":1046},"package com.wangkun.mybatis.test;\n",{"type":17,"tag":329,"props":1048,"children":1049},{"class":331,"line":341},[1050],{"type":17,"tag":329,"props":1051,"children":1052},{"emptyLinePlaceholder":542},[1053],{"type":23,"value":545},{"type":17,"tag":329,"props":1055,"children":1056},{"class":331,"line":350},[1057],{"type":17,"tag":329,"props":1058,"children":1059},{},[1060],{"type":23,"value":1061},"import com.wangkun.mybatis.mapper.UserMapper;\n",{"type":17,"tag":329,"props":1063,"children":1064},{"class":331,"line":359},[1065],{"type":17,"tag":329,"props":1066,"children":1067},{},[1068],{"type":23,"value":1069},"import org.apache.ibatis.io.Resources;\n",{"type":17,"tag":329,"props":1071,"children":1072},{"class":331,"line":368},[1073],{"type":17,"tag":329,"props":1074,"children":1075},{},[1076],{"type":23,"value":1077},"import org.apache.ibatis.session.SqlSession;\n",{"type":17,"tag":329,"props":1079,"children":1080},{"class":331,"line":377},[1081],{"type":17,"tag":329,"props":1082,"children":1083},{},[1084],{"type":23,"value":1085},"import org.apache.ibatis.session.SqlSessionFactory;\n",{"type":17,"tag":329,"props":1087,"children":1088},{"class":331,"line":386},[1089],{"type":17,"tag":329,"props":1090,"children":1091},{},[1092],{"type":23,"value":1093},"import org.apache.ibatis.session.SqlSessionFactoryBuilder;\n",{"type":17,"tag":329,"props":1095,"children":1096},{"class":331,"line":394},[1097],{"type":17,"tag":329,"props":1098,"children":1099},{},[1100],{"type":23,"value":1101},"import org.junit.Test;\n",{"type":17,"tag":329,"props":1103,"children":1104},{"class":331,"line":403},[1105],{"type":17,"tag":329,"props":1106,"children":1107},{"emptyLinePlaceholder":542},[1108],{"type":23,"value":545},{"type":17,"tag":329,"props":1110,"children":1111},{"class":331,"line":412},[1112],{"type":17,"tag":329,"props":1113,"children":1114},{},[1115],{"type":23,"value":1116},"import java.io.IOException;\n",{"type":17,"tag":329,"props":1118,"children":1119},{"class":331,"line":421},[1120],{"type":17,"tag":329,"props":1121,"children":1122},{},[1123],{"type":23,"value":1124},"import java.io.InputStream;\n",{"type":17,"tag":329,"props":1126,"children":1127},{"class":331,"line":430},[1128],{"type":17,"tag":329,"props":1129,"children":1130},{"emptyLinePlaceholder":542},[1131],{"type":23,"value":545},{"type":17,"tag":329,"props":1133,"children":1134},{"class":331,"line":439},[1135],{"type":17,"tag":329,"props":1136,"children":1137},{},[1138],{"type":23,"value":1139},"public class MybatisTest {\n",{"type":17,"tag":329,"props":1141,"children":1142},{"class":331,"line":447},[1143],{"type":17,"tag":329,"props":1144,"children":1145},{},[1146],{"type":23,"value":1147},"    @Test\n",{"type":17,"tag":329,"props":1149,"children":1150},{"class":331,"line":456},[1151],{"type":17,"tag":329,"props":1152,"children":1153},{},[1154],{"type":23,"value":1155},"    public void testInsert() throws IOException {\n",{"type":17,"tag":329,"props":1157,"children":1158},{"class":331,"line":465},[1159],{"type":17,"tag":329,"props":1160,"children":1161},{"emptyLinePlaceholder":542},[1162],{"type":23,"value":545},{"type":17,"tag":329,"props":1164,"children":1165},{"class":331,"line":474},[1166],{"type":17,"tag":329,"props":1167,"children":1168},{},[1169],{"type":23,"value":1170},"        InputStream is = Resources.getResourceAsStream(\"mybatis-config.xml\");\n",{"type":17,"tag":329,"props":1172,"children":1173},{"class":331,"line":483},[1174],{"type":17,"tag":329,"props":1175,"children":1176},{},[1177],{"type":23,"value":1178},"        \u002F\u002F 创建SqlSessionFactoryBuilder对象\n",{"type":17,"tag":329,"props":1180,"children":1181},{"class":331,"line":667},[1182],{"type":17,"tag":329,"props":1183,"children":1184},{},[1185],{"type":23,"value":1186},"        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();\n",{"type":17,"tag":329,"props":1188,"children":1189},{"class":331,"line":676},[1190],{"type":17,"tag":329,"props":1191,"children":1192},{},[1193],{"type":23,"value":1194},"        \u002F\u002F 通过核心配置文件所对应的字节输入流创建工厂类SqlSessionFactory，生产SqlSession对象\n",{"type":17,"tag":329,"props":1196,"children":1197},{"class":331,"line":685},[1198],{"type":17,"tag":329,"props":1199,"children":1200},{},[1201],{"type":23,"value":1202},"        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);\n",{"type":17,"tag":329,"props":1204,"children":1205},{"class":331,"line":694},[1206],{"type":17,"tag":329,"props":1207,"children":1208},{},[1209],{"type":23,"value":1210},"        \u002F\u002F 创建SqlSession对象，此时通过SqlSession对象所操作的sql都必须手动提交或回滚事务\n",{"type":17,"tag":329,"props":1212,"children":1214},{"class":331,"line":1213},23,[1215],{"type":17,"tag":329,"props":1216,"children":1217},{},[1218],{"type":23,"value":1219},"        SqlSession sqlSession = sqlSessionFactory.openSession();\n",{"type":17,"tag":329,"props":1221,"children":1223},{"class":331,"line":1222},24,[1224],{"type":17,"tag":329,"props":1225,"children":1226},{},[1227],{"type":23,"value":1228},"        \u002F\u002F 创建SqlSession对象，此时通过SqlSession对象所操作的sql都会自动提交\n",{"type":17,"tag":329,"props":1230,"children":1232},{"class":331,"line":1231},25,[1233],{"type":17,"tag":329,"props":1234,"children":1235},{},[1236],{"type":23,"value":1237},"        \u002F\u002F SqlSession sqlSession = sqlSessionFactory.openSession(true);\n",{"type":17,"tag":329,"props":1239,"children":1241},{"class":331,"line":1240},26,[1242],{"type":17,"tag":329,"props":1243,"children":1244},{"emptyLinePlaceholder":542},[1245],{"type":23,"value":545},{"type":17,"tag":329,"props":1247,"children":1249},{"class":331,"line":1248},27,[1250],{"type":17,"tag":329,"props":1251,"children":1252},{},[1253],{"type":23,"value":1254},"        \u002F\u002F 通过代理模式创建UserMapper接口的代理实现类对象\n",{"type":17,"tag":329,"props":1256,"children":1258},{"class":331,"line":1257},28,[1259],{"type":17,"tag":329,"props":1260,"children":1261},{},[1262],{"type":23,"value":1263},"        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);\n",{"type":17,"tag":329,"props":1265,"children":1267},{"class":331,"line":1266},29,[1268],{"type":17,"tag":329,"props":1269,"children":1270},{},[1271],{"type":23,"value":1272},"        \u002F\u002F 调用UserMapper接口中的方法，就可以根据UserMapper的全类名匹配元素文件，通过调用的方法名匹配 映射文件中的SQL标签，并执行标签中的SQL语句\n",{"type":17,"tag":329,"props":1274,"children":1276},{"class":331,"line":1275},30,[1277],{"type":17,"tag":329,"props":1278,"children":1279},{},[1280],{"type":23,"value":1281},"        int result = userMapper.insertUser();\n",{"type":17,"tag":329,"props":1283,"children":1285},{"class":331,"line":1284},31,[1286],{"type":17,"tag":329,"props":1287,"children":1288},{"emptyLinePlaceholder":542},[1289],{"type":23,"value":545},{"type":17,"tag":329,"props":1291,"children":1293},{"class":331,"line":1292},32,[1294],{"type":17,"tag":329,"props":1295,"children":1296},{},[1297],{"type":23,"value":1298},"        \u002F*上面两行代码就相当于*\u002F\n",{"type":17,"tag":329,"props":1300,"children":1302},{"class":331,"line":1301},33,[1303],{"type":17,"tag":329,"props":1304,"children":1305},{},[1306],{"type":23,"value":1307},"        \u002F\u002F sqlSession.insert(\"com.wangkun.mybatis.mapper.UserMapper.insertUser\");\n",{"type":17,"tag":329,"props":1309,"children":1311},{"class":331,"line":1310},34,[1312],{"type":17,"tag":329,"props":1313,"children":1314},{},[1315],{"type":23,"value":1316},"        sqlSession.commit();\n",{"type":17,"tag":329,"props":1318,"children":1320},{"class":331,"line":1319},35,[1321],{"type":17,"tag":329,"props":1322,"children":1323},{},[1324],{"type":23,"value":1325},"        sqlSession.close();\n",{"type":17,"tag":329,"props":1327,"children":1329},{"class":331,"line":1328},36,[1330],{"type":17,"tag":329,"props":1331,"children":1332},{"emptyLinePlaceholder":542},[1333],{"type":23,"value":545},{"type":17,"tag":329,"props":1335,"children":1337},{"class":331,"line":1336},37,[1338],{"type":17,"tag":329,"props":1339,"children":1340},{},[1341],{"type":23,"value":1342},"        System.out.println(\"结果：\" + result);\n",{"type":17,"tag":329,"props":1344,"children":1346},{"class":331,"line":1345},38,[1347],{"type":17,"tag":329,"props":1348,"children":1349},{},[1350],{"type":23,"value":1351},"    }\n",{"type":17,"tag":329,"props":1353,"children":1355},{"class":331,"line":1354},39,[1356],{"type":17,"tag":329,"props":1357,"children":1358},{},[1359],{"type":23,"value":753},{"type":17,"tag":74,"props":1361,"children":1363},{"id":1362},"_27-日志功能",[1364],{"type":23,"value":1365},"2.7 日志功能",{"type":17,"tag":245,"props":1367,"children":1368},{},[1369],{"type":17,"tag":35,"props":1370,"children":1371},{},[1372],{"type":23,"value":1373},"加入依赖",{"type":17,"tag":319,"props":1375,"children":1379},{"className":1376,"code":1377,"language":1378,"meta":7,"style":7},"language-xml shiki shiki-themes github-dark","\u003C!-- log4j日志 -->\n\u003Cdependency>\n    \u003CgroupId>log4j\u003C\u002FgroupId>\n    \u003CartifactId>log4j\u003C\u002FartifactId>\n    \u003Cversion>1.2.17\u003C\u002Fversion>\n\u003C\u002Fdependency>\n","xml",[1380],{"type":17,"tag":293,"props":1381,"children":1382},{"__ignoreMap":7},[1383,1391,1399,1407,1415,1423],{"type":17,"tag":329,"props":1384,"children":1385},{"class":331,"line":332},[1386],{"type":17,"tag":329,"props":1387,"children":1388},{},[1389],{"type":23,"value":1390},"\u003C!-- log4j日志 -->\n",{"type":17,"tag":329,"props":1392,"children":1393},{"class":331,"line":341},[1394],{"type":17,"tag":329,"props":1395,"children":1396},{},[1397],{"type":23,"value":1398},"\u003Cdependency>\n",{"type":17,"tag":329,"props":1400,"children":1401},{"class":331,"line":350},[1402],{"type":17,"tag":329,"props":1403,"children":1404},{},[1405],{"type":23,"value":1406},"    \u003CgroupId>log4j\u003C\u002FgroupId>\n",{"type":17,"tag":329,"props":1408,"children":1409},{"class":331,"line":359},[1410],{"type":17,"tag":329,"props":1411,"children":1412},{},[1413],{"type":23,"value":1414},"    \u003CartifactId>log4j\u003C\u002FartifactId>\n",{"type":17,"tag":329,"props":1416,"children":1417},{"class":331,"line":368},[1418],{"type":17,"tag":329,"props":1419,"children":1420},{},[1421],{"type":23,"value":1422},"    \u003Cversion>1.2.17\u003C\u002Fversion>\n",{"type":17,"tag":329,"props":1424,"children":1425},{"class":331,"line":377},[1426],{"type":17,"tag":329,"props":1427,"children":1428},{},[1429],{"type":23,"value":1430},"\u003C\u002Fdependency>\n",{"type":17,"tag":245,"props":1432,"children":1433},{"start":341},[1434],{"type":17,"tag":35,"props":1435,"children":1436},{},[1437],{"type":23,"value":1438},"加入log4j配置文件",{"type":17,"tag":319,"props":1440,"children":1442},{"className":1376,"code":1441,"language":1378,"meta":7,"style":7},"\u003C!--src\u002Fmain\u002Fresources\u002Flog4j.xml-->\n\u003C?xml version=\"1.0\" encoding=\"GB2312\" ?>\n\u003C!DOCTYPE log4j:configuration SYSTEM\n        \"http:\u002F\u002Flogging.apache.org\u002Flog4j\u002F1.2\u002Fapidocs\u002Forg\u002Fapache\u002Flog4j\u002Fxml\u002Fdoc-files\u002Flog4j.dtd\">\n\n\u003Clog4j:configuration debug=\"true\">\n\n    \u003Cappender name=\"STDOUT\" class=\"org.apache.log4j.ConsoleAppender\">\n        \u003Cparam name=\"Encoding\" value=\"UTF-8\"\u002F>\n        \u003Clayout class=\"org.apache.log4j.PatternLayout\">\n            \u003Cparam name=\"ConversionPattern\" value=\"%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \\n\"\u002F>\n        \u003C\u002Flayout>\n    \u003C\u002Fappender>\n    \u003Clogger name=\"java.sql\">\n        \u003Clevel value=\"debug\"\u002F>\n    \u003C\u002Flogger>\n    \u003Clogger name=\"org.apache.ibatis\">\n        \u003Clevel value=\"info\"\u002F>\n    \u003C\u002Flogger>\n  \n    \u003Croot>\n        \u003Clevel value=\"debug\"\u002F>\n        \u003Cappender-ref ref=\"STDOUT\"\u002F>\n    \u003C\u002Froot>\n  \n\u003C\u002Flog4j:configuration>\n",[1443],{"type":17,"tag":293,"props":1444,"children":1445},{"__ignoreMap":7},[1446,1454,1462,1470,1478,1485,1493,1500,1508,1516,1524,1532,1540,1548,1556,1564,1572,1580,1588,1595,1603,1611,1618,1626,1634,1641],{"type":17,"tag":329,"props":1447,"children":1448},{"class":331,"line":332},[1449],{"type":17,"tag":329,"props":1450,"children":1451},{},[1452],{"type":23,"value":1453},"\u003C!--src\u002Fmain\u002Fresources\u002Flog4j.xml-->\n",{"type":17,"tag":329,"props":1455,"children":1456},{"class":331,"line":341},[1457],{"type":17,"tag":329,"props":1458,"children":1459},{},[1460],{"type":23,"value":1461},"\u003C?xml version=\"1.0\" encoding=\"GB2312\" ?>\n",{"type":17,"tag":329,"props":1463,"children":1464},{"class":331,"line":350},[1465],{"type":17,"tag":329,"props":1466,"children":1467},{},[1468],{"type":23,"value":1469},"\u003C!DOCTYPE log4j:configuration SYSTEM\n",{"type":17,"tag":329,"props":1471,"children":1472},{"class":331,"line":359},[1473],{"type":17,"tag":329,"props":1474,"children":1475},{},[1476],{"type":23,"value":1477},"        \"http:\u002F\u002Flogging.apache.org\u002Flog4j\u002F1.2\u002Fapidocs\u002Forg\u002Fapache\u002Flog4j\u002Fxml\u002Fdoc-files\u002Flog4j.dtd\">\n",{"type":17,"tag":329,"props":1479,"children":1480},{"class":331,"line":368},[1481],{"type":17,"tag":329,"props":1482,"children":1483},{"emptyLinePlaceholder":542},[1484],{"type":23,"value":545},{"type":17,"tag":329,"props":1486,"children":1487},{"class":331,"line":377},[1488],{"type":17,"tag":329,"props":1489,"children":1490},{},[1491],{"type":23,"value":1492},"\u003Clog4j:configuration debug=\"true\">\n",{"type":17,"tag":329,"props":1494,"children":1495},{"class":331,"line":386},[1496],{"type":17,"tag":329,"props":1497,"children":1498},{"emptyLinePlaceholder":542},[1499],{"type":23,"value":545},{"type":17,"tag":329,"props":1501,"children":1502},{"class":331,"line":394},[1503],{"type":17,"tag":329,"props":1504,"children":1505},{},[1506],{"type":23,"value":1507},"    \u003Cappender name=\"STDOUT\" class=\"org.apache.log4j.ConsoleAppender\">\n",{"type":17,"tag":329,"props":1509,"children":1510},{"class":331,"line":403},[1511],{"type":17,"tag":329,"props":1512,"children":1513},{},[1514],{"type":23,"value":1515},"        \u003Cparam name=\"Encoding\" value=\"UTF-8\"\u002F>\n",{"type":17,"tag":329,"props":1517,"children":1518},{"class":331,"line":412},[1519],{"type":17,"tag":329,"props":1520,"children":1521},{},[1522],{"type":23,"value":1523},"        \u003Clayout class=\"org.apache.log4j.PatternLayout\">\n",{"type":17,"tag":329,"props":1525,"children":1526},{"class":331,"line":421},[1527],{"type":17,"tag":329,"props":1528,"children":1529},{},[1530],{"type":23,"value":1531},"            \u003Cparam name=\"ConversionPattern\" value=\"%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \\n\"\u002F>\n",{"type":17,"tag":329,"props":1533,"children":1534},{"class":331,"line":430},[1535],{"type":17,"tag":329,"props":1536,"children":1537},{},[1538],{"type":23,"value":1539},"        \u003C\u002Flayout>\n",{"type":17,"tag":329,"props":1541,"children":1542},{"class":331,"line":439},[1543],{"type":17,"tag":329,"props":1544,"children":1545},{},[1546],{"type":23,"value":1547},"    \u003C\u002Fappender>\n",{"type":17,"tag":329,"props":1549,"children":1550},{"class":331,"line":447},[1551],{"type":17,"tag":329,"props":1552,"children":1553},{},[1554],{"type":23,"value":1555},"    \u003Clogger name=\"java.sql\">\n",{"type":17,"tag":329,"props":1557,"children":1558},{"class":331,"line":456},[1559],{"type":17,"tag":329,"props":1560,"children":1561},{},[1562],{"type":23,"value":1563},"        \u003Clevel value=\"debug\"\u002F>\n",{"type":17,"tag":329,"props":1565,"children":1566},{"class":331,"line":465},[1567],{"type":17,"tag":329,"props":1568,"children":1569},{},[1570],{"type":23,"value":1571},"    \u003C\u002Flogger>\n",{"type":17,"tag":329,"props":1573,"children":1574},{"class":331,"line":474},[1575],{"type":17,"tag":329,"props":1576,"children":1577},{},[1578],{"type":23,"value":1579},"    \u003Clogger name=\"org.apache.ibatis\">\n",{"type":17,"tag":329,"props":1581,"children":1582},{"class":331,"line":483},[1583],{"type":17,"tag":329,"props":1584,"children":1585},{},[1586],{"type":23,"value":1587},"        \u003Clevel value=\"info\"\u002F>\n",{"type":17,"tag":329,"props":1589,"children":1590},{"class":331,"line":667},[1591],{"type":17,"tag":329,"props":1592,"children":1593},{},[1594],{"type":23,"value":1571},{"type":17,"tag":329,"props":1596,"children":1597},{"class":331,"line":676},[1598],{"type":17,"tag":329,"props":1599,"children":1600},{},[1601],{"type":23,"value":1602},"  \n",{"type":17,"tag":329,"props":1604,"children":1605},{"class":331,"line":685},[1606],{"type":17,"tag":329,"props":1607,"children":1608},{},[1609],{"type":23,"value":1610},"    \u003Croot>\n",{"type":17,"tag":329,"props":1612,"children":1613},{"class":331,"line":694},[1614],{"type":17,"tag":329,"props":1615,"children":1616},{},[1617],{"type":23,"value":1563},{"type":17,"tag":329,"props":1619,"children":1620},{"class":331,"line":1213},[1621],{"type":17,"tag":329,"props":1622,"children":1623},{},[1624],{"type":23,"value":1625},"        \u003Cappender-ref ref=\"STDOUT\"\u002F>\n",{"type":17,"tag":329,"props":1627,"children":1628},{"class":331,"line":1222},[1629],{"type":17,"tag":329,"props":1630,"children":1631},{},[1632],{"type":23,"value":1633},"    \u003C\u002Froot>\n",{"type":17,"tag":329,"props":1635,"children":1636},{"class":331,"line":1231},[1637],{"type":17,"tag":329,"props":1638,"children":1639},{},[1640],{"type":23,"value":1602},{"type":17,"tag":329,"props":1642,"children":1643},{"class":331,"line":1240},[1644],{"type":17,"tag":329,"props":1645,"children":1646},{},[1647],{"type":23,"value":1648},"\u003C\u002Flog4j:configuration>\n",{"type":17,"tag":57,"props":1650,"children":1651},{},[1652],{"type":17,"tag":86,"props":1653,"children":1654},{},[1655],{"type":23,"value":1656},"日志的级别：",{"type":17,"tag":53,"props":1658,"children":1659},{},[1660,1665],{"type":17,"tag":57,"props":1661,"children":1662},{},[1663],{"type":23,"value":1664},"FATAL(致命) > ERROR(错误) > WARN(警告) > INFO(信息) > DEBUG(调试)",{"type":17,"tag":57,"props":1666,"children":1667},{},[1668],{"type":23,"value":1669},"从左到右打印的内容越来越详细",{"type":17,"tag":25,"props":1671,"children":1673},{"id":1672},"_3-核心配置文件",[1674],{"type":23,"value":1675},"3. 核心配置文件",{"type":17,"tag":319,"props":1677,"children":1679},{"className":1376,"code":1678,"language":1378,"meta":7,"style":7},"\u003C?xml version=\"1.0\" encoding=\"UTF-8\" ?> \u003C!DOCTYPE configuration PUBLIC \"-\u002F\u002Fmybatis.org\u002F\u002FDTD Config 3.0\u002F\u002FEN\"\n        \"http:\u002F\u002Fmybatis.org\u002Fdtd\u002Fmybatis-3-config.dtd\">\n\n\u003C!--设置连接数据库的环境-->\n\u003Cconfiguration>\n    \u003C!--MyBatis核心配置文件中，标签的顺序： properties?,settings?,typeAliases?,typeHandlers?, objectFactory?,objectWrapperFactory?,reflectorFactory?, plugins?,environments?,databaseIdProvider?,mappers? -->\n\n    \u003C!--1. properties: 引入properties文件，可以用${key}访问value-->\n    \u003Cproperties resource=\"jdbc.properties\"\u002F>\n\n    \u003C!--2. typeAliases: 类型别名-->\n    \u003CtypeAliases>\n        \u003C!-- (1).给单个实体类设置别名 -->\n        \u003C!--\u003CtypeAlias type=\"com.wangkun.mybatis.pojo.User\" alias=\"User\"\u002F>-->\n        \u003C!-- (2).给同一设置别别名，别名默认就是类名-->\n        \u003Cpackage name=\"com.wangkun.mybatis.pojo\"\u002F>\n    \u003C\u002FtypeAliases>\n\n    \u003C!--3. environments：配置多个连接数据库的环境 属性：default：设置默认使用的环境的id -->\n    \u003Cenvironments default=\"development\">\n        \u003Cenvironment id=\"development\">\n            \u003CtransactionManager type=\"JDBC\"\u002F>\n            \u003CdataSource type=\"POOLED\">\n                \u003Cproperty name=\"driver\" value=\"${jdbc.driver}\"\u002F>\n                \u003Cproperty name=\"url\" value=\"${jdbc.url}\"\u002F>\n                \u003Cproperty name=\"username\" value=\"${jdbc.username}\"\u002F>\n                \u003Cproperty name=\"password\" value=\"${jdbc.password}\"\u002F>\n            \u003C\u002FdataSource>\n        \u003C\u002Fenvironment>\n\n    \u003C\u002Fenvironments>\n\n    \u003C!--4. 引入映射文件-->\n    \u003Cmappers>\n        \u003C!--单个引入映射文件-->\n        \u003C!--\u003Cmapper resource=\"mappers\u002FUserMapper.xml\"\u002F>-->\n        \u003C!--\n            以包的形式引入映射文件\n            (1). mapper接口与映射文件所在的包必须一致\n            (2). 接口的名字与与映射文件的名字必须一致\n        -->\n        \u003Cpackage name=\"com.wangkun.mybatis.mapper\"\u002F>\n    \u003C\u002Fmappers>\n\u003C\u002Fconfiguration>\n",[1680],{"type":17,"tag":293,"props":1681,"children":1682},{"__ignoreMap":7},[1683,1690,1697,1704,1711,1718,1726,1733,1741,1749,1756,1764,1772,1780,1788,1796,1804,1812,1819,1827,1834,1841,1848,1855,1863,1871,1879,1887,1894,1901,1908,1915,1922,1930,1937,1945,1953,1961,1969,1977,1986,1995,2004,2012],{"type":17,"tag":329,"props":1684,"children":1685},{"class":331,"line":332},[1686],{"type":17,"tag":329,"props":1687,"children":1688},{},[1689],{"type":23,"value":528},{"type":17,"tag":329,"props":1691,"children":1692},{"class":331,"line":341},[1693],{"type":17,"tag":329,"props":1694,"children":1695},{},[1696],{"type":23,"value":536},{"type":17,"tag":329,"props":1698,"children":1699},{"class":331,"line":350},[1700],{"type":17,"tag":329,"props":1701,"children":1702},{"emptyLinePlaceholder":542},[1703],{"type":23,"value":545},{"type":17,"tag":329,"props":1705,"children":1706},{"class":331,"line":359},[1707],{"type":17,"tag":329,"props":1708,"children":1709},{},[1710],{"type":23,"value":553},{"type":17,"tag":329,"props":1712,"children":1713},{"class":331,"line":368},[1714],{"type":17,"tag":329,"props":1715,"children":1716},{},[1717],{"type":23,"value":561},{"type":17,"tag":329,"props":1719,"children":1720},{"class":331,"line":377},[1721],{"type":17,"tag":329,"props":1722,"children":1723},{},[1724],{"type":23,"value":1725},"    \u003C!--MyBatis核心配置文件中，标签的顺序： properties?,settings?,typeAliases?,typeHandlers?, objectFactory?,objectWrapperFactory?,reflectorFactory?, plugins?,environments?,databaseIdProvider?,mappers? -->\n",{"type":17,"tag":329,"props":1727,"children":1728},{"class":331,"line":386},[1729],{"type":17,"tag":329,"props":1730,"children":1731},{"emptyLinePlaceholder":542},[1732],{"type":23,"value":545},{"type":17,"tag":329,"props":1734,"children":1735},{"class":331,"line":394},[1736],{"type":17,"tag":329,"props":1737,"children":1738},{},[1739],{"type":23,"value":1740},"    \u003C!--1. properties: 引入properties文件，可以用${key}访问value-->\n",{"type":17,"tag":329,"props":1742,"children":1743},{"class":331,"line":403},[1744],{"type":17,"tag":329,"props":1745,"children":1746},{},[1747],{"type":23,"value":1748},"    \u003Cproperties resource=\"jdbc.properties\"\u002F>\n",{"type":17,"tag":329,"props":1750,"children":1751},{"class":331,"line":412},[1752],{"type":17,"tag":329,"props":1753,"children":1754},{"emptyLinePlaceholder":542},[1755],{"type":23,"value":545},{"type":17,"tag":329,"props":1757,"children":1758},{"class":331,"line":421},[1759],{"type":17,"tag":329,"props":1760,"children":1761},{},[1762],{"type":23,"value":1763},"    \u003C!--2. typeAliases: 类型别名-->\n",{"type":17,"tag":329,"props":1765,"children":1766},{"class":331,"line":430},[1767],{"type":17,"tag":329,"props":1768,"children":1769},{},[1770],{"type":23,"value":1771},"    \u003CtypeAliases>\n",{"type":17,"tag":329,"props":1773,"children":1774},{"class":331,"line":439},[1775],{"type":17,"tag":329,"props":1776,"children":1777},{},[1778],{"type":23,"value":1779},"        \u003C!-- (1).给单个实体类设置别名 -->\n",{"type":17,"tag":329,"props":1781,"children":1782},{"class":331,"line":447},[1783],{"type":17,"tag":329,"props":1784,"children":1785},{},[1786],{"type":23,"value":1787},"        \u003C!--\u003CtypeAlias type=\"com.wangkun.mybatis.pojo.User\" alias=\"User\"\u002F>-->\n",{"type":17,"tag":329,"props":1789,"children":1790},{"class":331,"line":456},[1791],{"type":17,"tag":329,"props":1792,"children":1793},{},[1794],{"type":23,"value":1795},"        \u003C!-- (2).给同一设置别别名，别名默认就是类名-->\n",{"type":17,"tag":329,"props":1797,"children":1798},{"class":331,"line":465},[1799],{"type":17,"tag":329,"props":1800,"children":1801},{},[1802],{"type":23,"value":1803},"        \u003Cpackage name=\"com.wangkun.mybatis.pojo\"\u002F>\n",{"type":17,"tag":329,"props":1805,"children":1806},{"class":331,"line":474},[1807],{"type":17,"tag":329,"props":1808,"children":1809},{},[1810],{"type":23,"value":1811},"    \u003C\u002FtypeAliases>\n",{"type":17,"tag":329,"props":1813,"children":1814},{"class":331,"line":483},[1815],{"type":17,"tag":329,"props":1816,"children":1817},{"emptyLinePlaceholder":542},[1818],{"type":23,"value":545},{"type":17,"tag":329,"props":1820,"children":1821},{"class":331,"line":667},[1822],{"type":17,"tag":329,"props":1823,"children":1824},{},[1825],{"type":23,"value":1826},"    \u003C!--3. environments：配置多个连接数据库的环境 属性：default：设置默认使用的环境的id -->\n",{"type":17,"tag":329,"props":1828,"children":1829},{"class":331,"line":676},[1830],{"type":17,"tag":329,"props":1831,"children":1832},{},[1833],{"type":23,"value":569},{"type":17,"tag":329,"props":1835,"children":1836},{"class":331,"line":685},[1837],{"type":17,"tag":329,"props":1838,"children":1839},{},[1840],{"type":23,"value":577},{"type":17,"tag":329,"props":1842,"children":1843},{"class":331,"line":694},[1844],{"type":17,"tag":329,"props":1845,"children":1846},{},[1847],{"type":23,"value":585},{"type":17,"tag":329,"props":1849,"children":1850},{"class":331,"line":1213},[1851],{"type":17,"tag":329,"props":1852,"children":1853},{},[1854],{"type":23,"value":593},{"type":17,"tag":329,"props":1856,"children":1857},{"class":331,"line":1222},[1858],{"type":17,"tag":329,"props":1859,"children":1860},{},[1861],{"type":23,"value":1862},"                \u003Cproperty name=\"driver\" value=\"${jdbc.driver}\"\u002F>\n",{"type":17,"tag":329,"props":1864,"children":1865},{"class":331,"line":1231},[1866],{"type":17,"tag":329,"props":1867,"children":1868},{},[1869],{"type":23,"value":1870},"                \u003Cproperty name=\"url\" value=\"${jdbc.url}\"\u002F>\n",{"type":17,"tag":329,"props":1872,"children":1873},{"class":331,"line":1240},[1874],{"type":17,"tag":329,"props":1875,"children":1876},{},[1877],{"type":23,"value":1878},"                \u003Cproperty name=\"username\" value=\"${jdbc.username}\"\u002F>\n",{"type":17,"tag":329,"props":1880,"children":1881},{"class":331,"line":1248},[1882],{"type":17,"tag":329,"props":1883,"children":1884},{},[1885],{"type":23,"value":1886},"                \u003Cproperty name=\"password\" value=\"${jdbc.password}\"\u002F>\n",{"type":17,"tag":329,"props":1888,"children":1889},{"class":331,"line":1257},[1890],{"type":17,"tag":329,"props":1891,"children":1892},{},[1893],{"type":23,"value":633},{"type":17,"tag":329,"props":1895,"children":1896},{"class":331,"line":1266},[1897],{"type":17,"tag":329,"props":1898,"children":1899},{},[1900],{"type":23,"value":641},{"type":17,"tag":329,"props":1902,"children":1903},{"class":331,"line":1275},[1904],{"type":17,"tag":329,"props":1905,"children":1906},{"emptyLinePlaceholder":542},[1907],{"type":23,"value":545},{"type":17,"tag":329,"props":1909,"children":1910},{"class":331,"line":1284},[1911],{"type":17,"tag":329,"props":1912,"children":1913},{},[1914],{"type":23,"value":649},{"type":17,"tag":329,"props":1916,"children":1917},{"class":331,"line":1292},[1918],{"type":17,"tag":329,"props":1919,"children":1920},{"emptyLinePlaceholder":542},[1921],{"type":23,"value":545},{"type":17,"tag":329,"props":1923,"children":1924},{"class":331,"line":1301},[1925],{"type":17,"tag":329,"props":1926,"children":1927},{},[1928],{"type":23,"value":1929},"    \u003C!--4. 引入映射文件-->\n",{"type":17,"tag":329,"props":1931,"children":1932},{"class":331,"line":1310},[1933],{"type":17,"tag":329,"props":1934,"children":1935},{},[1936],{"type":23,"value":673},{"type":17,"tag":329,"props":1938,"children":1939},{"class":331,"line":1319},[1940],{"type":17,"tag":329,"props":1941,"children":1942},{},[1943],{"type":23,"value":1944},"        \u003C!--单个引入映射文件-->\n",{"type":17,"tag":329,"props":1946,"children":1947},{"class":331,"line":1328},[1948],{"type":17,"tag":329,"props":1949,"children":1950},{},[1951],{"type":23,"value":1952},"        \u003C!--\u003Cmapper resource=\"mappers\u002FUserMapper.xml\"\u002F>-->\n",{"type":17,"tag":329,"props":1954,"children":1955},{"class":331,"line":1336},[1956],{"type":17,"tag":329,"props":1957,"children":1958},{},[1959],{"type":23,"value":1960},"        \u003C!--\n",{"type":17,"tag":329,"props":1962,"children":1963},{"class":331,"line":1345},[1964],{"type":17,"tag":329,"props":1965,"children":1966},{},[1967],{"type":23,"value":1968},"            以包的形式引入映射文件\n",{"type":17,"tag":329,"props":1970,"children":1971},{"class":331,"line":1354},[1972],{"type":17,"tag":329,"props":1973,"children":1974},{},[1975],{"type":23,"value":1976},"            (1). mapper接口与映射文件所在的包必须一致\n",{"type":17,"tag":329,"props":1978,"children":1980},{"class":331,"line":1979},40,[1981],{"type":17,"tag":329,"props":1982,"children":1983},{},[1984],{"type":23,"value":1985},"            (2). 接口的名字与与映射文件的名字必须一致\n",{"type":17,"tag":329,"props":1987,"children":1989},{"class":331,"line":1988},41,[1990],{"type":17,"tag":329,"props":1991,"children":1992},{},[1993],{"type":23,"value":1994},"        -->\n",{"type":17,"tag":329,"props":1996,"children":1998},{"class":331,"line":1997},42,[1999],{"type":17,"tag":329,"props":2000,"children":2001},{},[2002],{"type":23,"value":2003},"        \u003Cpackage name=\"com.wangkun.mybatis.mapper\"\u002F>\n",{"type":17,"tag":329,"props":2005,"children":2007},{"class":331,"line":2006},43,[2008],{"type":17,"tag":329,"props":2009,"children":2010},{},[2011],{"type":23,"value":691},{"type":17,"tag":329,"props":2013,"children":2015},{"class":331,"line":2014},44,[2016],{"type":17,"tag":329,"props":2017,"children":2018},{},[2019],{"type":23,"value":700},{"type":17,"tag":25,"props":2021,"children":2023},{"id":2022},"_4-mybatis获取参数",[2024],{"type":23,"value":2025},"4. Mybatis获取参数",{"type":17,"tag":53,"props":2027,"children":2028},{},[2029,2048,2071],{"type":17,"tag":57,"props":2030,"children":2031},{},[2032,2034,2040,2042],{"type":23,"value":2033},"两种方式：",{"type":17,"tag":293,"props":2035,"children":2037},{"className":2036},[],[2038],{"type":23,"value":2039},"#{}",{"type":23,"value":2041},"与",{"type":17,"tag":293,"props":2043,"children":2045},{"className":2044},[],[2046],{"type":23,"value":2047},"${}",{"type":17,"tag":31,"props":2049,"children":2050},{},[2051,2061],{"type":17,"tag":35,"props":2052,"children":2053},{},[2054,2059],{"type":17,"tag":293,"props":2055,"children":2057},{"className":2056},[],[2058],{"type":23,"value":2039},{"type":23,"value":2060},"(常用)：本质就是占位符赋值，使用占位符的方式拼接sql，此时为字符串类型或日期类型的字段进行赋值时可以自动添加单引号",{"type":17,"tag":35,"props":2062,"children":2063},{},[2064,2069],{"type":17,"tag":293,"props":2065,"children":2067},{"className":2066},[],[2068],{"type":23,"value":2047},{"type":23,"value":2070},"：本质是字符串拼接sql，若为字符串类型或日期类型的字段进行赋值时，需要手动加单引号",{"type":17,"tag":57,"props":2072,"children":2073},{},[2074],{"type":17,"tag":86,"props":2075,"children":2076},{},[2077],{"type":23,"value":2078},"注：在3.5版本后，使用这两种方式没有太大的区别，只是需不需要加单引号",{"type":17,"tag":74,"props":2080,"children":2082},{"id":2081},"_41-单个参数",[2083],{"type":23,"value":2084},"4.1 单个参数",{"type":17,"tag":319,"props":2086,"children":2088},{"className":1376,"code":2087,"language":1378,"meta":7,"style":7},"\u003C!--public User getUserByName(String username);-->\n\u003Cselect id=\"getUserByName\" resultType=\"user\">\n    select * from t_user where username = '${username}'\n\u003C\u002Fselect>\n\n\u003Cselect id=\"getUserByName\" resultType=\"user\">\n    \u003C!--这里不需要加单引号包裹变量-->\n    select * from t_user where username = #{username}\n\u003C\u002Fselect>\n",[2089],{"type":17,"tag":293,"props":2090,"children":2091},{"__ignoreMap":7},[2092,2100,2108,2116,2124,2131,2138,2146,2154],{"type":17,"tag":329,"props":2093,"children":2094},{"class":331,"line":332},[2095],{"type":17,"tag":329,"props":2096,"children":2097},{},[2098],{"type":23,"value":2099},"\u003C!--public User getUserByName(String username);-->\n",{"type":17,"tag":329,"props":2101,"children":2102},{"class":331,"line":341},[2103],{"type":17,"tag":329,"props":2104,"children":2105},{},[2106],{"type":23,"value":2107},"\u003Cselect id=\"getUserByName\" resultType=\"user\">\n",{"type":17,"tag":329,"props":2109,"children":2110},{"class":331,"line":350},[2111],{"type":17,"tag":329,"props":2112,"children":2113},{},[2114],{"type":23,"value":2115},"    select * from t_user where username = '${username}'\n",{"type":17,"tag":329,"props":2117,"children":2118},{"class":331,"line":359},[2119],{"type":17,"tag":329,"props":2120,"children":2121},{},[2122],{"type":23,"value":2123},"\u003C\u002Fselect>\n",{"type":17,"tag":329,"props":2125,"children":2126},{"class":331,"line":368},[2127],{"type":17,"tag":329,"props":2128,"children":2129},{"emptyLinePlaceholder":542},[2130],{"type":23,"value":545},{"type":17,"tag":329,"props":2132,"children":2133},{"class":331,"line":377},[2134],{"type":17,"tag":329,"props":2135,"children":2136},{},[2137],{"type":23,"value":2107},{"type":17,"tag":329,"props":2139,"children":2140},{"class":331,"line":386},[2141],{"type":17,"tag":329,"props":2142,"children":2143},{},[2144],{"type":23,"value":2145},"    \u003C!--这里不需要加单引号包裹变量-->\n",{"type":17,"tag":329,"props":2147,"children":2148},{"class":331,"line":394},[2149],{"type":17,"tag":329,"props":2150,"children":2151},{},[2152],{"type":23,"value":2153},"    select * from t_user where username = #{username}\n",{"type":17,"tag":329,"props":2155,"children":2156},{"class":331,"line":403},[2157],{"type":17,"tag":329,"props":2158,"children":2159},{},[2160],{"type":23,"value":2123},{"type":17,"tag":74,"props":2162,"children":2164},{"id":2163},"_42-多个参数",[2165],{"type":23,"value":2166},"4.2 多个参数",{"type":17,"tag":53,"props":2168,"children":2169},{},[2170],{"type":17,"tag":57,"props":2171,"children":2172},{},[2173,2175,2180,2182,2187,2189,2194],{"type":23,"value":2174},"MyBatis会自动将这些参数放在一个map集合中，以arg0，arg1...为键，以参数为值；以param1，param2...为键，以参数为值，使用时只需要通过",{"type":17,"tag":293,"props":2176,"children":2178},{"className":2177},[],[2179],{"type":23,"value":2047},{"type":23,"value":2181},"或者",{"type":17,"tag":293,"props":2183,"children":2185},{"className":2184},[],[2186],{"type":23,"value":2039},{"type":23,"value":2188},"访问map集合中的键就可以获取对应的值，注意",{"type":17,"tag":293,"props":2190,"children":2192},{"className":2191},[],[2193],{"type":23,"value":2047},{"type":23,"value":2195},"需要手动加单引号",{"type":17,"tag":319,"props":2197,"children":2199},{"className":1376,"code":2198,"language":1378,"meta":7,"style":7},"\u003C!--public User checkLogin(String username, String password);-->\n\u003Cselect id=\"checkLogin\" resultType=\"user\">\n    select * from t_user where username = #{param1} and password = #{param2}\n\u003C\u002Fselect>\n\n\u003Cselect id=\"checkLogin\" resultType=\"user\">\n    select * from t_user where username = '${arg0}' and password = '${arg1}'\n\u003C\u002Fselect>\n",[2200],{"type":17,"tag":293,"props":2201,"children":2202},{"__ignoreMap":7},[2203,2211,2219,2227,2234,2241,2248,2256],{"type":17,"tag":329,"props":2204,"children":2205},{"class":331,"line":332},[2206],{"type":17,"tag":329,"props":2207,"children":2208},{},[2209],{"type":23,"value":2210},"\u003C!--public User checkLogin(String username, String password);-->\n",{"type":17,"tag":329,"props":2212,"children":2213},{"class":331,"line":341},[2214],{"type":17,"tag":329,"props":2215,"children":2216},{},[2217],{"type":23,"value":2218},"\u003Cselect id=\"checkLogin\" resultType=\"user\">\n",{"type":17,"tag":329,"props":2220,"children":2221},{"class":331,"line":350},[2222],{"type":17,"tag":329,"props":2223,"children":2224},{},[2225],{"type":23,"value":2226},"    select * from t_user where username = #{param1} and password = #{param2}\n",{"type":17,"tag":329,"props":2228,"children":2229},{"class":331,"line":359},[2230],{"type":17,"tag":329,"props":2231,"children":2232},{},[2233],{"type":23,"value":2123},{"type":17,"tag":329,"props":2235,"children":2236},{"class":331,"line":368},[2237],{"type":17,"tag":329,"props":2238,"children":2239},{"emptyLinePlaceholder":542},[2240],{"type":23,"value":545},{"type":17,"tag":329,"props":2242,"children":2243},{"class":331,"line":377},[2244],{"type":17,"tag":329,"props":2245,"children":2246},{},[2247],{"type":23,"value":2218},{"type":17,"tag":329,"props":2249,"children":2250},{"class":331,"line":386},[2251],{"type":17,"tag":329,"props":2252,"children":2253},{},[2254],{"type":23,"value":2255},"    select * from t_user where username = '${arg0}' and password = '${arg1}'\n",{"type":17,"tag":329,"props":2257,"children":2258},{"class":331,"line":394},[2259],{"type":17,"tag":329,"props":2260,"children":2261},{},[2262],{"type":23,"value":2123},{"type":17,"tag":74,"props":2264,"children":2266},{"id":2265},"_43-map类型参数",[2267],{"type":23,"value":2268},"4.3 Map类型参数",{"type":17,"tag":53,"props":2270,"children":2271},{},[2272,2277],{"type":17,"tag":57,"props":2273,"children":2274},{},[2275],{"type":23,"value":2276},"当有多个参数的时候，我们可以用Map收集参数，这样我们就可以定义我们自己想用的key",{"type":17,"tag":57,"props":2278,"children":2279},{},[2280],{"type":17,"tag":86,"props":2281,"children":2282},{},[2283],{"type":23,"value":2284},"注：当我们在映射文件中使用不正确的key也不会报错，只是会查不到数据",{"type":17,"tag":57,"props":2286,"children":2287},{},[2288],{"type":17,"tag":86,"props":2289,"children":2290},{},[2291],{"type":23,"value":2292},"测试类：",{"type":17,"tag":319,"props":2294,"children":2296},{"className":321,"code":2295,"language":323,"meta":7,"style":7},"@Test\npublic void checkLoginByMap() {\n    SqlSession sqlSession = SqlSessionUtil.getSqlSession();\n    UserMapper mapper = sqlSession.getMapper(UserMapper.class);\n    Map\u003CString, Object> map = new HashMap\u003C>();\n    map.put(\"username\", \"admin\");\n    map.put(\"password\", \"123456\");\n    User user = mapper.checkLoginByMap(map);\n    System.out.println(user);\n}\n",[2297],{"type":17,"tag":293,"props":2298,"children":2299},{"__ignoreMap":7},[2300,2308,2316,2324,2332,2340,2348,2356,2364,2372],{"type":17,"tag":329,"props":2301,"children":2302},{"class":331,"line":332},[2303],{"type":17,"tag":329,"props":2304,"children":2305},{},[2306],{"type":23,"value":2307},"@Test\n",{"type":17,"tag":329,"props":2309,"children":2310},{"class":331,"line":341},[2311],{"type":17,"tag":329,"props":2312,"children":2313},{},[2314],{"type":23,"value":2315},"public void checkLoginByMap() {\n",{"type":17,"tag":329,"props":2317,"children":2318},{"class":331,"line":350},[2319],{"type":17,"tag":329,"props":2320,"children":2321},{},[2322],{"type":23,"value":2323},"    SqlSession sqlSession = SqlSessionUtil.getSqlSession();\n",{"type":17,"tag":329,"props":2325,"children":2326},{"class":331,"line":359},[2327],{"type":17,"tag":329,"props":2328,"children":2329},{},[2330],{"type":23,"value":2331},"    UserMapper mapper = sqlSession.getMapper(UserMapper.class);\n",{"type":17,"tag":329,"props":2333,"children":2334},{"class":331,"line":368},[2335],{"type":17,"tag":329,"props":2336,"children":2337},{},[2338],{"type":23,"value":2339},"    Map\u003CString, Object> map = new HashMap\u003C>();\n",{"type":17,"tag":329,"props":2341,"children":2342},{"class":331,"line":377},[2343],{"type":17,"tag":329,"props":2344,"children":2345},{},[2346],{"type":23,"value":2347},"    map.put(\"username\", \"admin\");\n",{"type":17,"tag":329,"props":2349,"children":2350},{"class":331,"line":386},[2351],{"type":17,"tag":329,"props":2352,"children":2353},{},[2354],{"type":23,"value":2355},"    map.put(\"password\", \"123456\");\n",{"type":17,"tag":329,"props":2357,"children":2358},{"class":331,"line":394},[2359],{"type":17,"tag":329,"props":2360,"children":2361},{},[2362],{"type":23,"value":2363},"    User user = mapper.checkLoginByMap(map);\n",{"type":17,"tag":329,"props":2365,"children":2366},{"class":331,"line":403},[2367],{"type":17,"tag":329,"props":2368,"children":2369},{},[2370],{"type":23,"value":2371},"    System.out.println(user);\n",{"type":17,"tag":329,"props":2373,"children":2374},{"class":331,"line":412},[2375],{"type":17,"tag":329,"props":2376,"children":2377},{},[2378],{"type":23,"value":753},{"type":17,"tag":57,"props":2380,"children":2381},{},[2382],{"type":17,"tag":86,"props":2383,"children":2384},{},[2385],{"type":23,"value":2386},"映射文件：",{"type":17,"tag":319,"props":2388,"children":2390},{"className":1376,"code":2389,"language":1378,"meta":7,"style":7},"\u003C!--public User checkLoginByMap(Map\u003CString, Object> map);-->\n\u003Cselect id=\"checkLoginByMap\" resultType=\"user\">\n    select * from t_user where username = #{username} and password = #{password}\n\u003C\u002Fselect>\n",[2391],{"type":17,"tag":293,"props":2392,"children":2393},{"__ignoreMap":7},[2394,2402,2410,2418],{"type":17,"tag":329,"props":2395,"children":2396},{"class":331,"line":332},[2397],{"type":17,"tag":329,"props":2398,"children":2399},{},[2400],{"type":23,"value":2401},"\u003C!--public User checkLoginByMap(Map\u003CString, Object> map);-->\n",{"type":17,"tag":329,"props":2403,"children":2404},{"class":331,"line":341},[2405],{"type":17,"tag":329,"props":2406,"children":2407},{},[2408],{"type":23,"value":2409},"\u003Cselect id=\"checkLoginByMap\" resultType=\"user\">\n",{"type":17,"tag":329,"props":2411,"children":2412},{"class":331,"line":350},[2413],{"type":17,"tag":329,"props":2414,"children":2415},{},[2416],{"type":23,"value":2417},"    select * from t_user where username = #{username} and password = #{password}\n",{"type":17,"tag":329,"props":2419,"children":2420},{"class":331,"line":359},[2421],{"type":17,"tag":329,"props":2422,"children":2423},{},[2424],{"type":23,"value":2123},{"type":17,"tag":74,"props":2426,"children":2428},{"id":2427},"_44-实体类型参数",[2429],{"type":23,"value":2430},"4.4 实体类型参数",{"type":17,"tag":53,"props":2432,"children":2433},{},[2434,2452],{"type":17,"tag":57,"props":2435,"children":2436},{},[2437,2439,2444,2445,2450],{"type":23,"value":2438},"只需要用",{"type":17,"tag":293,"props":2440,"children":2442},{"className":2441},[],[2443],{"type":23,"value":2039},{"type":23,"value":2181},{"type":17,"tag":293,"props":2446,"children":2448},{"className":2447},[],[2449],{"type":23,"value":2047},{"type":23,"value":2451},"访问实体类型属性就可以",{"type":17,"tag":57,"props":2453,"children":2454},{},[2455],{"type":23,"value":2456},"如：新增用户信息",{"type":17,"tag":319,"props":2458,"children":2460},{"className":1376,"code":2459,"language":1378,"meta":7,"style":7},"\u003C!--public int insetUser(User user);-->\n\u003Cinsert id=\"insetUser\">\n    insert into t_user\n    values (null, #{username}, #{password}, #{age}, #{gender}, #{email})\n\u003C\u002Finsert>\n",[2461],{"type":17,"tag":293,"props":2462,"children":2463},{"__ignoreMap":7},[2464,2472,2480,2488,2496],{"type":17,"tag":329,"props":2465,"children":2466},{"class":331,"line":332},[2467],{"type":17,"tag":329,"props":2468,"children":2469},{},[2470],{"type":23,"value":2471},"\u003C!--public int insetUser(User user);-->\n",{"type":17,"tag":329,"props":2473,"children":2474},{"class":331,"line":341},[2475],{"type":17,"tag":329,"props":2476,"children":2477},{},[2478],{"type":23,"value":2479},"\u003Cinsert id=\"insetUser\">\n",{"type":17,"tag":329,"props":2481,"children":2482},{"class":331,"line":350},[2483],{"type":17,"tag":329,"props":2484,"children":2485},{},[2486],{"type":23,"value":2487},"    insert into t_user\n",{"type":17,"tag":329,"props":2489,"children":2490},{"class":331,"line":359},[2491],{"type":17,"tag":329,"props":2492,"children":2493},{},[2494],{"type":23,"value":2495},"    values (null, #{username}, #{password}, #{age}, #{gender}, #{email})\n",{"type":17,"tag":329,"props":2497,"children":2498},{"class":331,"line":368},[2499],{"type":17,"tag":329,"props":2500,"children":2501},{},[2502],{"type":23,"value":2503},"\u003C\u002Finsert>\n",{"type":17,"tag":74,"props":2505,"children":2507},{"id":2506},"_45-param注解参数",[2508],{"type":23,"value":2509},"4.5 @Param注解参数",{"type":17,"tag":57,"props":2511,"children":2512},{},[2513],{"type":17,"tag":86,"props":2514,"children":2515},{},[2516],{"type":23,"value":2517},"mapper接口：",{"type":17,"tag":319,"props":2519,"children":2521},{"className":321,"code":2520,"language":323,"meta":7,"style":7},"\u002F**\n * 根据用户名与密码注解获取用户\n * @param username\n * @param password\n * @return\n *\u002F\npublic User checkLoginByParams(@Param(\"username\") String username, @Param(\"password\") String password);\n",[2522],{"type":17,"tag":293,"props":2523,"children":2524},{"__ignoreMap":7},[2525,2533,2541,2549,2557,2565,2573],{"type":17,"tag":329,"props":2526,"children":2527},{"class":331,"line":332},[2528],{"type":17,"tag":329,"props":2529,"children":2530},{},[2531],{"type":23,"value":2532},"\u002F**\n",{"type":17,"tag":329,"props":2534,"children":2535},{"class":331,"line":341},[2536],{"type":17,"tag":329,"props":2537,"children":2538},{},[2539],{"type":23,"value":2540}," * 根据用户名与密码注解获取用户\n",{"type":17,"tag":329,"props":2542,"children":2543},{"class":331,"line":350},[2544],{"type":17,"tag":329,"props":2545,"children":2546},{},[2547],{"type":23,"value":2548}," * @param username\n",{"type":17,"tag":329,"props":2550,"children":2551},{"class":331,"line":359},[2552],{"type":17,"tag":329,"props":2553,"children":2554},{},[2555],{"type":23,"value":2556}," * @param password\n",{"type":17,"tag":329,"props":2558,"children":2559},{"class":331,"line":368},[2560],{"type":17,"tag":329,"props":2561,"children":2562},{},[2563],{"type":23,"value":2564}," * @return\n",{"type":17,"tag":329,"props":2566,"children":2567},{"class":331,"line":377},[2568],{"type":17,"tag":329,"props":2569,"children":2570},{},[2571],{"type":23,"value":2572}," *\u002F\n",{"type":17,"tag":329,"props":2574,"children":2575},{"class":331,"line":386},[2576],{"type":17,"tag":329,"props":2577,"children":2578},{},[2579],{"type":23,"value":2580},"public User checkLoginByParams(@Param(\"username\") String username, @Param(\"password\") String password);\n",{"type":17,"tag":57,"props":2582,"children":2583},{},[2584],{"type":17,"tag":86,"props":2585,"children":2586},{},[2587],{"type":23,"value":2386},{"type":17,"tag":319,"props":2589,"children":2591},{"className":321,"code":2590,"language":323,"meta":7,"style":7},"\u003C!--public User checkLoginByParams(@Param(\"username\") String username, @Param(\"password\") String password);-->\n\u003Cselect id=\"checkLoginByParams\" resultType=\"user\">\n    select * from t_user where username = #{username} and password = #{password}\n\u003C\u002Fselect>\n",[2592],{"type":17,"tag":293,"props":2593,"children":2594},{"__ignoreMap":7},[2595,2603,2611,2618],{"type":17,"tag":329,"props":2596,"children":2597},{"class":331,"line":332},[2598],{"type":17,"tag":329,"props":2599,"children":2600},{},[2601],{"type":23,"value":2602},"\u003C!--public User checkLoginByParams(@Param(\"username\") String username, @Param(\"password\") String password);-->\n",{"type":17,"tag":329,"props":2604,"children":2605},{"class":331,"line":341},[2606],{"type":17,"tag":329,"props":2607,"children":2608},{},[2609],{"type":23,"value":2610},"\u003Cselect id=\"checkLoginByParams\" resultType=\"user\">\n",{"type":17,"tag":329,"props":2612,"children":2613},{"class":331,"line":350},[2614],{"type":17,"tag":329,"props":2615,"children":2616},{},[2617],{"type":23,"value":2417},{"type":17,"tag":329,"props":2619,"children":2620},{"class":331,"line":359},[2621],{"type":17,"tag":329,"props":2622,"children":2623},{},[2624],{"type":23,"value":2123},{"type":17,"tag":74,"props":2626,"children":2628},{"id":2627},"总结",[2629],{"type":23,"value":2627},{"type":17,"tag":53,"props":2631,"children":2632},{},[2633,2638],{"type":17,"tag":57,"props":2634,"children":2635},{},[2636],{"type":23,"value":2637},"以后只用两种方式就可以",{"type":17,"tag":31,"props":2639,"children":2640},{},[2641,2651],{"type":17,"tag":35,"props":2642,"children":2643},{},[2644,2649],{"type":17,"tag":86,"props":2645,"children":2646},{},[2647],{"type":23,"value":2648},"@Param注解形式",{"type":23,"value":2650},"：单个、多个参数",{"type":17,"tag":35,"props":2652,"children":2653},{},[2654,2659],{"type":17,"tag":86,"props":2655,"children":2656},{},[2657],{"type":23,"value":2658},"实体类型参数",{"type":23,"value":2660},"：新增，修改",{"type":17,"tag":25,"props":2662,"children":2664},{"id":2663},"_5-mybatis查询功能",[2665],{"type":23,"value":2666},"5. MyBatis查询功能",{"type":17,"tag":74,"props":2668,"children":2670},{"id":2669},"_51-查询单条实体对象",[2671],{"type":23,"value":2672},"5.1 查询单条实体对象",{"type":17,"tag":57,"props":2674,"children":2675},{},[2676],{"type":17,"tag":86,"props":2677,"children":2678},{},[2679],{"type":23,"value":2517},{"type":17,"tag":319,"props":2681,"children":2683},{"className":321,"code":2682,"language":323,"meta":7,"style":7},"\u002F**\n * 根据id查询用户信息\n * @param id\n * @return\n *\u002F\npublic User getUserById(@Param(\"id\") int id);\n",[2684],{"type":17,"tag":293,"props":2685,"children":2686},{"__ignoreMap":7},[2687,2694,2702,2710,2717,2724],{"type":17,"tag":329,"props":2688,"children":2689},{"class":331,"line":332},[2690],{"type":17,"tag":329,"props":2691,"children":2692},{},[2693],{"type":23,"value":2532},{"type":17,"tag":329,"props":2695,"children":2696},{"class":331,"line":341},[2697],{"type":17,"tag":329,"props":2698,"children":2699},{},[2700],{"type":23,"value":2701}," * 根据id查询用户信息\n",{"type":17,"tag":329,"props":2703,"children":2704},{"class":331,"line":350},[2705],{"type":17,"tag":329,"props":2706,"children":2707},{},[2708],{"type":23,"value":2709}," * @param id\n",{"type":17,"tag":329,"props":2711,"children":2712},{"class":331,"line":359},[2713],{"type":17,"tag":329,"props":2714,"children":2715},{},[2716],{"type":23,"value":2564},{"type":17,"tag":329,"props":2718,"children":2719},{"class":331,"line":368},[2720],{"type":17,"tag":329,"props":2721,"children":2722},{},[2723],{"type":23,"value":2572},{"type":17,"tag":329,"props":2725,"children":2726},{"class":331,"line":377},[2727],{"type":17,"tag":329,"props":2728,"children":2729},{},[2730],{"type":23,"value":2731},"public User getUserById(@Param(\"id\") int id);\n",{"type":17,"tag":57,"props":2733,"children":2734},{},[2735],{"type":17,"tag":86,"props":2736,"children":2737},{},[2738],{"type":23,"value":2386},{"type":17,"tag":319,"props":2740,"children":2742},{"className":1376,"code":2741,"language":1378,"meta":7,"style":7},"\u003C!--public User getUserById(@Param(\"id\") int id);-->\n\u003Cselect id=\"getUserById\" resultType=\"user\">\n    select * from t_user where id = #{id}\n\u003C\u002Fselect>\n",[2743],{"type":17,"tag":293,"props":2744,"children":2745},{"__ignoreMap":7},[2746,2754,2762,2770],{"type":17,"tag":329,"props":2747,"children":2748},{"class":331,"line":332},[2749],{"type":17,"tag":329,"props":2750,"children":2751},{},[2752],{"type":23,"value":2753},"\u003C!--public User getUserById(@Param(\"id\") int id);-->\n",{"type":17,"tag":329,"props":2755,"children":2756},{"class":331,"line":341},[2757],{"type":17,"tag":329,"props":2758,"children":2759},{},[2760],{"type":23,"value":2761},"\u003Cselect id=\"getUserById\" resultType=\"user\">\n",{"type":17,"tag":329,"props":2763,"children":2764},{"class":331,"line":350},[2765],{"type":17,"tag":329,"props":2766,"children":2767},{},[2768],{"type":23,"value":2769},"    select * from t_user where id = #{id}\n",{"type":17,"tag":329,"props":2771,"children":2772},{"class":331,"line":359},[2773],{"type":17,"tag":329,"props":2774,"children":2775},{},[2776],{"type":23,"value":2123},{"type":17,"tag":57,"props":2778,"children":2779},{},[2780],{"type":17,"tag":86,"props":2781,"children":2782},{},[2783],{"type":23,"value":2292},{"type":17,"tag":319,"props":2785,"children":2787},{"className":321,"code":2786,"language":323,"meta":7,"style":7},"\u002F**\n * 根据id查询用户信息\n *\u002F\n@Test\npublic void testGetUserById() {\n    SqlSession sqlSession = SqlSessionUtil.getSqlSession();\n    SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);\n    User userById = mapper.getUserById(1);\n    System.out.println(userById);\n}\n",[2788],{"type":17,"tag":293,"props":2789,"children":2790},{"__ignoreMap":7},[2791,2798,2805,2812,2819,2827,2834,2842,2850,2858],{"type":17,"tag":329,"props":2792,"children":2793},{"class":331,"line":332},[2794],{"type":17,"tag":329,"props":2795,"children":2796},{},[2797],{"type":23,"value":2532},{"type":17,"tag":329,"props":2799,"children":2800},{"class":331,"line":341},[2801],{"type":17,"tag":329,"props":2802,"children":2803},{},[2804],{"type":23,"value":2701},{"type":17,"tag":329,"props":2806,"children":2807},{"class":331,"line":350},[2808],{"type":17,"tag":329,"props":2809,"children":2810},{},[2811],{"type":23,"value":2572},{"type":17,"tag":329,"props":2813,"children":2814},{"class":331,"line":359},[2815],{"type":17,"tag":329,"props":2816,"children":2817},{},[2818],{"type":23,"value":2307},{"type":17,"tag":329,"props":2820,"children":2821},{"class":331,"line":368},[2822],{"type":17,"tag":329,"props":2823,"children":2824},{},[2825],{"type":23,"value":2826},"public void testGetUserById() {\n",{"type":17,"tag":329,"props":2828,"children":2829},{"class":331,"line":377},[2830],{"type":17,"tag":329,"props":2831,"children":2832},{},[2833],{"type":23,"value":2323},{"type":17,"tag":329,"props":2835,"children":2836},{"class":331,"line":386},[2837],{"type":17,"tag":329,"props":2838,"children":2839},{},[2840],{"type":23,"value":2841},"    SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);\n",{"type":17,"tag":329,"props":2843,"children":2844},{"class":331,"line":394},[2845],{"type":17,"tag":329,"props":2846,"children":2847},{},[2848],{"type":23,"value":2849},"    User userById = mapper.getUserById(1);\n",{"type":17,"tag":329,"props":2851,"children":2852},{"class":331,"line":403},[2853],{"type":17,"tag":329,"props":2854,"children":2855},{},[2856],{"type":23,"value":2857},"    System.out.println(userById);\n",{"type":17,"tag":329,"props":2859,"children":2860},{"class":331,"line":412},[2861],{"type":17,"tag":329,"props":2862,"children":2863},{},[2864],{"type":23,"value":753},{"type":17,"tag":74,"props":2866,"children":2868},{"id":2867},"_52-查询一个list集合",[2869],{"type":23,"value":2870},"5.2 查询一个List集合",{"type":17,"tag":57,"props":2872,"children":2873},{},[2874],{"type":17,"tag":86,"props":2875,"children":2876},{},[2877],{"type":23,"value":2517},{"type":17,"tag":319,"props":2879,"children":2881},{"className":321,"code":2880,"language":323,"meta":7,"style":7},"\u002F**\n * 查询所有用户信息\n * @return\n *\u002F\npublic List\u003CUser> getAllUser();\n",[2882],{"type":17,"tag":293,"props":2883,"children":2884},{"__ignoreMap":7},[2885,2892,2900,2907,2914],{"type":17,"tag":329,"props":2886,"children":2887},{"class":331,"line":332},[2888],{"type":17,"tag":329,"props":2889,"children":2890},{},[2891],{"type":23,"value":2532},{"type":17,"tag":329,"props":2893,"children":2894},{"class":331,"line":341},[2895],{"type":17,"tag":329,"props":2896,"children":2897},{},[2898],{"type":23,"value":2899}," * 查询所有用户信息\n",{"type":17,"tag":329,"props":2901,"children":2902},{"class":331,"line":350},[2903],{"type":17,"tag":329,"props":2904,"children":2905},{},[2906],{"type":23,"value":2564},{"type":17,"tag":329,"props":2908,"children":2909},{"class":331,"line":359},[2910],{"type":17,"tag":329,"props":2911,"children":2912},{},[2913],{"type":23,"value":2572},{"type":17,"tag":329,"props":2915,"children":2916},{"class":331,"line":368},[2917],{"type":17,"tag":329,"props":2918,"children":2919},{},[2920],{"type":23,"value":2921},"public List\u003CUser> getAllUser();\n",{"type":17,"tag":57,"props":2923,"children":2924},{},[2925],{"type":17,"tag":86,"props":2926,"children":2927},{},[2928],{"type":23,"value":2386},{"type":17,"tag":319,"props":2930,"children":2932},{"className":1376,"code":2931,"language":1378,"meta":7,"style":7},"\u003C!--public List\u003CUser> getAllUser();-->\n\u003Cselect id=\"getAllUser\" resultType=\"user\">\n    select * from t_user\n\u003C\u002Fselect>\n",[2933],{"type":17,"tag":293,"props":2934,"children":2935},{"__ignoreMap":7},[2936,2944,2952,2960],{"type":17,"tag":329,"props":2937,"children":2938},{"class":331,"line":332},[2939],{"type":17,"tag":329,"props":2940,"children":2941},{},[2942],{"type":23,"value":2943},"\u003C!--public List\u003CUser> getAllUser();-->\n",{"type":17,"tag":329,"props":2945,"children":2946},{"class":331,"line":341},[2947],{"type":17,"tag":329,"props":2948,"children":2949},{},[2950],{"type":23,"value":2951},"\u003Cselect id=\"getAllUser\" resultType=\"user\">\n",{"type":17,"tag":329,"props":2953,"children":2954},{"class":331,"line":350},[2955],{"type":17,"tag":329,"props":2956,"children":2957},{},[2958],{"type":23,"value":2959},"    select * from t_user\n",{"type":17,"tag":329,"props":2961,"children":2962},{"class":331,"line":359},[2963],{"type":17,"tag":329,"props":2964,"children":2965},{},[2966],{"type":23,"value":2123},{"type":17,"tag":57,"props":2968,"children":2969},{},[2970],{"type":17,"tag":86,"props":2971,"children":2972},{},[2973],{"type":23,"value":2292},{"type":17,"tag":319,"props":2975,"children":2977},{"className":321,"code":2976,"language":323,"meta":7,"style":7},"\u002F**\n * 查询所有用户信息\n *\u002F\n@Test\npublic void testGetAllUser() {\n    SqlSession sqlSession = SqlSessionUtil.getSqlSession();\n    SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);\n    List\u003CUser> allUser = mapper.getAllUser();\n    for (User user : allUser) {\n        System.out.println(user);\n    }\n}\n",[2978],{"type":17,"tag":293,"props":2979,"children":2980},{"__ignoreMap":7},[2981,2988,2995,3002,3009,3017,3024,3031,3039,3047,3055,3062],{"type":17,"tag":329,"props":2982,"children":2983},{"class":331,"line":332},[2984],{"type":17,"tag":329,"props":2985,"children":2986},{},[2987],{"type":23,"value":2532},{"type":17,"tag":329,"props":2989,"children":2990},{"class":331,"line":341},[2991],{"type":17,"tag":329,"props":2992,"children":2993},{},[2994],{"type":23,"value":2899},{"type":17,"tag":329,"props":2996,"children":2997},{"class":331,"line":350},[2998],{"type":17,"tag":329,"props":2999,"children":3000},{},[3001],{"type":23,"value":2572},{"type":17,"tag":329,"props":3003,"children":3004},{"class":331,"line":359},[3005],{"type":17,"tag":329,"props":3006,"children":3007},{},[3008],{"type":23,"value":2307},{"type":17,"tag":329,"props":3010,"children":3011},{"class":331,"line":368},[3012],{"type":17,"tag":329,"props":3013,"children":3014},{},[3015],{"type":23,"value":3016},"public void testGetAllUser() {\n",{"type":17,"tag":329,"props":3018,"children":3019},{"class":331,"line":377},[3020],{"type":17,"tag":329,"props":3021,"children":3022},{},[3023],{"type":23,"value":2323},{"type":17,"tag":329,"props":3025,"children":3026},{"class":331,"line":386},[3027],{"type":17,"tag":329,"props":3028,"children":3029},{},[3030],{"type":23,"value":2841},{"type":17,"tag":329,"props":3032,"children":3033},{"class":331,"line":394},[3034],{"type":17,"tag":329,"props":3035,"children":3036},{},[3037],{"type":23,"value":3038},"    List\u003CUser> allUser = mapper.getAllUser();\n",{"type":17,"tag":329,"props":3040,"children":3041},{"class":331,"line":403},[3042],{"type":17,"tag":329,"props":3043,"children":3044},{},[3045],{"type":23,"value":3046},"    for (User user : allUser) {\n",{"type":17,"tag":329,"props":3048,"children":3049},{"class":331,"line":412},[3050],{"type":17,"tag":329,"props":3051,"children":3052},{},[3053],{"type":23,"value":3054},"        System.out.println(user);\n",{"type":17,"tag":329,"props":3056,"children":3057},{"class":331,"line":421},[3058],{"type":17,"tag":329,"props":3059,"children":3060},{},[3061],{"type":23,"value":1351},{"type":17,"tag":329,"props":3063,"children":3064},{"class":331,"line":430},[3065],{"type":17,"tag":329,"props":3066,"children":3067},{},[3068],{"type":23,"value":753},{"type":17,"tag":74,"props":3070,"children":3072},{"id":3071},"_53-查询一条为map集合",[3073],{"type":23,"value":3074},"5.3 查询一条为map集合",{"type":17,"tag":57,"props":3076,"children":3077},{},[3078],{"type":17,"tag":86,"props":3079,"children":3080},{},[3081],{"type":23,"value":2517},{"type":17,"tag":319,"props":3083,"children":3085},{"className":321,"code":3084,"language":323,"meta":7,"style":7},"\u002F**\n * 根据id查询用户信息，并以Map类型接收\n * @param id\n * @return\n *\u002F\n Map\u003CString, Object> getUserByIdToMap(@Param(\"id\") int id);\n",[3086],{"type":17,"tag":293,"props":3087,"children":3088},{"__ignoreMap":7},[3089,3096,3104,3111,3118,3125],{"type":17,"tag":329,"props":3090,"children":3091},{"class":331,"line":332},[3092],{"type":17,"tag":329,"props":3093,"children":3094},{},[3095],{"type":23,"value":2532},{"type":17,"tag":329,"props":3097,"children":3098},{"class":331,"line":341},[3099],{"type":17,"tag":329,"props":3100,"children":3101},{},[3102],{"type":23,"value":3103}," * 根据id查询用户信息，并以Map类型接收\n",{"type":17,"tag":329,"props":3105,"children":3106},{"class":331,"line":350},[3107],{"type":17,"tag":329,"props":3108,"children":3109},{},[3110],{"type":23,"value":2709},{"type":17,"tag":329,"props":3112,"children":3113},{"class":331,"line":359},[3114],{"type":17,"tag":329,"props":3115,"children":3116},{},[3117],{"type":23,"value":2564},{"type":17,"tag":329,"props":3119,"children":3120},{"class":331,"line":368},[3121],{"type":17,"tag":329,"props":3122,"children":3123},{},[3124],{"type":23,"value":2572},{"type":17,"tag":329,"props":3126,"children":3127},{"class":331,"line":377},[3128],{"type":17,"tag":329,"props":3129,"children":3130},{},[3131],{"type":23,"value":3132}," Map\u003CString, Object> getUserByIdToMap(@Param(\"id\") int id);\n",{"type":17,"tag":57,"props":3134,"children":3135},{},[3136],{"type":17,"tag":86,"props":3137,"children":3138},{},[3139],{"type":23,"value":2386},{"type":17,"tag":319,"props":3141,"children":3143},{"className":1376,"code":3142,"language":1378,"meta":7,"style":7},"\u003C!--public Map\u003CString, Object> getUserByIdToMap(@Param(\"id\") int id);-->\n\u003Cselect id=\"getUserByIdToMap\" resultType=\"map\">\n    select * from t_user where id = #{id}\n\u003C\u002Fselect>\n",[3144],{"type":17,"tag":293,"props":3145,"children":3146},{"__ignoreMap":7},[3147,3155,3163,3170],{"type":17,"tag":329,"props":3148,"children":3149},{"class":331,"line":332},[3150],{"type":17,"tag":329,"props":3151,"children":3152},{},[3153],{"type":23,"value":3154},"\u003C!--public Map\u003CString, Object> getUserByIdToMap(@Param(\"id\") int id);-->\n",{"type":17,"tag":329,"props":3156,"children":3157},{"class":331,"line":341},[3158],{"type":17,"tag":329,"props":3159,"children":3160},{},[3161],{"type":23,"value":3162},"\u003Cselect id=\"getUserByIdToMap\" resultType=\"map\">\n",{"type":17,"tag":329,"props":3164,"children":3165},{"class":331,"line":350},[3166],{"type":17,"tag":329,"props":3167,"children":3168},{},[3169],{"type":23,"value":2769},{"type":17,"tag":329,"props":3171,"children":3172},{"class":331,"line":359},[3173],{"type":17,"tag":329,"props":3174,"children":3175},{},[3176],{"type":23,"value":2123},{"type":17,"tag":57,"props":3178,"children":3179},{},[3180],{"type":17,"tag":86,"props":3181,"children":3182},{},[3183],{"type":23,"value":2292},{"type":17,"tag":319,"props":3185,"children":3187},{"className":321,"code":3186,"language":323,"meta":7,"style":7},"\u002F**\n * 根据id查询用户信息,以Map类型接收结果\n *\u002F\n@Test\npublic void testGetUserByIdToMap() {\n    SqlSession sqlSession = SqlSessionUtil.getSqlSession();\n    SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);\n    Map\u003CString, Object> userByIdToMap = mapper.getUserByIdToMap(1);\n    System.out.println(userByIdToMap);\n}\n",[3188],{"type":17,"tag":293,"props":3189,"children":3190},{"__ignoreMap":7},[3191,3198,3206,3213,3220,3228,3235,3242,3250,3258],{"type":17,"tag":329,"props":3192,"children":3193},{"class":331,"line":332},[3194],{"type":17,"tag":329,"props":3195,"children":3196},{},[3197],{"type":23,"value":2532},{"type":17,"tag":329,"props":3199,"children":3200},{"class":331,"line":341},[3201],{"type":17,"tag":329,"props":3202,"children":3203},{},[3204],{"type":23,"value":3205}," * 根据id查询用户信息,以Map类型接收结果\n",{"type":17,"tag":329,"props":3207,"children":3208},{"class":331,"line":350},[3209],{"type":17,"tag":329,"props":3210,"children":3211},{},[3212],{"type":23,"value":2572},{"type":17,"tag":329,"props":3214,"children":3215},{"class":331,"line":359},[3216],{"type":17,"tag":329,"props":3217,"children":3218},{},[3219],{"type":23,"value":2307},{"type":17,"tag":329,"props":3221,"children":3222},{"class":331,"line":368},[3223],{"type":17,"tag":329,"props":3224,"children":3225},{},[3226],{"type":23,"value":3227},"public void testGetUserByIdToMap() {\n",{"type":17,"tag":329,"props":3229,"children":3230},{"class":331,"line":377},[3231],{"type":17,"tag":329,"props":3232,"children":3233},{},[3234],{"type":23,"value":2323},{"type":17,"tag":329,"props":3236,"children":3237},{"class":331,"line":386},[3238],{"type":17,"tag":329,"props":3239,"children":3240},{},[3241],{"type":23,"value":2841},{"type":17,"tag":329,"props":3243,"children":3244},{"class":331,"line":394},[3245],{"type":17,"tag":329,"props":3246,"children":3247},{},[3248],{"type":23,"value":3249},"    Map\u003CString, Object> userByIdToMap = mapper.getUserByIdToMap(1);\n",{"type":17,"tag":329,"props":3251,"children":3252},{"class":331,"line":403},[3253],{"type":17,"tag":329,"props":3254,"children":3255},{},[3256],{"type":23,"value":3257},"    System.out.println(userByIdToMap);\n",{"type":17,"tag":329,"props":3259,"children":3260},{"class":331,"line":412},[3261],{"type":17,"tag":329,"props":3262,"children":3263},{},[3264],{"type":23,"value":753},{"type":17,"tag":74,"props":3266,"children":3268},{"id":3267},"_54-查询一条为map集合",[3269],{"type":23,"value":3270},"5.4 查询一条为map集合",{"type":17,"tag":3272,"props":3273,"children":3275},"h5",{"id":3274},"方式一用list集合",[3276],{"type":23,"value":3277},"方式一：用List集合",{"type":17,"tag":53,"props":3279,"children":3280},{},[3281],{"type":17,"tag":57,"props":3282,"children":3283},{},[3284,3286],{"type":23,"value":3285},"用map类型的list集合来接收结果，",{"type":17,"tag":86,"props":3287,"children":3288},{},[3289],{"type":23,"value":3290},"日常开发常用",{"type":17,"tag":57,"props":3292,"children":3293},{},[3294],{"type":17,"tag":86,"props":3295,"children":3296},{},[3297],{"type":23,"value":2517},{"type":17,"tag":319,"props":3299,"children":3301},{"className":321,"code":3300,"language":323,"meta":7,"style":7},"\u002F**\n * 查询所有用户信息,用Map类型List集合来接收结果\n *\u002F\n List\u003CMap\u003CString, Object>> getAllUserToMap();\n",[3302],{"type":17,"tag":293,"props":3303,"children":3304},{"__ignoreMap":7},[3305,3312,3320,3327],{"type":17,"tag":329,"props":3306,"children":3307},{"class":331,"line":332},[3308],{"type":17,"tag":329,"props":3309,"children":3310},{},[3311],{"type":23,"value":2532},{"type":17,"tag":329,"props":3313,"children":3314},{"class":331,"line":341},[3315],{"type":17,"tag":329,"props":3316,"children":3317},{},[3318],{"type":23,"value":3319}," * 查询所有用户信息,用Map类型List集合来接收结果\n",{"type":17,"tag":329,"props":3321,"children":3322},{"class":331,"line":350},[3323],{"type":17,"tag":329,"props":3324,"children":3325},{},[3326],{"type":23,"value":2572},{"type":17,"tag":329,"props":3328,"children":3329},{"class":331,"line":359},[3330],{"type":17,"tag":329,"props":3331,"children":3332},{},[3333],{"type":23,"value":3334}," List\u003CMap\u003CString, Object>> getAllUserToMap();\n",{"type":17,"tag":57,"props":3336,"children":3337},{},[3338],{"type":17,"tag":86,"props":3339,"children":3340},{},[3341],{"type":23,"value":2386},{"type":17,"tag":319,"props":3343,"children":3345},{"className":1376,"code":3344,"language":1378,"meta":7,"style":7},"\u003C!--List\u003CMap\u003CString, Object>> getAllUserToMap();-->\n\u003Cselect id=\"getAllUserToMap\" resultType=\"map\">\n    select * from t_user\n\u003C\u002Fselect>\n",[3346],{"type":17,"tag":293,"props":3347,"children":3348},{"__ignoreMap":7},[3349,3357,3365,3372],{"type":17,"tag":329,"props":3350,"children":3351},{"class":331,"line":332},[3352],{"type":17,"tag":329,"props":3353,"children":3354},{},[3355],{"type":23,"value":3356},"\u003C!--List\u003CMap\u003CString, Object>> getAllUserToMap();-->\n",{"type":17,"tag":329,"props":3358,"children":3359},{"class":331,"line":341},[3360],{"type":17,"tag":329,"props":3361,"children":3362},{},[3363],{"type":23,"value":3364},"\u003Cselect id=\"getAllUserToMap\" resultType=\"map\">\n",{"type":17,"tag":329,"props":3366,"children":3367},{"class":331,"line":350},[3368],{"type":17,"tag":329,"props":3369,"children":3370},{},[3371],{"type":23,"value":2959},{"type":17,"tag":329,"props":3373,"children":3374},{"class":331,"line":359},[3375],{"type":17,"tag":329,"props":3376,"children":3377},{},[3378],{"type":23,"value":2123},{"type":17,"tag":57,"props":3380,"children":3381},{},[3382],{"type":17,"tag":86,"props":3383,"children":3384},{},[3385],{"type":23,"value":2292},{"type":17,"tag":319,"props":3387,"children":3389},{"className":321,"code":3388,"language":323,"meta":7,"style":7},"\u002F**\n * 查询所有用户信息,用map类型的list集合接收\n *\u002F\n@Test\npublic void testGetAllUserToMap() {\n    SqlSession sqlSession = SqlSessionUtil.getSqlSession();\n    SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);\n    List\u003CMap\u003CString, Object>> allUserToMap = mapper.getAllUserToMap();\n    for (Map\u003CString, Object> stringObjectMap : allUserToMap) {\n        System.out.println(stringObjectMap);\n    }\n}\n",[3390],{"type":17,"tag":293,"props":3391,"children":3392},{"__ignoreMap":7},[3393,3400,3408,3415,3422,3430,3437,3444,3452,3460,3468,3475],{"type":17,"tag":329,"props":3394,"children":3395},{"class":331,"line":332},[3396],{"type":17,"tag":329,"props":3397,"children":3398},{},[3399],{"type":23,"value":2532},{"type":17,"tag":329,"props":3401,"children":3402},{"class":331,"line":341},[3403],{"type":17,"tag":329,"props":3404,"children":3405},{},[3406],{"type":23,"value":3407}," * 查询所有用户信息,用map类型的list集合接收\n",{"type":17,"tag":329,"props":3409,"children":3410},{"class":331,"line":350},[3411],{"type":17,"tag":329,"props":3412,"children":3413},{},[3414],{"type":23,"value":2572},{"type":17,"tag":329,"props":3416,"children":3417},{"class":331,"line":359},[3418],{"type":17,"tag":329,"props":3419,"children":3420},{},[3421],{"type":23,"value":2307},{"type":17,"tag":329,"props":3423,"children":3424},{"class":331,"line":368},[3425],{"type":17,"tag":329,"props":3426,"children":3427},{},[3428],{"type":23,"value":3429},"public void testGetAllUserToMap() {\n",{"type":17,"tag":329,"props":3431,"children":3432},{"class":331,"line":377},[3433],{"type":17,"tag":329,"props":3434,"children":3435},{},[3436],{"type":23,"value":2323},{"type":17,"tag":329,"props":3438,"children":3439},{"class":331,"line":386},[3440],{"type":17,"tag":329,"props":3441,"children":3442},{},[3443],{"type":23,"value":2841},{"type":17,"tag":329,"props":3445,"children":3446},{"class":331,"line":394},[3447],{"type":17,"tag":329,"props":3448,"children":3449},{},[3450],{"type":23,"value":3451},"    List\u003CMap\u003CString, Object>> allUserToMap = mapper.getAllUserToMap();\n",{"type":17,"tag":329,"props":3453,"children":3454},{"class":331,"line":403},[3455],{"type":17,"tag":329,"props":3456,"children":3457},{},[3458],{"type":23,"value":3459},"    for (Map\u003CString, Object> stringObjectMap : allUserToMap) {\n",{"type":17,"tag":329,"props":3461,"children":3462},{"class":331,"line":412},[3463],{"type":17,"tag":329,"props":3464,"children":3465},{},[3466],{"type":23,"value":3467},"        System.out.println(stringObjectMap);\n",{"type":17,"tag":329,"props":3469,"children":3470},{"class":331,"line":421},[3471],{"type":17,"tag":329,"props":3472,"children":3473},{},[3474],{"type":23,"value":1351},{"type":17,"tag":329,"props":3476,"children":3477},{"class":331,"line":430},[3478],{"type":17,"tag":329,"props":3479,"children":3480},{},[3481],{"type":23,"value":753},{"type":17,"tag":3272,"props":3483,"children":3485},{"id":3484},"方式二依旧使用map集合",[3486],{"type":23,"value":3487},"方式二：依旧使用Map集合",{"type":17,"tag":53,"props":3489,"children":3490},{},[3491],{"type":17,"tag":57,"props":3492,"children":3493},{},[3494],{"type":23,"value":3495},"将每条数据转换的map集合放在一个大map中，但必要要通过**@MapKey注解**，将查询的某个字段的值作为大的map的键·",{"type":17,"tag":57,"props":3497,"children":3498},{},[3499],{"type":17,"tag":86,"props":3500,"children":3501},{},[3502],{"type":23,"value":2517},{"type":17,"tag":319,"props":3504,"children":3506},{"className":321,"code":3505,"language":323,"meta":7,"style":7},"@MapKey(\"id\")\nMap\u003CString, Object> getAllUserToMap();\n",[3507],{"type":17,"tag":293,"props":3508,"children":3509},{"__ignoreMap":7},[3510,3518],{"type":17,"tag":329,"props":3511,"children":3512},{"class":331,"line":332},[3513],{"type":17,"tag":329,"props":3514,"children":3515},{},[3516],{"type":23,"value":3517},"@MapKey(\"id\")\n",{"type":17,"tag":329,"props":3519,"children":3520},{"class":331,"line":341},[3521],{"type":17,"tag":329,"props":3522,"children":3523},{},[3524],{"type":23,"value":3525},"Map\u003CString, Object> getAllUserToMap();\n",{"type":17,"tag":57,"props":3527,"children":3528},{},[3529],{"type":17,"tag":86,"props":3530,"children":3531},{},[3532],{"type":23,"value":2386},{"type":17,"tag":319,"props":3534,"children":3536},{"className":1376,"code":3535,"language":1378,"meta":7,"style":7},"\u003Cselect id=\"getAllUserToMap\" resultType=\"map\">\n    select * from t_user\n\u003C\u002Fselect>\n",[3537],{"type":17,"tag":293,"props":3538,"children":3539},{"__ignoreMap":7},[3540,3547,3554],{"type":17,"tag":329,"props":3541,"children":3542},{"class":331,"line":332},[3543],{"type":17,"tag":329,"props":3544,"children":3545},{},[3546],{"type":23,"value":3364},{"type":17,"tag":329,"props":3548,"children":3549},{"class":331,"line":341},[3550],{"type":17,"tag":329,"props":3551,"children":3552},{},[3553],{"type":23,"value":2959},{"type":17,"tag":329,"props":3555,"children":3556},{"class":331,"line":350},[3557],{"type":17,"tag":329,"props":3558,"children":3559},{},[3560],{"type":23,"value":2123},{"type":17,"tag":57,"props":3562,"children":3563},{},[3564],{"type":17,"tag":86,"props":3565,"children":3566},{},[3567],{"type":23,"value":2292},{"type":17,"tag":319,"props":3569,"children":3571},{"className":321,"code":3570,"language":323,"meta":7,"style":7},"@Test\npublic void testGetAllUserToMap() {\n\n    SqlSession sqlSession = SqlSessionUtil.getSqlSession();\n    SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);\n    Map\u003CString, Object> allUserToMap = mapper.getAllUserToMap();\n    System.out.println(allUserToMap);\n  \n}\n",[3572],{"type":17,"tag":293,"props":3573,"children":3574},{"__ignoreMap":7},[3575,3582,3589,3596,3603,3610,3618,3626,3633],{"type":17,"tag":329,"props":3576,"children":3577},{"class":331,"line":332},[3578],{"type":17,"tag":329,"props":3579,"children":3580},{},[3581],{"type":23,"value":2307},{"type":17,"tag":329,"props":3583,"children":3584},{"class":331,"line":341},[3585],{"type":17,"tag":329,"props":3586,"children":3587},{},[3588],{"type":23,"value":3429},{"type":17,"tag":329,"props":3590,"children":3591},{"class":331,"line":350},[3592],{"type":17,"tag":329,"props":3593,"children":3594},{"emptyLinePlaceholder":542},[3595],{"type":23,"value":545},{"type":17,"tag":329,"props":3597,"children":3598},{"class":331,"line":359},[3599],{"type":17,"tag":329,"props":3600,"children":3601},{},[3602],{"type":23,"value":2323},{"type":17,"tag":329,"props":3604,"children":3605},{"class":331,"line":368},[3606],{"type":17,"tag":329,"props":3607,"children":3608},{},[3609],{"type":23,"value":2841},{"type":17,"tag":329,"props":3611,"children":3612},{"class":331,"line":377},[3613],{"type":17,"tag":329,"props":3614,"children":3615},{},[3616],{"type":23,"value":3617},"    Map\u003CString, Object> allUserToMap = mapper.getAllUserToMap();\n",{"type":17,"tag":329,"props":3619,"children":3620},{"class":331,"line":386},[3621],{"type":17,"tag":329,"props":3622,"children":3623},{},[3624],{"type":23,"value":3625},"    System.out.println(allUserToMap);\n",{"type":17,"tag":329,"props":3627,"children":3628},{"class":331,"line":394},[3629],{"type":17,"tag":329,"props":3630,"children":3631},{},[3632],{"type":23,"value":1602},{"type":17,"tag":329,"props":3634,"children":3635},{"class":331,"line":403},[3636],{"type":17,"tag":329,"props":3637,"children":3638},{},[3639],{"type":23,"value":753},{"type":17,"tag":25,"props":3641,"children":3643},{"id":3642},"_6-特殊的sql执行",[3644],{"type":23,"value":3645},"6. 特殊的SQL执行",{"type":17,"tag":74,"props":3647,"children":3649},{"id":3648},"_61-模糊查询",[3650],{"type":23,"value":3651},"6.1 模糊查询",{"type":17,"tag":53,"props":3653,"children":3654},{},[3655],{"type":17,"tag":57,"props":3656,"children":3657},{},[3658],{"type":23,"value":3659},"模糊查询需要使用单引号包括like条件，不能使用#{}，因为#{}本质是占位符?，并且还是在单引号里，?不会被当成占位符，而是字符串",{"type":17,"tag":57,"props":3661,"children":3662},{},[3663],{"type":17,"tag":86,"props":3664,"children":3665},{},[3666],{"type":23,"value":2517},{"type":17,"tag":319,"props":3668,"children":3670},{"className":321,"code":3669,"language":323,"meta":7,"style":7},"\u002F**\n * 模糊查询username\n * @param mohu\n * @return\n *\u002F\npublic List\u003CUser> getUserByLike(@Param(\"mohu\") String mohu);\n",[3671],{"type":17,"tag":293,"props":3672,"children":3673},{"__ignoreMap":7},[3674,3681,3689,3697,3704,3711],{"type":17,"tag":329,"props":3675,"children":3676},{"class":331,"line":332},[3677],{"type":17,"tag":329,"props":3678,"children":3679},{},[3680],{"type":23,"value":2532},{"type":17,"tag":329,"props":3682,"children":3683},{"class":331,"line":341},[3684],{"type":17,"tag":329,"props":3685,"children":3686},{},[3687],{"type":23,"value":3688}," * 模糊查询username\n",{"type":17,"tag":329,"props":3690,"children":3691},{"class":331,"line":350},[3692],{"type":17,"tag":329,"props":3693,"children":3694},{},[3695],{"type":23,"value":3696}," * @param mohu\n",{"type":17,"tag":329,"props":3698,"children":3699},{"class":331,"line":359},[3700],{"type":17,"tag":329,"props":3701,"children":3702},{},[3703],{"type":23,"value":2564},{"type":17,"tag":329,"props":3705,"children":3706},{"class":331,"line":368},[3707],{"type":17,"tag":329,"props":3708,"children":3709},{},[3710],{"type":23,"value":2572},{"type":17,"tag":329,"props":3712,"children":3713},{"class":331,"line":377},[3714],{"type":17,"tag":329,"props":3715,"children":3716},{},[3717],{"type":23,"value":3718},"public List\u003CUser> getUserByLike(@Param(\"mohu\") String mohu);\n",{"type":17,"tag":57,"props":3720,"children":3721},{},[3722],{"type":17,"tag":86,"props":3723,"children":3724},{},[3725],{"type":23,"value":2386},{"type":17,"tag":319,"props":3727,"children":3729},{"className":1376,"code":3728,"language":1378,"meta":7,"style":7},"\u003C!--public List\u003CUser> getUserByLike(@Param(\"mohu\") String mohu);-->\n\u003Cselect id=\"getUserByLike\" resultType=\"user\">\n    \u003C!--方式一：-->\n    \u003C!--select * from t_user where username like '%${mohu}%'-->\n    \u003C!--方式二：-->\n    select * from t_user where username like \"%\"#{mohu}\"%\"\n\u003C\u002Fselect>\n",[3730],{"type":17,"tag":293,"props":3731,"children":3732},{"__ignoreMap":7},[3733,3741,3749,3757,3765,3773,3781],{"type":17,"tag":329,"props":3734,"children":3735},{"class":331,"line":332},[3736],{"type":17,"tag":329,"props":3737,"children":3738},{},[3739],{"type":23,"value":3740},"\u003C!--public List\u003CUser> getUserByLike(@Param(\"mohu\") String mohu);-->\n",{"type":17,"tag":329,"props":3742,"children":3743},{"class":331,"line":341},[3744],{"type":17,"tag":329,"props":3745,"children":3746},{},[3747],{"type":23,"value":3748},"\u003Cselect id=\"getUserByLike\" resultType=\"user\">\n",{"type":17,"tag":329,"props":3750,"children":3751},{"class":331,"line":350},[3752],{"type":17,"tag":329,"props":3753,"children":3754},{},[3755],{"type":23,"value":3756},"    \u003C!--方式一：-->\n",{"type":17,"tag":329,"props":3758,"children":3759},{"class":331,"line":359},[3760],{"type":17,"tag":329,"props":3761,"children":3762},{},[3763],{"type":23,"value":3764},"    \u003C!--select * from t_user where username like '%${mohu}%'-->\n",{"type":17,"tag":329,"props":3766,"children":3767},{"class":331,"line":368},[3768],{"type":17,"tag":329,"props":3769,"children":3770},{},[3771],{"type":23,"value":3772},"    \u003C!--方式二：-->\n",{"type":17,"tag":329,"props":3774,"children":3775},{"class":331,"line":377},[3776],{"type":17,"tag":329,"props":3777,"children":3778},{},[3779],{"type":23,"value":3780},"    select * from t_user where username like \"%\"#{mohu}\"%\"\n",{"type":17,"tag":329,"props":3782,"children":3783},{"class":331,"line":386},[3784],{"type":17,"tag":329,"props":3785,"children":3786},{},[3787],{"type":23,"value":2123},{"type":17,"tag":57,"props":3789,"children":3790},{},[3791],{"type":17,"tag":86,"props":3792,"children":3793},{},[3794],{"type":23,"value":2292},{"type":17,"tag":319,"props":3796,"children":3798},{"className":321,"code":3797,"language":323,"meta":7,"style":7},"@Test\npublic void getUserByLike() {\n  \n    SqlSession sqlSession = SqlSessionUtil.getSqlSession();\n    SpecialSQLMapper mapper = sqlSession.getMapper(SpecialSQLMapper.class);\n    List\u003CUser> list = mapper.getUserByLike(\"a\");\n    for (User user : list) {\n        System.out.println(user);\n    }\n}\n",[3799],{"type":17,"tag":293,"props":3800,"children":3801},{"__ignoreMap":7},[3802,3809,3817,3824,3831,3839,3847,3855,3862,3869],{"type":17,"tag":329,"props":3803,"children":3804},{"class":331,"line":332},[3805],{"type":17,"tag":329,"props":3806,"children":3807},{},[3808],{"type":23,"value":2307},{"type":17,"tag":329,"props":3810,"children":3811},{"class":331,"line":341},[3812],{"type":17,"tag":329,"props":3813,"children":3814},{},[3815],{"type":23,"value":3816},"public void getUserByLike() {\n",{"type":17,"tag":329,"props":3818,"children":3819},{"class":331,"line":350},[3820],{"type":17,"tag":329,"props":3821,"children":3822},{},[3823],{"type":23,"value":1602},{"type":17,"tag":329,"props":3825,"children":3826},{"class":331,"line":359},[3827],{"type":17,"tag":329,"props":3828,"children":3829},{},[3830],{"type":23,"value":2323},{"type":17,"tag":329,"props":3832,"children":3833},{"class":331,"line":368},[3834],{"type":17,"tag":329,"props":3835,"children":3836},{},[3837],{"type":23,"value":3838},"    SpecialSQLMapper mapper = sqlSession.getMapper(SpecialSQLMapper.class);\n",{"type":17,"tag":329,"props":3840,"children":3841},{"class":331,"line":377},[3842],{"type":17,"tag":329,"props":3843,"children":3844},{},[3845],{"type":23,"value":3846},"    List\u003CUser> list = mapper.getUserByLike(\"a\");\n",{"type":17,"tag":329,"props":3848,"children":3849},{"class":331,"line":386},[3850],{"type":17,"tag":329,"props":3851,"children":3852},{},[3853],{"type":23,"value":3854},"    for (User user : list) {\n",{"type":17,"tag":329,"props":3856,"children":3857},{"class":331,"line":394},[3858],{"type":17,"tag":329,"props":3859,"children":3860},{},[3861],{"type":23,"value":3054},{"type":17,"tag":329,"props":3863,"children":3864},{"class":331,"line":403},[3865],{"type":17,"tag":329,"props":3866,"children":3867},{},[3868],{"type":23,"value":1351},{"type":17,"tag":329,"props":3870,"children":3871},{"class":331,"line":412},[3872],{"type":17,"tag":329,"props":3873,"children":3874},{},[3875],{"type":23,"value":753},{"type":17,"tag":74,"props":3877,"children":3879},{"id":3878},"_62-批量删除",[3880],{"type":23,"value":3881},"6.2 批量删除",{"type":17,"tag":57,"props":3883,"children":3884},{},[3885],{"type":17,"tag":86,"props":3886,"children":3887},{},[3888],{"type":23,"value":2517},{"type":17,"tag":319,"props":3890,"children":3892},{"className":321,"code":3891,"language":323,"meta":7,"style":7},"\u002F**\n * 批量删除用户信息\n * @param ids\n *\u002F\npublic void delUserByIds(@Param(\"ids\") String ids);\n",[3893],{"type":17,"tag":293,"props":3894,"children":3895},{"__ignoreMap":7},[3896,3903,3911,3919,3926],{"type":17,"tag":329,"props":3897,"children":3898},{"class":331,"line":332},[3899],{"type":17,"tag":329,"props":3900,"children":3901},{},[3902],{"type":23,"value":2532},{"type":17,"tag":329,"props":3904,"children":3905},{"class":331,"line":341},[3906],{"type":17,"tag":329,"props":3907,"children":3908},{},[3909],{"type":23,"value":3910}," * 批量删除用户信息\n",{"type":17,"tag":329,"props":3912,"children":3913},{"class":331,"line":350},[3914],{"type":17,"tag":329,"props":3915,"children":3916},{},[3917],{"type":23,"value":3918}," * @param ids\n",{"type":17,"tag":329,"props":3920,"children":3921},{"class":331,"line":359},[3922],{"type":17,"tag":329,"props":3923,"children":3924},{},[3925],{"type":23,"value":2572},{"type":17,"tag":329,"props":3927,"children":3928},{"class":331,"line":368},[3929],{"type":17,"tag":329,"props":3930,"children":3931},{},[3932],{"type":23,"value":3933},"public void delUserByIds(@Param(\"ids\") String ids);\n",{"type":17,"tag":57,"props":3935,"children":3936},{},[3937],{"type":17,"tag":86,"props":3938,"children":3939},{},[3940],{"type":23,"value":2386},{"type":17,"tag":319,"props":3942,"children":3944},{"className":1376,"code":3943,"language":1378,"meta":7,"style":7},"\u003C!--public void delUserByIds(@Param(\"ids\") String ids);-->\n\u003Cdelete id=\"delUserByIds\">\n    delete from t_user where id in(${ids})\n\u003C\u002Fdelete>\n",[3945],{"type":17,"tag":293,"props":3946,"children":3947},{"__ignoreMap":7},[3948,3956,3964,3972],{"type":17,"tag":329,"props":3949,"children":3950},{"class":331,"line":332},[3951],{"type":17,"tag":329,"props":3952,"children":3953},{},[3954],{"type":23,"value":3955},"\u003C!--public void delUserByIds(@Param(\"ids\") String ids);-->\n",{"type":17,"tag":329,"props":3957,"children":3958},{"class":331,"line":341},[3959],{"type":17,"tag":329,"props":3960,"children":3961},{},[3962],{"type":23,"value":3963},"\u003Cdelete id=\"delUserByIds\">\n",{"type":17,"tag":329,"props":3965,"children":3966},{"class":331,"line":350},[3967],{"type":17,"tag":329,"props":3968,"children":3969},{},[3970],{"type":23,"value":3971},"    delete from t_user where id in(${ids})\n",{"type":17,"tag":329,"props":3973,"children":3974},{"class":331,"line":359},[3975],{"type":17,"tag":329,"props":3976,"children":3977},{},[3978],{"type":23,"value":3979},"\u003C\u002Fdelete>\n",{"type":17,"tag":57,"props":3981,"children":3982},{},[3983],{"type":17,"tag":86,"props":3984,"children":3985},{},[3986],{"type":23,"value":2292},{"type":17,"tag":319,"props":3988,"children":3990},{"className":321,"code":3989,"language":323,"meta":7,"style":7},"\u002F**\n * 批量删除\n *\u002F\n@Test\npublic void delUserByIds() {\n    SqlSession sqlSession = SqlSessionUtil.getSqlSession();\n    SpecialSQLMapper mapper = sqlSession.getMapper(SpecialSQLMapper.class);\n    mapper.delUserByIds(\"4,5\");\n}\n",[3991],{"type":17,"tag":293,"props":3992,"children":3993},{"__ignoreMap":7},[3994,4001,4009,4016,4023,4031,4038,4045,4053],{"type":17,"tag":329,"props":3995,"children":3996},{"class":331,"line":332},[3997],{"type":17,"tag":329,"props":3998,"children":3999},{},[4000],{"type":23,"value":2532},{"type":17,"tag":329,"props":4002,"children":4003},{"class":331,"line":341},[4004],{"type":17,"tag":329,"props":4005,"children":4006},{},[4007],{"type":23,"value":4008}," * 批量删除\n",{"type":17,"tag":329,"props":4010,"children":4011},{"class":331,"line":350},[4012],{"type":17,"tag":329,"props":4013,"children":4014},{},[4015],{"type":23,"value":2572},{"type":17,"tag":329,"props":4017,"children":4018},{"class":331,"line":359},[4019],{"type":17,"tag":329,"props":4020,"children":4021},{},[4022],{"type":23,"value":2307},{"type":17,"tag":329,"props":4024,"children":4025},{"class":331,"line":368},[4026],{"type":17,"tag":329,"props":4027,"children":4028},{},[4029],{"type":23,"value":4030},"public void delUserByIds() {\n",{"type":17,"tag":329,"props":4032,"children":4033},{"class":331,"line":377},[4034],{"type":17,"tag":329,"props":4035,"children":4036},{},[4037],{"type":23,"value":2323},{"type":17,"tag":329,"props":4039,"children":4040},{"class":331,"line":386},[4041],{"type":17,"tag":329,"props":4042,"children":4043},{},[4044],{"type":23,"value":3838},{"type":17,"tag":329,"props":4046,"children":4047},{"class":331,"line":394},[4048],{"type":17,"tag":329,"props":4049,"children":4050},{},[4051],{"type":23,"value":4052},"    mapper.delUserByIds(\"4,5\");\n",{"type":17,"tag":329,"props":4054,"children":4055},{"class":331,"line":403},[4056],{"type":17,"tag":329,"props":4057,"children":4058},{},[4059],{"type":23,"value":753},{"type":17,"tag":74,"props":4061,"children":4063},{"id":4062},"_63-动态设置表名",[4064],{"type":23,"value":4065},"6.3 动态设置表名",{"type":17,"tag":57,"props":4067,"children":4068},{},[4069],{"type":17,"tag":86,"props":4070,"children":4071},{},[4072],{"type":23,"value":2517},{"type":17,"tag":319,"props":4074,"children":4076},{"className":321,"code":4075,"language":323,"meta":7,"style":7},"\u002F**\n * 根据表名获取所有用户信息\n * @param tableName\n *\u002F\npublic List\u003CUser> getAllUserByTableName(@Param(\"tableName\") String tableName);\n",[4077],{"type":17,"tag":293,"props":4078,"children":4079},{"__ignoreMap":7},[4080,4087,4095,4103,4110],{"type":17,"tag":329,"props":4081,"children":4082},{"class":331,"line":332},[4083],{"type":17,"tag":329,"props":4084,"children":4085},{},[4086],{"type":23,"value":2532},{"type":17,"tag":329,"props":4088,"children":4089},{"class":331,"line":341},[4090],{"type":17,"tag":329,"props":4091,"children":4092},{},[4093],{"type":23,"value":4094}," * 根据表名获取所有用户信息\n",{"type":17,"tag":329,"props":4096,"children":4097},{"class":331,"line":350},[4098],{"type":17,"tag":329,"props":4099,"children":4100},{},[4101],{"type":23,"value":4102}," * @param tableName\n",{"type":17,"tag":329,"props":4104,"children":4105},{"class":331,"line":359},[4106],{"type":17,"tag":329,"props":4107,"children":4108},{},[4109],{"type":23,"value":2572},{"type":17,"tag":329,"props":4111,"children":4112},{"class":331,"line":368},[4113],{"type":17,"tag":329,"props":4114,"children":4115},{},[4116],{"type":23,"value":4117},"public List\u003CUser> getAllUserByTableName(@Param(\"tableName\") String tableName);\n",{"type":17,"tag":57,"props":4119,"children":4120},{},[4121],{"type":17,"tag":86,"props":4122,"children":4123},{},[4124],{"type":23,"value":2386},{"type":17,"tag":319,"props":4126,"children":4128},{"className":1376,"code":4127,"language":1378,"meta":7,"style":7},"\u003C!--public List\u003CUser> getAllUserByTableName(@Param(\"tableName\") String tableName);-->\n\u003Cselect id=\"getAllUserByTableName\" resultType=\"user\">\n    select * from ${tableName}\n\u003C\u002Fselect>\n",[4129],{"type":17,"tag":293,"props":4130,"children":4131},{"__ignoreMap":7},[4132,4140,4148,4156],{"type":17,"tag":329,"props":4133,"children":4134},{"class":331,"line":332},[4135],{"type":17,"tag":329,"props":4136,"children":4137},{},[4138],{"type":23,"value":4139},"\u003C!--public List\u003CUser> getAllUserByTableName(@Param(\"tableName\") String tableName);-->\n",{"type":17,"tag":329,"props":4141,"children":4142},{"class":331,"line":341},[4143],{"type":17,"tag":329,"props":4144,"children":4145},{},[4146],{"type":23,"value":4147},"\u003Cselect id=\"getAllUserByTableName\" resultType=\"user\">\n",{"type":17,"tag":329,"props":4149,"children":4150},{"class":331,"line":350},[4151],{"type":17,"tag":329,"props":4152,"children":4153},{},[4154],{"type":23,"value":4155},"    select * from ${tableName}\n",{"type":17,"tag":329,"props":4157,"children":4158},{"class":331,"line":359},[4159],{"type":17,"tag":329,"props":4160,"children":4161},{},[4162],{"type":23,"value":2123},{"type":17,"tag":57,"props":4164,"children":4165},{},[4166],{"type":17,"tag":86,"props":4167,"children":4168},{},[4169],{"type":23,"value":2292},{"type":17,"tag":319,"props":4171,"children":4173},{"className":321,"code":4172,"language":323,"meta":7,"style":7},"\u002F**\n * 根据表名查询所有用户信息\n *\u002F\n@Test\npublic void getAllUserByTableName() {\n    SqlSession sqlSession = SqlSessionUtil.getSqlSession();\n    SpecialSQLMapper mapper = sqlSession.getMapper(SpecialSQLMapper.class);\n\n    List\u003CUser> t_user = mapper.getAllUserByTableName(\"t_user\");\n    t_user.forEach(System.out::println);\n}\n",[4174],{"type":17,"tag":293,"props":4175,"children":4176},{"__ignoreMap":7},[4177,4184,4192,4199,4206,4214,4221,4228,4235,4243,4251],{"type":17,"tag":329,"props":4178,"children":4179},{"class":331,"line":332},[4180],{"type":17,"tag":329,"props":4181,"children":4182},{},[4183],{"type":23,"value":2532},{"type":17,"tag":329,"props":4185,"children":4186},{"class":331,"line":341},[4187],{"type":17,"tag":329,"props":4188,"children":4189},{},[4190],{"type":23,"value":4191}," * 根据表名查询所有用户信息\n",{"type":17,"tag":329,"props":4193,"children":4194},{"class":331,"line":350},[4195],{"type":17,"tag":329,"props":4196,"children":4197},{},[4198],{"type":23,"value":2572},{"type":17,"tag":329,"props":4200,"children":4201},{"class":331,"line":359},[4202],{"type":17,"tag":329,"props":4203,"children":4204},{},[4205],{"type":23,"value":2307},{"type":17,"tag":329,"props":4207,"children":4208},{"class":331,"line":368},[4209],{"type":17,"tag":329,"props":4210,"children":4211},{},[4212],{"type":23,"value":4213},"public void getAllUserByTableName() {\n",{"type":17,"tag":329,"props":4215,"children":4216},{"class":331,"line":377},[4217],{"type":17,"tag":329,"props":4218,"children":4219},{},[4220],{"type":23,"value":2323},{"type":17,"tag":329,"props":4222,"children":4223},{"class":331,"line":386},[4224],{"type":17,"tag":329,"props":4225,"children":4226},{},[4227],{"type":23,"value":3838},{"type":17,"tag":329,"props":4229,"children":4230},{"class":331,"line":394},[4231],{"type":17,"tag":329,"props":4232,"children":4233},{"emptyLinePlaceholder":542},[4234],{"type":23,"value":545},{"type":17,"tag":329,"props":4236,"children":4237},{"class":331,"line":403},[4238],{"type":17,"tag":329,"props":4239,"children":4240},{},[4241],{"type":23,"value":4242},"    List\u003CUser> t_user = mapper.getAllUserByTableName(\"t_user\");\n",{"type":17,"tag":329,"props":4244,"children":4245},{"class":331,"line":412},[4246],{"type":17,"tag":329,"props":4247,"children":4248},{},[4249],{"type":23,"value":4250},"    t_user.forEach(System.out::println);\n",{"type":17,"tag":329,"props":4252,"children":4253},{"class":331,"line":421},[4254],{"type":17,"tag":329,"props":4255,"children":4256},{},[4257],{"type":23,"value":753},{"type":17,"tag":74,"props":4259,"children":4261},{"id":4260},"_64-获取自增主键",[4262],{"type":23,"value":4263},"6.4 获取自增主键",{"type":17,"tag":57,"props":4265,"children":4266},{},[4267],{"type":17,"tag":86,"props":4268,"children":4269},{},[4270],{"type":23,"value":2517},{"type":17,"tag":319,"props":4272,"children":4274},{"className":321,"code":4273,"language":323,"meta":7,"style":7},"\u002F**\n * 新增用户信息，并获取主键\n * @param user\n *\u002F\npublic int insertUser(User user);\n",[4275],{"type":17,"tag":293,"props":4276,"children":4277},{"__ignoreMap":7},[4278,4285,4293,4301,4308],{"type":17,"tag":329,"props":4279,"children":4280},{"class":331,"line":332},[4281],{"type":17,"tag":329,"props":4282,"children":4283},{},[4284],{"type":23,"value":2532},{"type":17,"tag":329,"props":4286,"children":4287},{"class":331,"line":341},[4288],{"type":17,"tag":329,"props":4289,"children":4290},{},[4291],{"type":23,"value":4292}," * 新增用户信息，并获取主键\n",{"type":17,"tag":329,"props":4294,"children":4295},{"class":331,"line":350},[4296],{"type":17,"tag":329,"props":4297,"children":4298},{},[4299],{"type":23,"value":4300}," * @param user\n",{"type":17,"tag":329,"props":4302,"children":4303},{"class":331,"line":359},[4304],{"type":17,"tag":329,"props":4305,"children":4306},{},[4307],{"type":23,"value":2572},{"type":17,"tag":329,"props":4309,"children":4310},{"class":331,"line":368},[4311],{"type":17,"tag":329,"props":4312,"children":4313},{},[4314],{"type":23,"value":4315},"public int insertUser(User user);\n",{"type":17,"tag":57,"props":4317,"children":4318},{},[4319],{"type":17,"tag":86,"props":4320,"children":4321},{},[4322],{"type":23,"value":2386},{"type":17,"tag":319,"props":4324,"children":4326},{"className":1376,"code":4325,"language":1378,"meta":7,"style":7},"\u003C!--public int insertUser(User user);-->\n\u003C!--\n        useGeneratedKeys: 表示当前添加功能使用自增主键\n        keyProperty: 将添加数据的自增主键为实体类类型的参数的数据赋值\n-->\n\u003Cinsert id=\"insertUser\" useGeneratedKeys=\"true\" keyProperty=\"id\">\n    insert into t_user values (null, #{username}, #{password}, #{age}, #{gender}, #{email})\n\u003C\u002Finsert>\n",[4327],{"type":17,"tag":293,"props":4328,"children":4329},{"__ignoreMap":7},[4330,4338,4346,4354,4362,4370,4378,4386],{"type":17,"tag":329,"props":4331,"children":4332},{"class":331,"line":332},[4333],{"type":17,"tag":329,"props":4334,"children":4335},{},[4336],{"type":23,"value":4337},"\u003C!--public int insertUser(User user);-->\n",{"type":17,"tag":329,"props":4339,"children":4340},{"class":331,"line":341},[4341],{"type":17,"tag":329,"props":4342,"children":4343},{},[4344],{"type":23,"value":4345},"\u003C!--\n",{"type":17,"tag":329,"props":4347,"children":4348},{"class":331,"line":350},[4349],{"type":17,"tag":329,"props":4350,"children":4351},{},[4352],{"type":23,"value":4353},"        useGeneratedKeys: 表示当前添加功能使用自增主键\n",{"type":17,"tag":329,"props":4355,"children":4356},{"class":331,"line":359},[4357],{"type":17,"tag":329,"props":4358,"children":4359},{},[4360],{"type":23,"value":4361},"        keyProperty: 将添加数据的自增主键为实体类类型的参数的数据赋值\n",{"type":17,"tag":329,"props":4363,"children":4364},{"class":331,"line":368},[4365],{"type":17,"tag":329,"props":4366,"children":4367},{},[4368],{"type":23,"value":4369},"-->\n",{"type":17,"tag":329,"props":4371,"children":4372},{"class":331,"line":377},[4373],{"type":17,"tag":329,"props":4374,"children":4375},{},[4376],{"type":23,"value":4377},"\u003Cinsert id=\"insertUser\" useGeneratedKeys=\"true\" keyProperty=\"id\">\n",{"type":17,"tag":329,"props":4379,"children":4380},{"class":331,"line":386},[4381],{"type":17,"tag":329,"props":4382,"children":4383},{},[4384],{"type":23,"value":4385},"    insert into t_user values (null, #{username}, #{password}, #{age}, #{gender}, #{email})\n",{"type":17,"tag":329,"props":4387,"children":4388},{"class":331,"line":394},[4389],{"type":17,"tag":329,"props":4390,"children":4391},{},[4392],{"type":23,"value":2503},{"type":17,"tag":57,"props":4394,"children":4395},{},[4396],{"type":17,"tag":86,"props":4397,"children":4398},{},[4399],{"type":23,"value":2292},{"type":17,"tag":319,"props":4401,"children":4403},{"className":321,"code":4402,"language":323,"meta":7,"style":7},"\u002F**\n * 新增用户信息，并获取自增主键\n *\u002F\n@Test\npublic void testInsertUser() {\n    SqlSession sqlSession = SqlSessionUtil.getSqlSession();\n    SpecialSQLMapper mapper = sqlSession.getMapper(SpecialSQLMapper.class);\n    User user = new User(null, \"xiaoming\", \"12312312\", 24, \"男\", \"123qq.com\");\n    int i = mapper.insertUser(user);\n    System.out.println(user);\n}\n",[4404],{"type":17,"tag":293,"props":4405,"children":4406},{"__ignoreMap":7},[4407,4414,4422,4429,4436,4444,4451,4458,4466,4474,4481],{"type":17,"tag":329,"props":4408,"children":4409},{"class":331,"line":332},[4410],{"type":17,"tag":329,"props":4411,"children":4412},{},[4413],{"type":23,"value":2532},{"type":17,"tag":329,"props":4415,"children":4416},{"class":331,"line":341},[4417],{"type":17,"tag":329,"props":4418,"children":4419},{},[4420],{"type":23,"value":4421}," * 新增用户信息，并获取自增主键\n",{"type":17,"tag":329,"props":4423,"children":4424},{"class":331,"line":350},[4425],{"type":17,"tag":329,"props":4426,"children":4427},{},[4428],{"type":23,"value":2572},{"type":17,"tag":329,"props":4430,"children":4431},{"class":331,"line":359},[4432],{"type":17,"tag":329,"props":4433,"children":4434},{},[4435],{"type":23,"value":2307},{"type":17,"tag":329,"props":4437,"children":4438},{"class":331,"line":368},[4439],{"type":17,"tag":329,"props":4440,"children":4441},{},[4442],{"type":23,"value":4443},"public void testInsertUser() {\n",{"type":17,"tag":329,"props":4445,"children":4446},{"class":331,"line":377},[4447],{"type":17,"tag":329,"props":4448,"children":4449},{},[4450],{"type":23,"value":2323},{"type":17,"tag":329,"props":4452,"children":4453},{"class":331,"line":386},[4454],{"type":17,"tag":329,"props":4455,"children":4456},{},[4457],{"type":23,"value":3838},{"type":17,"tag":329,"props":4459,"children":4460},{"class":331,"line":394},[4461],{"type":17,"tag":329,"props":4462,"children":4463},{},[4464],{"type":23,"value":4465},"    User user = new User(null, \"xiaoming\", \"12312312\", 24, \"男\", \"123qq.com\");\n",{"type":17,"tag":329,"props":4467,"children":4468},{"class":331,"line":403},[4469],{"type":17,"tag":329,"props":4470,"children":4471},{},[4472],{"type":23,"value":4473},"    int i = mapper.insertUser(user);\n",{"type":17,"tag":329,"props":4475,"children":4476},{"class":331,"line":412},[4477],{"type":17,"tag":329,"props":4478,"children":4479},{},[4480],{"type":23,"value":2371},{"type":17,"tag":329,"props":4482,"children":4483},{"class":331,"line":421},[4484],{"type":17,"tag":329,"props":4485,"children":4486},{},[4487],{"type":23,"value":753},{"type":17,"tag":74,"props":4489,"children":4491},{"id":4490},"总结-1",[4492],{"type":23,"value":4493},"总结：",{"type":17,"tag":57,"props":4495,"children":4496},{},[4497],{"type":23,"value":4498},"有分号参与的语句，不用#{}",{"type":17,"tag":25,"props":4500,"children":4502},{"id":4501},"_7-自定义映射resultmap",[4503],{"type":23,"value":4504},"7. 自定义映射resultMap",{"type":17,"tag":74,"props":4506,"children":4508},{"id":4507},"_71-resultmap处理字段和属性的映射关系",[4509],{"type":23,"value":4510},"7.1 resultMap处理字段和属性的映射关系",{"type":17,"tag":53,"props":4512,"children":4513},{},[4514],{"type":17,"tag":57,"props":4515,"children":4516},{},[4517],{"type":23,"value":4518},"当实体类字段与数据库字段不一致时，直接查询无法返回正确结果，可以通过一下两种方式解决",{"type":17,"tag":245,"props":4520,"children":4521},{},[4522],{"type":17,"tag":35,"props":4523,"children":4524},{},[4525],{"type":23,"value":4526},"在Mybatis配置文件中设置setting ==> mapUnderscoreToCamelCase",{"type":17,"tag":319,"props":4528,"children":4530},{"className":1376,"code":4529,"language":1378,"meta":7,"style":7},"\u003Csettings>\n    \u003Csetting name=\"mapUnderscoreToCamelCase\" value=\"true\"\u002F>\n\u003C\u002Fsettings>\n",[4531],{"type":17,"tag":293,"props":4532,"children":4533},{"__ignoreMap":7},[4534,4542,4550],{"type":17,"tag":329,"props":4535,"children":4536},{"class":331,"line":332},[4537],{"type":17,"tag":329,"props":4538,"children":4539},{},[4540],{"type":23,"value":4541},"\u003Csettings>\n",{"type":17,"tag":329,"props":4543,"children":4544},{"class":331,"line":341},[4545],{"type":17,"tag":329,"props":4546,"children":4547},{},[4548],{"type":23,"value":4549},"    \u003Csetting name=\"mapUnderscoreToCamelCase\" value=\"true\"\u002F>\n",{"type":17,"tag":329,"props":4551,"children":4552},{"class":331,"line":350},[4553],{"type":17,"tag":329,"props":4554,"children":4555},{},[4556],{"type":23,"value":4557},"\u003C\u002Fsettings>\n",{"type":17,"tag":245,"props":4559,"children":4560},{"start":341},[4561],{"type":17,"tag":35,"props":4562,"children":4563},{},[4564],{"type":23,"value":4565},"在映射文件中设置resultMap",{"type":17,"tag":53,"props":4567,"children":4568},{},[4569,4574,4587,4592],{"type":17,"tag":57,"props":4570,"children":4571},{},[4572],{"type":23,"value":4573},"resultMap：设置自定义的映射关系",{"type":17,"tag":31,"props":4575,"children":4576},{},[4577,4582],{"type":17,"tag":35,"props":4578,"children":4579},{},[4580],{"type":23,"value":4581},"id： 唯一标识",{"type":17,"tag":35,"props":4583,"children":4584},{},[4585],{"type":23,"value":4586},"type：处理映射关系的实体类的类型",{"type":17,"tag":57,"props":4588,"children":4589},{},[4590],{"type":23,"value":4591},"常用的标签：",{"type":17,"tag":31,"props":4593,"children":4594},{},[4595,4600],{"type":17,"tag":35,"props":4596,"children":4597},{},[4598],{"type":23,"value":4599},"id：处理主键与实体类中属性的映射关系",{"type":17,"tag":35,"props":4601,"children":4602},{},[4603,4605],{"type":23,"value":4604},"result：处理普通字段与实体类中属性的映射关系\n",{"type":17,"tag":31,"props":4606,"children":4607},{},[4608,4613],{"type":17,"tag":35,"props":4609,"children":4610},{},[4611],{"type":23,"value":4612},"column：设置映射关系中的字段名，必须是数据库中对应的字段",{"type":17,"tag":35,"props":4614,"children":4615},{},[4616],{"type":23,"value":4617},"property：设置映射关系中属性的属性名，必须是实体类中对应的属性名",{"type":17,"tag":3272,"props":4619,"children":4621},{"id":4620},"实例",[4622],{"type":23,"value":4620},{"type":17,"tag":4624,"props":4625,"children":4627},"h6",{"id":4626},"方式一配置mybatis配置文件",[4628],{"type":17,"tag":86,"props":4629,"children":4630},{},[4631],{"type":23,"value":4632},"方式一：配置MyBatis配置文件",{"type":17,"tag":57,"props":4634,"children":4635},{},[4636],{"type":17,"tag":86,"props":4637,"children":4638},{},[4639],{"type":23,"value":4640},"MyBatis配置文件：",{"type":17,"tag":319,"props":4642,"children":4644},{"className":1376,"code":4643,"language":1378,"meta":7,"style":7},"\u003Cproperties resource=\"jdbc.properties\"\u002F>\n\n\u003Csettings>\n    \u003Csetting name=\"mapUnderscoreToCamelCase\" value=\"true\"\u002F>\n\u003C\u002Fsettings>\n\n\u003CtypeAliases>\n    \u003Cpackage name=\"com.wangkun.mybatis.pojo\"\u002F>\n\u003C\u002FtypeAliases>\n",[4645],{"type":17,"tag":293,"props":4646,"children":4647},{"__ignoreMap":7},[4648,4656,4663,4670,4677,4684,4691,4699,4707],{"type":17,"tag":329,"props":4649,"children":4650},{"class":331,"line":332},[4651],{"type":17,"tag":329,"props":4652,"children":4653},{},[4654],{"type":23,"value":4655},"\u003Cproperties resource=\"jdbc.properties\"\u002F>\n",{"type":17,"tag":329,"props":4657,"children":4658},{"class":331,"line":341},[4659],{"type":17,"tag":329,"props":4660,"children":4661},{"emptyLinePlaceholder":542},[4662],{"type":23,"value":545},{"type":17,"tag":329,"props":4664,"children":4665},{"class":331,"line":350},[4666],{"type":17,"tag":329,"props":4667,"children":4668},{},[4669],{"type":23,"value":4541},{"type":17,"tag":329,"props":4671,"children":4672},{"class":331,"line":359},[4673],{"type":17,"tag":329,"props":4674,"children":4675},{},[4676],{"type":23,"value":4549},{"type":17,"tag":329,"props":4678,"children":4679},{"class":331,"line":368},[4680],{"type":17,"tag":329,"props":4681,"children":4682},{},[4683],{"type":23,"value":4557},{"type":17,"tag":329,"props":4685,"children":4686},{"class":331,"line":377},[4687],{"type":17,"tag":329,"props":4688,"children":4689},{"emptyLinePlaceholder":542},[4690],{"type":23,"value":545},{"type":17,"tag":329,"props":4692,"children":4693},{"class":331,"line":386},[4694],{"type":17,"tag":329,"props":4695,"children":4696},{},[4697],{"type":23,"value":4698},"\u003CtypeAliases>\n",{"type":17,"tag":329,"props":4700,"children":4701},{"class":331,"line":394},[4702],{"type":17,"tag":329,"props":4703,"children":4704},{},[4705],{"type":23,"value":4706},"    \u003Cpackage name=\"com.wangkun.mybatis.pojo\"\u002F>\n",{"type":17,"tag":329,"props":4708,"children":4709},{"class":331,"line":403},[4710],{"type":17,"tag":329,"props":4711,"children":4712},{},[4713],{"type":23,"value":4714},"\u003C\u002FtypeAliases>\n",{"type":17,"tag":57,"props":4716,"children":4717},{},[4718],{"type":17,"tag":86,"props":4719,"children":4720},{},[4721],{"type":23,"value":4722},"mapper：",{"type":17,"tag":319,"props":4724,"children":4726},{"className":321,"code":4725,"language":323,"meta":7,"style":7},"\u002F**\n * 根据id查询员工信息\n *\u002F\nEmp getEmpById(@Param(\"empId\") int empId);\n",[4727],{"type":17,"tag":293,"props":4728,"children":4729},{"__ignoreMap":7},[4730,4737,4745,4752],{"type":17,"tag":329,"props":4731,"children":4732},{"class":331,"line":332},[4733],{"type":17,"tag":329,"props":4734,"children":4735},{},[4736],{"type":23,"value":2532},{"type":17,"tag":329,"props":4738,"children":4739},{"class":331,"line":341},[4740],{"type":17,"tag":329,"props":4741,"children":4742},{},[4743],{"type":23,"value":4744}," * 根据id查询员工信息\n",{"type":17,"tag":329,"props":4746,"children":4747},{"class":331,"line":350},[4748],{"type":17,"tag":329,"props":4749,"children":4750},{},[4751],{"type":23,"value":2572},{"type":17,"tag":329,"props":4753,"children":4754},{"class":331,"line":359},[4755],{"type":17,"tag":329,"props":4756,"children":4757},{},[4758],{"type":23,"value":4759},"Emp getEmpById(@Param(\"empId\") int empId);\n",{"type":17,"tag":57,"props":4761,"children":4762},{},[4763],{"type":17,"tag":86,"props":4764,"children":4765},{},[4766],{"type":23,"value":2386},{"type":17,"tag":319,"props":4768,"children":4770},{"className":1376,"code":4769,"language":1378,"meta":7,"style":7},"\u003Cselect id=\"getEmpById\" resultType=\"emp\">\n    select * from t_emp where emp_id = #{empId}\n\u003C\u002Fselect>\n",[4771],{"type":17,"tag":293,"props":4772,"children":4773},{"__ignoreMap":7},[4774,4782,4790],{"type":17,"tag":329,"props":4775,"children":4776},{"class":331,"line":332},[4777],{"type":17,"tag":329,"props":4778,"children":4779},{},[4780],{"type":23,"value":4781},"\u003Cselect id=\"getEmpById\" resultType=\"emp\">\n",{"type":17,"tag":329,"props":4783,"children":4784},{"class":331,"line":341},[4785],{"type":17,"tag":329,"props":4786,"children":4787},{},[4788],{"type":23,"value":4789},"    select * from t_emp where emp_id = #{empId}\n",{"type":17,"tag":329,"props":4791,"children":4792},{"class":331,"line":350},[4793],{"type":17,"tag":329,"props":4794,"children":4795},{},[4796],{"type":23,"value":2123},{"type":17,"tag":57,"props":4798,"children":4799},{},[4800],{"type":17,"tag":86,"props":4801,"children":4802},{},[4803],{"type":23,"value":2292},{"type":17,"tag":319,"props":4805,"children":4807},{"className":321,"code":4806,"language":323,"meta":7,"style":7},"@Test\npublic void testGetEmpById() {\n\n    SqlSession sqlSession = SqlSessionUtil.getSqlSession();\n    EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);\n    Emp empById = mapper.getEmpById(1);\n    System.out.println(empById);\n\n}\n",[4808],{"type":17,"tag":293,"props":4809,"children":4810},{"__ignoreMap":7},[4811,4818,4826,4833,4840,4848,4856,4864,4871],{"type":17,"tag":329,"props":4812,"children":4813},{"class":331,"line":332},[4814],{"type":17,"tag":329,"props":4815,"children":4816},{},[4817],{"type":23,"value":2307},{"type":17,"tag":329,"props":4819,"children":4820},{"class":331,"line":341},[4821],{"type":17,"tag":329,"props":4822,"children":4823},{},[4824],{"type":23,"value":4825},"public void testGetEmpById() {\n",{"type":17,"tag":329,"props":4827,"children":4828},{"class":331,"line":350},[4829],{"type":17,"tag":329,"props":4830,"children":4831},{"emptyLinePlaceholder":542},[4832],{"type":23,"value":545},{"type":17,"tag":329,"props":4834,"children":4835},{"class":331,"line":359},[4836],{"type":17,"tag":329,"props":4837,"children":4838},{},[4839],{"type":23,"value":2323},{"type":17,"tag":329,"props":4841,"children":4842},{"class":331,"line":368},[4843],{"type":17,"tag":329,"props":4844,"children":4845},{},[4846],{"type":23,"value":4847},"    EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);\n",{"type":17,"tag":329,"props":4849,"children":4850},{"class":331,"line":377},[4851],{"type":17,"tag":329,"props":4852,"children":4853},{},[4854],{"type":23,"value":4855},"    Emp empById = mapper.getEmpById(1);\n",{"type":17,"tag":329,"props":4857,"children":4858},{"class":331,"line":386},[4859],{"type":17,"tag":329,"props":4860,"children":4861},{},[4862],{"type":23,"value":4863},"    System.out.println(empById);\n",{"type":17,"tag":329,"props":4865,"children":4866},{"class":331,"line":394},[4867],{"type":17,"tag":329,"props":4868,"children":4869},{"emptyLinePlaceholder":542},[4870],{"type":23,"value":545},{"type":17,"tag":329,"props":4872,"children":4873},{"class":331,"line":403},[4874],{"type":17,"tag":329,"props":4875,"children":4876},{},[4877],{"type":23,"value":753},{"type":17,"tag":4624,"props":4879,"children":4881},{"id":4880},"方式二配置映射文件",[4882],{"type":17,"tag":86,"props":4883,"children":4884},{},[4885],{"type":23,"value":4886},"方式二：配置映射文件",{"type":17,"tag":57,"props":4888,"children":4889},{},[4890],{"type":17,"tag":86,"props":4891,"children":4892},{},[4893],{"type":23,"value":2386},{"type":17,"tag":319,"props":4895,"children":4897},{"className":1376,"code":4896,"language":1378,"meta":7,"style":7},"\u003CresultMap id=\"empResultMap\" type=\"emp\">\n    \u003Cid column=\"emp_id\" property=\"empId\"\u002F>\n    \u003Cresult column=\"emp_name\" property=\"empName\"\u002F>\n    \u003Cresult column=\"age\" property=\"age\"\u002F>\n    \u003Cresult column=\"gender\" property=\"gender\"\u002F>\n    \u003Cresult column=\"dept_id\" property=\"deptId\"\u002F>\n\u003C\u002FresultMap>\n\n\u003C!--Emp getEmpById(@Param(\"empId\") int empId);-->\n\u003Cselect id=\"getEmpById\" resultMap=\"empResultMap\">\n    select * from t_emp where emp_id = #{empId}\n\u003C\u002Fselect>\n",[4898],{"type":17,"tag":293,"props":4899,"children":4900},{"__ignoreMap":7},[4901,4909,4917,4925,4933,4941,4949,4957,4964,4972,4980,4987],{"type":17,"tag":329,"props":4902,"children":4903},{"class":331,"line":332},[4904],{"type":17,"tag":329,"props":4905,"children":4906},{},[4907],{"type":23,"value":4908},"\u003CresultMap id=\"empResultMap\" type=\"emp\">\n",{"type":17,"tag":329,"props":4910,"children":4911},{"class":331,"line":341},[4912],{"type":17,"tag":329,"props":4913,"children":4914},{},[4915],{"type":23,"value":4916},"    \u003Cid column=\"emp_id\" property=\"empId\"\u002F>\n",{"type":17,"tag":329,"props":4918,"children":4919},{"class":331,"line":350},[4920],{"type":17,"tag":329,"props":4921,"children":4922},{},[4923],{"type":23,"value":4924},"    \u003Cresult column=\"emp_name\" property=\"empName\"\u002F>\n",{"type":17,"tag":329,"props":4926,"children":4927},{"class":331,"line":359},[4928],{"type":17,"tag":329,"props":4929,"children":4930},{},[4931],{"type":23,"value":4932},"    \u003Cresult column=\"age\" property=\"age\"\u002F>\n",{"type":17,"tag":329,"props":4934,"children":4935},{"class":331,"line":368},[4936],{"type":17,"tag":329,"props":4937,"children":4938},{},[4939],{"type":23,"value":4940},"    \u003Cresult column=\"gender\" property=\"gender\"\u002F>\n",{"type":17,"tag":329,"props":4942,"children":4943},{"class":331,"line":377},[4944],{"type":17,"tag":329,"props":4945,"children":4946},{},[4947],{"type":23,"value":4948},"    \u003Cresult column=\"dept_id\" property=\"deptId\"\u002F>\n",{"type":17,"tag":329,"props":4950,"children":4951},{"class":331,"line":386},[4952],{"type":17,"tag":329,"props":4953,"children":4954},{},[4955],{"type":23,"value":4956},"\u003C\u002FresultMap>\n",{"type":17,"tag":329,"props":4958,"children":4959},{"class":331,"line":394},[4960],{"type":17,"tag":329,"props":4961,"children":4962},{"emptyLinePlaceholder":542},[4963],{"type":23,"value":545},{"type":17,"tag":329,"props":4965,"children":4966},{"class":331,"line":403},[4967],{"type":17,"tag":329,"props":4968,"children":4969},{},[4970],{"type":23,"value":4971},"\u003C!--Emp getEmpById(@Param(\"empId\") int empId);-->\n",{"type":17,"tag":329,"props":4973,"children":4974},{"class":331,"line":412},[4975],{"type":17,"tag":329,"props":4976,"children":4977},{},[4978],{"type":23,"value":4979},"\u003Cselect id=\"getEmpById\" resultMap=\"empResultMap\">\n",{"type":17,"tag":329,"props":4981,"children":4982},{"class":331,"line":421},[4983],{"type":17,"tag":329,"props":4984,"children":4985},{},[4986],{"type":23,"value":4789},{"type":17,"tag":329,"props":4988,"children":4989},{"class":331,"line":430},[4990],{"type":17,"tag":329,"props":4991,"children":4992},{},[4993],{"type":23,"value":2123},{"type":17,"tag":74,"props":4995,"children":4997},{"id":4996},"_72-多对一映射关系",[4998],{"type":23,"value":4999},"7.2 多对一映射关系",{"type":17,"tag":53,"props":5001,"children":5002},{},[5003,5008],{"type":17,"tag":57,"props":5004,"children":5005},{},[5006],{"type":23,"value":5007},"多个员工对应一个部门",{"type":17,"tag":57,"props":5009,"children":5010},{},[5011],{"type":23,"value":5012},"二次查询之后是一个对象",{"type":17,"tag":57,"props":5014,"children":5015},{},[5016,5018,5023],{"type":23,"value":5017},"以",{"type":17,"tag":86,"props":5019,"children":5020},{},[5021],{"type":23,"value":5022},"查询员工信息以及员工对应的部门信息",{"type":23,"value":5024},"为例，使用三种方法实现",{"type":17,"tag":3272,"props":5026,"children":5028},{"id":5027},"_721-级联方式处理映射关系",[5029],{"type":23,"value":5030},"7.2.1 级联方式处理映射关系",{"type":17,"tag":57,"props":5032,"children":5033},{},[5034],{"type":17,"tag":86,"props":5035,"children":5036},{},[5037],{"type":23,"value":4722},{"type":17,"tag":319,"props":5039,"children":5041},{"className":321,"code":5040,"language":323,"meta":7,"style":7},"\u002F**\n * 根据empId查询员工信息与部门信息\n * @param empId\n * @return\n *\u002F\nEmp getEmpAndDeptByEmpId(@Param(\"empId\") int empId);\n",[5042],{"type":17,"tag":293,"props":5043,"children":5044},{"__ignoreMap":7},[5045,5052,5060,5068,5075,5082],{"type":17,"tag":329,"props":5046,"children":5047},{"class":331,"line":332},[5048],{"type":17,"tag":329,"props":5049,"children":5050},{},[5051],{"type":23,"value":2532},{"type":17,"tag":329,"props":5053,"children":5054},{"class":331,"line":341},[5055],{"type":17,"tag":329,"props":5056,"children":5057},{},[5058],{"type":23,"value":5059}," * 根据empId查询员工信息与部门信息\n",{"type":17,"tag":329,"props":5061,"children":5062},{"class":331,"line":350},[5063],{"type":17,"tag":329,"props":5064,"children":5065},{},[5066],{"type":23,"value":5067}," * @param empId\n",{"type":17,"tag":329,"props":5069,"children":5070},{"class":331,"line":359},[5071],{"type":17,"tag":329,"props":5072,"children":5073},{},[5074],{"type":23,"value":2564},{"type":17,"tag":329,"props":5076,"children":5077},{"class":331,"line":368},[5078],{"type":17,"tag":329,"props":5079,"children":5080},{},[5081],{"type":23,"value":2572},{"type":17,"tag":329,"props":5083,"children":5084},{"class":331,"line":377},[5085],{"type":17,"tag":329,"props":5086,"children":5087},{},[5088],{"type":23,"value":5089},"Emp getEmpAndDeptByEmpId(@Param(\"empId\") int empId);\n",{"type":17,"tag":57,"props":5091,"children":5092},{},[5093],{"type":17,"tag":86,"props":5094,"children":5095},{},[5096],{"type":23,"value":5097},"映射文件(重点)：",{"type":17,"tag":319,"props":5099,"children":5101},{"className":1376,"code":5100,"language":1378,"meta":7,"style":7},"\u003CresultMap id=\"empAndDeptResultMap\" type=\"emp\">\n    \u003Cid column=\"emp_id\" property=\"empId\"\u002F>\n    \u003Cresult column=\"emp_name\" property=\"empName\"\u002F>\n    \u003Cresult column=\"age\" property=\"age\"\u002F>\n    \u003Cresult column=\"gender\" property=\"gender\"\u002F>\n    \u003C!--这里解决了实体类的一个属性对sql中多个字段的问题-->\n    \u003Cresult column=\"dept_id\" property=\"dept.deptId\"\u002F>\n    \u003Cresult column=\"dept_name\" property=\"dept.deptName\"\u002F>\n\u003C\u002FresultMap>\n\n\u003C!--Emp getEmpAndDeptByEmpId(@Param(\"empId\") int empId);-->\n\u003Cselect id=\"getEmpAndDeptByEmpId\" resultMap=\"empAndDeptResultMap\">\n    select t_emp.*, t_dept.*\n    from t_emp\n             left join t_dept on t_emp.dept_id = t_dept.dept_id\n    where t_emp.emp_id = #{empId}\n\u003C\u002Fselect>\n",[5102],{"type":17,"tag":293,"props":5103,"children":5104},{"__ignoreMap":7},[5105,5113,5120,5127,5134,5141,5149,5157,5165,5172,5179,5187,5195,5203,5211,5219,5227],{"type":17,"tag":329,"props":5106,"children":5107},{"class":331,"line":332},[5108],{"type":17,"tag":329,"props":5109,"children":5110},{},[5111],{"type":23,"value":5112},"\u003CresultMap id=\"empAndDeptResultMap\" type=\"emp\">\n",{"type":17,"tag":329,"props":5114,"children":5115},{"class":331,"line":341},[5116],{"type":17,"tag":329,"props":5117,"children":5118},{},[5119],{"type":23,"value":4916},{"type":17,"tag":329,"props":5121,"children":5122},{"class":331,"line":350},[5123],{"type":17,"tag":329,"props":5124,"children":5125},{},[5126],{"type":23,"value":4924},{"type":17,"tag":329,"props":5128,"children":5129},{"class":331,"line":359},[5130],{"type":17,"tag":329,"props":5131,"children":5132},{},[5133],{"type":23,"value":4932},{"type":17,"tag":329,"props":5135,"children":5136},{"class":331,"line":368},[5137],{"type":17,"tag":329,"props":5138,"children":5139},{},[5140],{"type":23,"value":4940},{"type":17,"tag":329,"props":5142,"children":5143},{"class":331,"line":377},[5144],{"type":17,"tag":329,"props":5145,"children":5146},{},[5147],{"type":23,"value":5148},"    \u003C!--这里解决了实体类的一个属性对sql中多个字段的问题-->\n",{"type":17,"tag":329,"props":5150,"children":5151},{"class":331,"line":386},[5152],{"type":17,"tag":329,"props":5153,"children":5154},{},[5155],{"type":23,"value":5156},"    \u003Cresult column=\"dept_id\" property=\"dept.deptId\"\u002F>\n",{"type":17,"tag":329,"props":5158,"children":5159},{"class":331,"line":394},[5160],{"type":17,"tag":329,"props":5161,"children":5162},{},[5163],{"type":23,"value":5164},"    \u003Cresult column=\"dept_name\" property=\"dept.deptName\"\u002F>\n",{"type":17,"tag":329,"props":5166,"children":5167},{"class":331,"line":403},[5168],{"type":17,"tag":329,"props":5169,"children":5170},{},[5171],{"type":23,"value":4956},{"type":17,"tag":329,"props":5173,"children":5174},{"class":331,"line":412},[5175],{"type":17,"tag":329,"props":5176,"children":5177},{"emptyLinePlaceholder":542},[5178],{"type":23,"value":545},{"type":17,"tag":329,"props":5180,"children":5181},{"class":331,"line":421},[5182],{"type":17,"tag":329,"props":5183,"children":5184},{},[5185],{"type":23,"value":5186},"\u003C!--Emp getEmpAndDeptByEmpId(@Param(\"empId\") int empId);-->\n",{"type":17,"tag":329,"props":5188,"children":5189},{"class":331,"line":430},[5190],{"type":17,"tag":329,"props":5191,"children":5192},{},[5193],{"type":23,"value":5194},"\u003Cselect id=\"getEmpAndDeptByEmpId\" resultMap=\"empAndDeptResultMap\">\n",{"type":17,"tag":329,"props":5196,"children":5197},{"class":331,"line":439},[5198],{"type":17,"tag":329,"props":5199,"children":5200},{},[5201],{"type":23,"value":5202},"    select t_emp.*, t_dept.*\n",{"type":17,"tag":329,"props":5204,"children":5205},{"class":331,"line":447},[5206],{"type":17,"tag":329,"props":5207,"children":5208},{},[5209],{"type":23,"value":5210},"    from t_emp\n",{"type":17,"tag":329,"props":5212,"children":5213},{"class":331,"line":456},[5214],{"type":17,"tag":329,"props":5215,"children":5216},{},[5217],{"type":23,"value":5218},"             left join t_dept on t_emp.dept_id = t_dept.dept_id\n",{"type":17,"tag":329,"props":5220,"children":5221},{"class":331,"line":465},[5222],{"type":17,"tag":329,"props":5223,"children":5224},{},[5225],{"type":23,"value":5226},"    where t_emp.emp_id = #{empId}\n",{"type":17,"tag":329,"props":5228,"children":5229},{"class":331,"line":474},[5230],{"type":17,"tag":329,"props":5231,"children":5232},{},[5233],{"type":23,"value":2123},{"type":17,"tag":3272,"props":5235,"children":5237},{"id":5236},"_722-使用association处理映射关系",[5238],{"type":23,"value":5239},"7.2.2 使用association处理映射关系",{"type":17,"tag":53,"props":5241,"children":5242},{},[5243],{"type":17,"tag":31,"props":5244,"children":5245},{},[5246],{"type":17,"tag":35,"props":5247,"children":5248},{},[5249,5251],{"type":23,"value":5250},"association：处理多对一的映射关系（处理实体类属性的属性）\n",{"type":17,"tag":31,"props":5252,"children":5253},{},[5254,5259],{"type":17,"tag":35,"props":5255,"children":5256},{},[5257],{"type":23,"value":5258},"property：设置需要处理映射关系的属性的属性名",{"type":17,"tag":35,"props":5260,"children":5261},{},[5262],{"type":23,"value":5263},"javaType：设置要处理的属性的类型",{"type":17,"tag":57,"props":5265,"children":5266},{},[5267],{"type":17,"tag":86,"props":5268,"children":5269},{},[5270],{"type":23,"value":2386},{"type":17,"tag":319,"props":5272,"children":5274},{"className":1376,"code":5273,"language":1378,"meta":7,"style":7},"\u003CresultMap id=\"empAndDeptResultMap\" type=\"emp\">\n    \u003Cid column=\"emp_id\" property=\"empId\"\u002F>\n    \u003Cresult column=\"emp_name\" property=\"empName\"\u002F>\n    \u003Cresult column=\"age\" property=\"age\"\u002F>\n    \u003Cresult column=\"gender\" property=\"gender\"\u002F>\n    \u003Cassociation property=\"dept\" javaType=\"Dept\">\n        \u003Cid column=\"dept_id\" property=\"deptId\"\u002F>\n        \u003Cresult column=\"dept_name\" property=\"deptName\"\u002F>\n    \u003C\u002Fassociation>\n\u003C\u002FresultMap>\n\n\u003C!--Emp getEmpAndDeptByEmpId(@Param(\"empId\") int empId);-->\n\u003Cselect id=\"getEmpAndDeptByEmpId\" resultMap=\"empAndDeptResultMap\">\n    select t_emp.*, t_dept.*\n    from t_emp\n             left join t_dept on t_emp.dept_id = t_dept.dept_id\n    where t_emp.emp_id = #{empId}\n\u003C\u002Fselect>\n",[5275],{"type":17,"tag":293,"props":5276,"children":5277},{"__ignoreMap":7},[5278,5285,5292,5299,5306,5313,5321,5329,5337,5345,5352,5359,5366,5373,5380,5387,5394,5401],{"type":17,"tag":329,"props":5279,"children":5280},{"class":331,"line":332},[5281],{"type":17,"tag":329,"props":5282,"children":5283},{},[5284],{"type":23,"value":5112},{"type":17,"tag":329,"props":5286,"children":5287},{"class":331,"line":341},[5288],{"type":17,"tag":329,"props":5289,"children":5290},{},[5291],{"type":23,"value":4916},{"type":17,"tag":329,"props":5293,"children":5294},{"class":331,"line":350},[5295],{"type":17,"tag":329,"props":5296,"children":5297},{},[5298],{"type":23,"value":4924},{"type":17,"tag":329,"props":5300,"children":5301},{"class":331,"line":359},[5302],{"type":17,"tag":329,"props":5303,"children":5304},{},[5305],{"type":23,"value":4932},{"type":17,"tag":329,"props":5307,"children":5308},{"class":331,"line":368},[5309],{"type":17,"tag":329,"props":5310,"children":5311},{},[5312],{"type":23,"value":4940},{"type":17,"tag":329,"props":5314,"children":5315},{"class":331,"line":377},[5316],{"type":17,"tag":329,"props":5317,"children":5318},{},[5319],{"type":23,"value":5320},"    \u003Cassociation property=\"dept\" javaType=\"Dept\">\n",{"type":17,"tag":329,"props":5322,"children":5323},{"class":331,"line":386},[5324],{"type":17,"tag":329,"props":5325,"children":5326},{},[5327],{"type":23,"value":5328},"        \u003Cid column=\"dept_id\" property=\"deptId\"\u002F>\n",{"type":17,"tag":329,"props":5330,"children":5331},{"class":331,"line":394},[5332],{"type":17,"tag":329,"props":5333,"children":5334},{},[5335],{"type":23,"value":5336},"        \u003Cresult column=\"dept_name\" property=\"deptName\"\u002F>\n",{"type":17,"tag":329,"props":5338,"children":5339},{"class":331,"line":403},[5340],{"type":17,"tag":329,"props":5341,"children":5342},{},[5343],{"type":23,"value":5344},"    \u003C\u002Fassociation>\n",{"type":17,"tag":329,"props":5346,"children":5347},{"class":331,"line":412},[5348],{"type":17,"tag":329,"props":5349,"children":5350},{},[5351],{"type":23,"value":4956},{"type":17,"tag":329,"props":5353,"children":5354},{"class":331,"line":421},[5355],{"type":17,"tag":329,"props":5356,"children":5357},{"emptyLinePlaceholder":542},[5358],{"type":23,"value":545},{"type":17,"tag":329,"props":5360,"children":5361},{"class":331,"line":430},[5362],{"type":17,"tag":329,"props":5363,"children":5364},{},[5365],{"type":23,"value":5186},{"type":17,"tag":329,"props":5367,"children":5368},{"class":331,"line":439},[5369],{"type":17,"tag":329,"props":5370,"children":5371},{},[5372],{"type":23,"value":5194},{"type":17,"tag":329,"props":5374,"children":5375},{"class":331,"line":447},[5376],{"type":17,"tag":329,"props":5377,"children":5378},{},[5379],{"type":23,"value":5202},{"type":17,"tag":329,"props":5381,"children":5382},{"class":331,"line":456},[5383],{"type":17,"tag":329,"props":5384,"children":5385},{},[5386],{"type":23,"value":5210},{"type":17,"tag":329,"props":5388,"children":5389},{"class":331,"line":465},[5390],{"type":17,"tag":329,"props":5391,"children":5392},{},[5393],{"type":23,"value":5218},{"type":17,"tag":329,"props":5395,"children":5396},{"class":331,"line":474},[5397],{"type":17,"tag":329,"props":5398,"children":5399},{},[5400],{"type":23,"value":5226},{"type":17,"tag":329,"props":5402,"children":5403},{"class":331,"line":483},[5404],{"type":17,"tag":329,"props":5405,"children":5406},{},[5407],{"type":23,"value":2123},{"type":17,"tag":3272,"props":5409,"children":5411},{"id":5410},"_723-分布查询",[5412],{"type":23,"value":5413},"7.2.3 分布查询",{"type":17,"tag":4624,"props":5415,"children":5417},{"id":5416},"第一步",[5418],{"type":23,"value":5416},{"type":17,"tag":53,"props":5420,"children":5421},{},[5422],{"type":17,"tag":57,"props":5423,"children":5424},{},[5425],{"type":23,"value":5426},"根据emp_id查询出员工信息",{"type":17,"tag":57,"props":5428,"children":5429},{},[5430],{"type":17,"tag":86,"props":5431,"children":5432},{},[5433],{"type":23,"value":5434},"mapper（EmpMapper）：",{"type":17,"tag":319,"props":5436,"children":5438},{"className":321,"code":5437,"language":323,"meta":7,"style":7},"\u002F**\n * 根据empId查询员工信息与部门信息,分步查询\n *\n * @return\n *\u002F\nEmp getEmpAndDeptByStepOne(@Param(\"empId\") int empId);\n",[5439],{"type":17,"tag":293,"props":5440,"children":5441},{"__ignoreMap":7},[5442,5449,5457,5465,5472,5479],{"type":17,"tag":329,"props":5443,"children":5444},{"class":331,"line":332},[5445],{"type":17,"tag":329,"props":5446,"children":5447},{},[5448],{"type":23,"value":2532},{"type":17,"tag":329,"props":5450,"children":5451},{"class":331,"line":341},[5452],{"type":17,"tag":329,"props":5453,"children":5454},{},[5455],{"type":23,"value":5456}," * 根据empId查询员工信息与部门信息,分步查询\n",{"type":17,"tag":329,"props":5458,"children":5459},{"class":331,"line":350},[5460],{"type":17,"tag":329,"props":5461,"children":5462},{},[5463],{"type":23,"value":5464}," *\n",{"type":17,"tag":329,"props":5466,"children":5467},{"class":331,"line":359},[5468],{"type":17,"tag":329,"props":5469,"children":5470},{},[5471],{"type":23,"value":2564},{"type":17,"tag":329,"props":5473,"children":5474},{"class":331,"line":368},[5475],{"type":17,"tag":329,"props":5476,"children":5477},{},[5478],{"type":23,"value":2572},{"type":17,"tag":329,"props":5480,"children":5481},{"class":331,"line":377},[5482],{"type":17,"tag":329,"props":5483,"children":5484},{},[5485],{"type":23,"value":5486},"Emp getEmpAndDeptByStepOne(@Param(\"empId\") int empId);\n",{"type":17,"tag":57,"props":5488,"children":5489},{},[5490],{"type":17,"tag":86,"props":5491,"children":5492},{},[5493],{"type":23,"value":5494},"映射文件（EmpMapper.xml）",{"type":17,"tag":319,"props":5496,"children":5498},{"className":1376,"code":5497,"language":1378,"meta":7,"style":7},"\u003CresultMap id=\"empAndDeptByStepResultMap\" type=\"emp\">\n    \u003Cid column=\"emp_id\" property=\"empId\"\u002F>\n    \u003Cresult column=\"emp_name\" property=\"empName\"\u002F>\n    \u003Cresult column=\"age\" property=\"age\"\u002F>\n    \u003Cresult column=\"gender\" property=\"gender\"\u002F>\n    \u003C!-- 将查询出的dept_id的值作为参数传给并调用getEmpAndDeptByStepTwo，再讲第二步的查询结果映射到实体类的dept属性 -->\n    \u003Cassociation\n            property=\"dept\"\n            column=\"dept_id\"\n            select=\"com.wangkun.mybatis.mapper.DeptMapper.getEmpAndDeptByStepTwo\"\n    >\n    \u003C\u002Fassociation>\n\u003C\u002FresultMap>\n\u003C!--Emp getEmpAndDeptByStepOne(@Param(\"empId\") int empId);-->\n\u003Cselect id=\"getEmpAndDeptByStepOne\" resultMap=\"empAndDeptByStepResultMap\">\n    select * from t_emp  where emp_id = #{empId}\n\u003C\u002Fselect>\n",[5499],{"type":17,"tag":293,"props":5500,"children":5501},{"__ignoreMap":7},[5502,5510,5517,5524,5531,5538,5546,5554,5562,5570,5578,5586,5593,5600,5608,5616,5624],{"type":17,"tag":329,"props":5503,"children":5504},{"class":331,"line":332},[5505],{"type":17,"tag":329,"props":5506,"children":5507},{},[5508],{"type":23,"value":5509},"\u003CresultMap id=\"empAndDeptByStepResultMap\" type=\"emp\">\n",{"type":17,"tag":329,"props":5511,"children":5512},{"class":331,"line":341},[5513],{"type":17,"tag":329,"props":5514,"children":5515},{},[5516],{"type":23,"value":4916},{"type":17,"tag":329,"props":5518,"children":5519},{"class":331,"line":350},[5520],{"type":17,"tag":329,"props":5521,"children":5522},{},[5523],{"type":23,"value":4924},{"type":17,"tag":329,"props":5525,"children":5526},{"class":331,"line":359},[5527],{"type":17,"tag":329,"props":5528,"children":5529},{},[5530],{"type":23,"value":4932},{"type":17,"tag":329,"props":5532,"children":5533},{"class":331,"line":368},[5534],{"type":17,"tag":329,"props":5535,"children":5536},{},[5537],{"type":23,"value":4940},{"type":17,"tag":329,"props":5539,"children":5540},{"class":331,"line":377},[5541],{"type":17,"tag":329,"props":5542,"children":5543},{},[5544],{"type":23,"value":5545},"    \u003C!-- 将查询出的dept_id的值作为参数传给并调用getEmpAndDeptByStepTwo，再讲第二步的查询结果映射到实体类的dept属性 -->\n",{"type":17,"tag":329,"props":5547,"children":5548},{"class":331,"line":386},[5549],{"type":17,"tag":329,"props":5550,"children":5551},{},[5552],{"type":23,"value":5553},"    \u003Cassociation\n",{"type":17,"tag":329,"props":5555,"children":5556},{"class":331,"line":394},[5557],{"type":17,"tag":329,"props":5558,"children":5559},{},[5560],{"type":23,"value":5561},"            property=\"dept\"\n",{"type":17,"tag":329,"props":5563,"children":5564},{"class":331,"line":403},[5565],{"type":17,"tag":329,"props":5566,"children":5567},{},[5568],{"type":23,"value":5569},"            column=\"dept_id\"\n",{"type":17,"tag":329,"props":5571,"children":5572},{"class":331,"line":412},[5573],{"type":17,"tag":329,"props":5574,"children":5575},{},[5576],{"type":23,"value":5577},"            select=\"com.wangkun.mybatis.mapper.DeptMapper.getEmpAndDeptByStepTwo\"\n",{"type":17,"tag":329,"props":5579,"children":5580},{"class":331,"line":421},[5581],{"type":17,"tag":329,"props":5582,"children":5583},{},[5584],{"type":23,"value":5585},"    >\n",{"type":17,"tag":329,"props":5587,"children":5588},{"class":331,"line":430},[5589],{"type":17,"tag":329,"props":5590,"children":5591},{},[5592],{"type":23,"value":5344},{"type":17,"tag":329,"props":5594,"children":5595},{"class":331,"line":439},[5596],{"type":17,"tag":329,"props":5597,"children":5598},{},[5599],{"type":23,"value":4956},{"type":17,"tag":329,"props":5601,"children":5602},{"class":331,"line":447},[5603],{"type":17,"tag":329,"props":5604,"children":5605},{},[5606],{"type":23,"value":5607},"\u003C!--Emp getEmpAndDeptByStepOne(@Param(\"empId\") int empId);-->\n",{"type":17,"tag":329,"props":5609,"children":5610},{"class":331,"line":456},[5611],{"type":17,"tag":329,"props":5612,"children":5613},{},[5614],{"type":23,"value":5615},"\u003Cselect id=\"getEmpAndDeptByStepOne\" resultMap=\"empAndDeptByStepResultMap\">\n",{"type":17,"tag":329,"props":5617,"children":5618},{"class":331,"line":465},[5619],{"type":17,"tag":329,"props":5620,"children":5621},{},[5622],{"type":23,"value":5623},"    select * from t_emp  where emp_id = #{empId}\n",{"type":17,"tag":329,"props":5625,"children":5626},{"class":331,"line":474},[5627],{"type":17,"tag":329,"props":5628,"children":5629},{},[5630],{"type":23,"value":2123},{"type":17,"tag":4624,"props":5632,"children":5634},{"id":5633},"第二步",[5635],{"type":23,"value":5633},{"type":17,"tag":53,"props":5637,"children":5638},{},[5639],{"type":17,"tag":57,"props":5640,"children":5641},{},[5642],{"type":23,"value":5643},"根据dept_id查询出部门信息",{"type":17,"tag":57,"props":5645,"children":5646},{},[5647],{"type":17,"tag":86,"props":5648,"children":5649},{},[5650],{"type":23,"value":5651},"mapper（DeptMapper）：",{"type":17,"tag":319,"props":5653,"children":5655},{"className":321,"code":5654,"language":323,"meta":7,"style":7},"\u002F**\n * 分布查询二\n *\u002F\nDept getEmpAndDeptByStepTwo(@Param(\"deptId\") int deptId);\n",[5656],{"type":17,"tag":293,"props":5657,"children":5658},{"__ignoreMap":7},[5659,5666,5674,5681],{"type":17,"tag":329,"props":5660,"children":5661},{"class":331,"line":332},[5662],{"type":17,"tag":329,"props":5663,"children":5664},{},[5665],{"type":23,"value":2532},{"type":17,"tag":329,"props":5667,"children":5668},{"class":331,"line":341},[5669],{"type":17,"tag":329,"props":5670,"children":5671},{},[5672],{"type":23,"value":5673}," * 分布查询二\n",{"type":17,"tag":329,"props":5675,"children":5676},{"class":331,"line":350},[5677],{"type":17,"tag":329,"props":5678,"children":5679},{},[5680],{"type":23,"value":2572},{"type":17,"tag":329,"props":5682,"children":5683},{"class":331,"line":359},[5684],{"type":17,"tag":329,"props":5685,"children":5686},{},[5687],{"type":23,"value":5688},"Dept getEmpAndDeptByStepTwo(@Param(\"deptId\") int deptId);\n",{"type":17,"tag":57,"props":5690,"children":5691},{},[5692],{"type":17,"tag":86,"props":5693,"children":5694},{},[5695],{"type":23,"value":5696},"映射文件（DeptMapper.xml）：",{"type":17,"tag":319,"props":5698,"children":5700},{"className":1376,"code":5699,"language":1378,"meta":7,"style":7},"\u003C!--Dept getEmpAndDeptByStepTwo(@Param(\"deptId\") int deptId);-->\n\u003Cselect id=\"getEmpAndDeptByStepTwo\" resultType=\"dept\">\n    select * from t_dept where dept_id = #{deptId}\n\u003C\u002Fselect>\n",[5701],{"type":17,"tag":293,"props":5702,"children":5703},{"__ignoreMap":7},[5704,5712,5720,5728],{"type":17,"tag":329,"props":5705,"children":5706},{"class":331,"line":332},[5707],{"type":17,"tag":329,"props":5708,"children":5709},{},[5710],{"type":23,"value":5711},"\u003C!--Dept getEmpAndDeptByStepTwo(@Param(\"deptId\") int deptId);-->\n",{"type":17,"tag":329,"props":5713,"children":5714},{"class":331,"line":341},[5715],{"type":17,"tag":329,"props":5716,"children":5717},{},[5718],{"type":23,"value":5719},"\u003Cselect id=\"getEmpAndDeptByStepTwo\" resultType=\"dept\">\n",{"type":17,"tag":329,"props":5721,"children":5722},{"class":331,"line":350},[5723],{"type":17,"tag":329,"props":5724,"children":5725},{},[5726],{"type":23,"value":5727},"    select * from t_dept where dept_id = #{deptId}\n",{"type":17,"tag":329,"props":5729,"children":5730},{"class":331,"line":359},[5731],{"type":17,"tag":329,"props":5732,"children":5733},{},[5734],{"type":23,"value":2123},{"type":17,"tag":57,"props":5736,"children":5737},{},[5738],{"type":17,"tag":86,"props":5739,"children":5740},{},[5741],{"type":23,"value":2292},{"type":17,"tag":319,"props":5743,"children":5745},{"className":321,"code":5744,"language":323,"meta":7,"style":7},"\u002F**\n * 根据id查询员工与部门信息，分步查询\n *\u002F\n@Test\npublic void testGetEmpAndDeptByStep() {\n    SqlSession sqlSession = SqlSessionUtil.getSqlSession();\n    EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);\n    Emp empAndDeptByStepOne = mapper.getEmpAndDeptByStepOne(2);\n    System.out.println(empAndDeptByStepOne);\n}\n",[5746],{"type":17,"tag":293,"props":5747,"children":5748},{"__ignoreMap":7},[5749,5756,5764,5771,5778,5786,5793,5800,5808,5816],{"type":17,"tag":329,"props":5750,"children":5751},{"class":331,"line":332},[5752],{"type":17,"tag":329,"props":5753,"children":5754},{},[5755],{"type":23,"value":2532},{"type":17,"tag":329,"props":5757,"children":5758},{"class":331,"line":341},[5759],{"type":17,"tag":329,"props":5760,"children":5761},{},[5762],{"type":23,"value":5763}," * 根据id查询员工与部门信息，分步查询\n",{"type":17,"tag":329,"props":5765,"children":5766},{"class":331,"line":350},[5767],{"type":17,"tag":329,"props":5768,"children":5769},{},[5770],{"type":23,"value":2572},{"type":17,"tag":329,"props":5772,"children":5773},{"class":331,"line":359},[5774],{"type":17,"tag":329,"props":5775,"children":5776},{},[5777],{"type":23,"value":2307},{"type":17,"tag":329,"props":5779,"children":5780},{"class":331,"line":368},[5781],{"type":17,"tag":329,"props":5782,"children":5783},{},[5784],{"type":23,"value":5785},"public void testGetEmpAndDeptByStep() {\n",{"type":17,"tag":329,"props":5787,"children":5788},{"class":331,"line":377},[5789],{"type":17,"tag":329,"props":5790,"children":5791},{},[5792],{"type":23,"value":2323},{"type":17,"tag":329,"props":5794,"children":5795},{"class":331,"line":386},[5796],{"type":17,"tag":329,"props":5797,"children":5798},{},[5799],{"type":23,"value":4847},{"type":17,"tag":329,"props":5801,"children":5802},{"class":331,"line":394},[5803],{"type":17,"tag":329,"props":5804,"children":5805},{},[5806],{"type":23,"value":5807},"    Emp empAndDeptByStepOne = mapper.getEmpAndDeptByStepOne(2);\n",{"type":17,"tag":329,"props":5809,"children":5810},{"class":331,"line":403},[5811],{"type":17,"tag":329,"props":5812,"children":5813},{},[5814],{"type":23,"value":5815},"    System.out.println(empAndDeptByStepOne);\n",{"type":17,"tag":329,"props":5817,"children":5818},{"class":331,"line":412},[5819],{"type":17,"tag":329,"props":5820,"children":5821},{},[5822],{"type":23,"value":753},{"type":17,"tag":3272,"props":5824,"children":5826},{"id":5825},"_724-分布查询的优势",[5827],{"type":23,"value":5828},"7.2.4 分布查询的优势",{"type":17,"tag":57,"props":5830,"children":5831},{},[5832],{"type":23,"value":5833},"可以实现延迟加载，但我们没有用到第二步查询的结果时，Mybatis不会执行第二步的sql语句",{"type":17,"tag":57,"props":5835,"children":5836},{},[5837],{"type":17,"tag":86,"props":5838,"children":5839},{},[5840],{"type":23,"value":5841},"全局配置：",{"type":17,"tag":53,"props":5843,"children":5844},{},[5845],{"type":17,"tag":57,"props":5846,"children":5847},{},[5848],{"type":23,"value":5849},"在Mybatis全局配置文件中加入配置",{"type":17,"tag":319,"props":5851,"children":5853},{"className":1376,"code":5852,"language":1378,"meta":7,"style":7},"\u003Cproperties resource=\"jdbc.properties\"\u002F>\n\n\u003Csettings>\n    \u003C!--将下划线映射为驼驼峰-->\n    \u003Csetting name=\"mapUnderscoreToCamelCase\" value=\"true\"\u002F>\n    \u003C!--开启延迟加载-->\n    \u003Csetting name=\"lazyLoadingEnabled\" value=\"true\"\u002F>\n    \u003C!--按需加载-->\n    \u003Csetting name=\"aggressiveLazyLoading\" value=\"false\"\u002F>\n\u003C\u002Fsettings>\n",[5854],{"type":17,"tag":293,"props":5855,"children":5856},{"__ignoreMap":7},[5857,5864,5871,5878,5886,5893,5901,5909,5917,5925],{"type":17,"tag":329,"props":5858,"children":5859},{"class":331,"line":332},[5860],{"type":17,"tag":329,"props":5861,"children":5862},{},[5863],{"type":23,"value":4655},{"type":17,"tag":329,"props":5865,"children":5866},{"class":331,"line":341},[5867],{"type":17,"tag":329,"props":5868,"children":5869},{"emptyLinePlaceholder":542},[5870],{"type":23,"value":545},{"type":17,"tag":329,"props":5872,"children":5873},{"class":331,"line":350},[5874],{"type":17,"tag":329,"props":5875,"children":5876},{},[5877],{"type":23,"value":4541},{"type":17,"tag":329,"props":5879,"children":5880},{"class":331,"line":359},[5881],{"type":17,"tag":329,"props":5882,"children":5883},{},[5884],{"type":23,"value":5885},"    \u003C!--将下划线映射为驼驼峰-->\n",{"type":17,"tag":329,"props":5887,"children":5888},{"class":331,"line":368},[5889],{"type":17,"tag":329,"props":5890,"children":5891},{},[5892],{"type":23,"value":4549},{"type":17,"tag":329,"props":5894,"children":5895},{"class":331,"line":377},[5896],{"type":17,"tag":329,"props":5897,"children":5898},{},[5899],{"type":23,"value":5900},"    \u003C!--开启延迟加载-->\n",{"type":17,"tag":329,"props":5902,"children":5903},{"class":331,"line":386},[5904],{"type":17,"tag":329,"props":5905,"children":5906},{},[5907],{"type":23,"value":5908},"    \u003Csetting name=\"lazyLoadingEnabled\" value=\"true\"\u002F>\n",{"type":17,"tag":329,"props":5910,"children":5911},{"class":331,"line":394},[5912],{"type":17,"tag":329,"props":5913,"children":5914},{},[5915],{"type":23,"value":5916},"    \u003C!--按需加载-->\n",{"type":17,"tag":329,"props":5918,"children":5919},{"class":331,"line":403},[5920],{"type":17,"tag":329,"props":5921,"children":5922},{},[5923],{"type":23,"value":5924},"    \u003Csetting name=\"aggressiveLazyLoading\" value=\"false\"\u002F>\n",{"type":17,"tag":329,"props":5926,"children":5927},{"class":331,"line":412},[5928],{"type":17,"tag":329,"props":5929,"children":5930},{},[5931],{"type":23,"value":4557},{"type":17,"tag":57,"props":5933,"children":5934},{},[5935],{"type":17,"tag":86,"props":5936,"children":5937},{},[5938],{"type":23,"value":5939},"局部配置：",{"type":17,"tag":53,"props":5941,"children":5942},{},[5943],{"type":17,"tag":57,"props":5944,"children":5945},{},[5946],{"type":23,"value":5947},"在映射文件中配置",{"type":17,"tag":319,"props":5949,"children":5951},{"className":1376,"code":5950,"language":1378,"meta":7,"style":7},"\u003CresultMap id=\"empAndDeptByStepResultMap\" type=\"emp\">\n    \u003Cid column=\"emp_id\" property=\"empId\"\u002F>\n    \u003Cresult column=\"emp_name\" property=\"empName\"\u002F>\n    \u003Cresult column=\"age\" property=\"age\"\u002F>\n    \u003Cresult column=\"gender\" property=\"gender\"\u002F>\n    \u003C!--fetchType：在开启了延迟加载的环境中，该属性可以设置当前的分布查询是否使用延迟加载-->\n    \u003C!--fetchType=\"eager(立即加载)|lazy(延迟加载)\"-->\n  \n    \u003Cassociation\n            fetchType=\"eager\"\n            property=\"dept\"\n            column=\"dept_id\"\n            select=\"com.wangkun.mybatis.mapper.DeptMapper.getEmpAndDeptByStepTwo\"\n    >\n    \u003C\u002Fassociation>\n\u003C\u002FresultMap>\n",[5952],{"type":17,"tag":293,"props":5953,"children":5954},{"__ignoreMap":7},[5955,5962,5969,5976,5983,5990,5998,6006,6013,6020,6028,6035,6042,6049,6056,6063],{"type":17,"tag":329,"props":5956,"children":5957},{"class":331,"line":332},[5958],{"type":17,"tag":329,"props":5959,"children":5960},{},[5961],{"type":23,"value":5509},{"type":17,"tag":329,"props":5963,"children":5964},{"class":331,"line":341},[5965],{"type":17,"tag":329,"props":5966,"children":5967},{},[5968],{"type":23,"value":4916},{"type":17,"tag":329,"props":5970,"children":5971},{"class":331,"line":350},[5972],{"type":17,"tag":329,"props":5973,"children":5974},{},[5975],{"type":23,"value":4924},{"type":17,"tag":329,"props":5977,"children":5978},{"class":331,"line":359},[5979],{"type":17,"tag":329,"props":5980,"children":5981},{},[5982],{"type":23,"value":4932},{"type":17,"tag":329,"props":5984,"children":5985},{"class":331,"line":368},[5986],{"type":17,"tag":329,"props":5987,"children":5988},{},[5989],{"type":23,"value":4940},{"type":17,"tag":329,"props":5991,"children":5992},{"class":331,"line":377},[5993],{"type":17,"tag":329,"props":5994,"children":5995},{},[5996],{"type":23,"value":5997},"    \u003C!--fetchType：在开启了延迟加载的环境中，该属性可以设置当前的分布查询是否使用延迟加载-->\n",{"type":17,"tag":329,"props":5999,"children":6000},{"class":331,"line":386},[6001],{"type":17,"tag":329,"props":6002,"children":6003},{},[6004],{"type":23,"value":6005},"    \u003C!--fetchType=\"eager(立即加载)|lazy(延迟加载)\"-->\n",{"type":17,"tag":329,"props":6007,"children":6008},{"class":331,"line":394},[6009],{"type":17,"tag":329,"props":6010,"children":6011},{},[6012],{"type":23,"value":1602},{"type":17,"tag":329,"props":6014,"children":6015},{"class":331,"line":403},[6016],{"type":17,"tag":329,"props":6017,"children":6018},{},[6019],{"type":23,"value":5553},{"type":17,"tag":329,"props":6021,"children":6022},{"class":331,"line":412},[6023],{"type":17,"tag":329,"props":6024,"children":6025},{},[6026],{"type":23,"value":6027},"            fetchType=\"eager\"\n",{"type":17,"tag":329,"props":6029,"children":6030},{"class":331,"line":421},[6031],{"type":17,"tag":329,"props":6032,"children":6033},{},[6034],{"type":23,"value":5561},{"type":17,"tag":329,"props":6036,"children":6037},{"class":331,"line":430},[6038],{"type":17,"tag":329,"props":6039,"children":6040},{},[6041],{"type":23,"value":5569},{"type":17,"tag":329,"props":6043,"children":6044},{"class":331,"line":439},[6045],{"type":17,"tag":329,"props":6046,"children":6047},{},[6048],{"type":23,"value":5577},{"type":17,"tag":329,"props":6050,"children":6051},{"class":331,"line":447},[6052],{"type":17,"tag":329,"props":6053,"children":6054},{},[6055],{"type":23,"value":5585},{"type":17,"tag":329,"props":6057,"children":6058},{"class":331,"line":456},[6059],{"type":17,"tag":329,"props":6060,"children":6061},{},[6062],{"type":23,"value":5344},{"type":17,"tag":329,"props":6064,"children":6065},{"class":331,"line":465},[6066],{"type":17,"tag":329,"props":6067,"children":6068},{},[6069],{"type":23,"value":4956},{"type":17,"tag":74,"props":6071,"children":6073},{"id":6072},"_73-一对多映射关系",[6074],{"type":23,"value":6075},"7.3 一对多映射关系",{"type":17,"tag":53,"props":6077,"children":6078},{},[6079,6084],{"type":17,"tag":57,"props":6080,"children":6081},{},[6082],{"type":23,"value":6083},"一个实体类属性对应多个sql字段",{"type":17,"tag":57,"props":6085,"children":6086},{},[6087],{"type":23,"value":6088},"一个部门对应多个员工",{"type":17,"tag":3272,"props":6090,"children":6092},{"id":6091},"_731-collection",[6093],{"type":23,"value":6094},"7.3.1 collection",{"type":17,"tag":57,"props":6096,"children":6097},{},[6098],{"type":17,"tag":86,"props":6099,"children":6100},{},[6101],{"type":23,"value":4722},{"type":17,"tag":319,"props":6103,"children":6105},{"className":321,"code":6104,"language":323,"meta":7,"style":7},"\u002F**\n * 根据部门id查询部门与员工信息，一个部门可以有多个员工\n *\u002F\nDept getDeptAndEmpByDeptId(@Param(\"deptId\") int deptId);\n",[6106],{"type":17,"tag":293,"props":6107,"children":6108},{"__ignoreMap":7},[6109,6116,6124,6131],{"type":17,"tag":329,"props":6110,"children":6111},{"class":331,"line":332},[6112],{"type":17,"tag":329,"props":6113,"children":6114},{},[6115],{"type":23,"value":2532},{"type":17,"tag":329,"props":6117,"children":6118},{"class":331,"line":341},[6119],{"type":17,"tag":329,"props":6120,"children":6121},{},[6122],{"type":23,"value":6123}," * 根据部门id查询部门与员工信息，一个部门可以有多个员工\n",{"type":17,"tag":329,"props":6125,"children":6126},{"class":331,"line":350},[6127],{"type":17,"tag":329,"props":6128,"children":6129},{},[6130],{"type":23,"value":2572},{"type":17,"tag":329,"props":6132,"children":6133},{"class":331,"line":359},[6134],{"type":17,"tag":329,"props":6135,"children":6136},{},[6137],{"type":23,"value":6138},"Dept getDeptAndEmpByDeptId(@Param(\"deptId\") int deptId);\n",{"type":17,"tag":57,"props":6140,"children":6141},{},[6142],{"type":17,"tag":86,"props":6143,"children":6144},{},[6145],{"type":23,"value":2386},{"type":17,"tag":319,"props":6147,"children":6149},{"className":1376,"code":6148,"language":1378,"meta":7,"style":7},"\u003CresultMap id=\"deptAndEmpByDeptIdResultMap\" type=\"dept\">\n    \u003Cid column=\"dept_id\" property=\"deptId\"\u002F>\n    \u003Cresult column=\"dept_name\" property=\"deptName\"\u002F>\n    \u003Ccollection property=\"empList\" ofType=\"emp\">\n        \u003Cid column=\"emp_id\" property=\"empId\"\u002F>\n        \u003Cresult column=\"emp_name\" property=\"empName\"\u002F>\n        \u003Cresult column=\"age\" property=\"age\"\u002F>\n        \u003Cresult column=\"gender\" property=\"gender\"\u002F>\n    \u003C\u002Fcollection>\n\u003C\u002FresultMap>\n\u003C!--Dept getDeptAndEmpByDeptId(@Param(\"deptId\") int deptId);-->\n\u003Cselect id=\"getDeptAndEmpByDeptId\" resultMap=\"deptAndEmpByDeptIdResultMap\">\n    select *\n    from t_dept\n             left join t_emp on t_emp.dept_id = t_dept.dept_id\n    where t_dept.dept_id = #{deptId}\n\u003C\u002Fselect>\n",[6150],{"type":17,"tag":293,"props":6151,"children":6152},{"__ignoreMap":7},[6153,6161,6169,6177,6185,6193,6201,6209,6217,6225,6232,6240,6248,6256,6264,6272,6280],{"type":17,"tag":329,"props":6154,"children":6155},{"class":331,"line":332},[6156],{"type":17,"tag":329,"props":6157,"children":6158},{},[6159],{"type":23,"value":6160},"\u003CresultMap id=\"deptAndEmpByDeptIdResultMap\" type=\"dept\">\n",{"type":17,"tag":329,"props":6162,"children":6163},{"class":331,"line":341},[6164],{"type":17,"tag":329,"props":6165,"children":6166},{},[6167],{"type":23,"value":6168},"    \u003Cid column=\"dept_id\" property=\"deptId\"\u002F>\n",{"type":17,"tag":329,"props":6170,"children":6171},{"class":331,"line":350},[6172],{"type":17,"tag":329,"props":6173,"children":6174},{},[6175],{"type":23,"value":6176},"    \u003Cresult column=\"dept_name\" property=\"deptName\"\u002F>\n",{"type":17,"tag":329,"props":6178,"children":6179},{"class":331,"line":359},[6180],{"type":17,"tag":329,"props":6181,"children":6182},{},[6183],{"type":23,"value":6184},"    \u003Ccollection property=\"empList\" ofType=\"emp\">\n",{"type":17,"tag":329,"props":6186,"children":6187},{"class":331,"line":368},[6188],{"type":17,"tag":329,"props":6189,"children":6190},{},[6191],{"type":23,"value":6192},"        \u003Cid column=\"emp_id\" property=\"empId\"\u002F>\n",{"type":17,"tag":329,"props":6194,"children":6195},{"class":331,"line":377},[6196],{"type":17,"tag":329,"props":6197,"children":6198},{},[6199],{"type":23,"value":6200},"        \u003Cresult column=\"emp_name\" property=\"empName\"\u002F>\n",{"type":17,"tag":329,"props":6202,"children":6203},{"class":331,"line":386},[6204],{"type":17,"tag":329,"props":6205,"children":6206},{},[6207],{"type":23,"value":6208},"        \u003Cresult column=\"age\" property=\"age\"\u002F>\n",{"type":17,"tag":329,"props":6210,"children":6211},{"class":331,"line":394},[6212],{"type":17,"tag":329,"props":6213,"children":6214},{},[6215],{"type":23,"value":6216},"        \u003Cresult column=\"gender\" property=\"gender\"\u002F>\n",{"type":17,"tag":329,"props":6218,"children":6219},{"class":331,"line":403},[6220],{"type":17,"tag":329,"props":6221,"children":6222},{},[6223],{"type":23,"value":6224},"    \u003C\u002Fcollection>\n",{"type":17,"tag":329,"props":6226,"children":6227},{"class":331,"line":412},[6228],{"type":17,"tag":329,"props":6229,"children":6230},{},[6231],{"type":23,"value":4956},{"type":17,"tag":329,"props":6233,"children":6234},{"class":331,"line":421},[6235],{"type":17,"tag":329,"props":6236,"children":6237},{},[6238],{"type":23,"value":6239},"\u003C!--Dept getDeptAndEmpByDeptId(@Param(\"deptId\") int deptId);-->\n",{"type":17,"tag":329,"props":6241,"children":6242},{"class":331,"line":430},[6243],{"type":17,"tag":329,"props":6244,"children":6245},{},[6246],{"type":23,"value":6247},"\u003Cselect id=\"getDeptAndEmpByDeptId\" resultMap=\"deptAndEmpByDeptIdResultMap\">\n",{"type":17,"tag":329,"props":6249,"children":6250},{"class":331,"line":439},[6251],{"type":17,"tag":329,"props":6252,"children":6253},{},[6254],{"type":23,"value":6255},"    select *\n",{"type":17,"tag":329,"props":6257,"children":6258},{"class":331,"line":447},[6259],{"type":17,"tag":329,"props":6260,"children":6261},{},[6262],{"type":23,"value":6263},"    from t_dept\n",{"type":17,"tag":329,"props":6265,"children":6266},{"class":331,"line":456},[6267],{"type":17,"tag":329,"props":6268,"children":6269},{},[6270],{"type":23,"value":6271},"             left join t_emp on t_emp.dept_id = t_dept.dept_id\n",{"type":17,"tag":329,"props":6273,"children":6274},{"class":331,"line":465},[6275],{"type":17,"tag":329,"props":6276,"children":6277},{},[6278],{"type":23,"value":6279},"    where t_dept.dept_id = #{deptId}\n",{"type":17,"tag":329,"props":6281,"children":6282},{"class":331,"line":474},[6283],{"type":17,"tag":329,"props":6284,"children":6285},{},[6286],{"type":23,"value":2123},{"type":17,"tag":57,"props":6288,"children":6289},{},[6290],{"type":17,"tag":86,"props":6291,"children":6292},{},[6293],{"type":23,"value":2292},{"type":17,"tag":319,"props":6295,"children":6297},{"className":321,"code":6296,"language":323,"meta":7,"style":7},"\u002F**\n * 根据部门id查询部门信息以及部门中的公园\n *\u002F\n@Test\npublic void testGetDeptAndEmpByDeptId() {\n  \n    SqlSession sqlSession = SqlSessionUtil.getSqlSession();\n    DeptMapper mapper = sqlSession.getMapper(DeptMapper.class);\n    Dept deptAndEmpByDeptId = mapper.getDeptAndEmpByDeptId(1);\n    System.out.println(deptAndEmpByDeptId);\n\n}\n",[6298],{"type":17,"tag":293,"props":6299,"children":6300},{"__ignoreMap":7},[6301,6308,6316,6323,6330,6338,6345,6352,6360,6368,6376,6383],{"type":17,"tag":329,"props":6302,"children":6303},{"class":331,"line":332},[6304],{"type":17,"tag":329,"props":6305,"children":6306},{},[6307],{"type":23,"value":2532},{"type":17,"tag":329,"props":6309,"children":6310},{"class":331,"line":341},[6311],{"type":17,"tag":329,"props":6312,"children":6313},{},[6314],{"type":23,"value":6315}," * 根据部门id查询部门信息以及部门中的公园\n",{"type":17,"tag":329,"props":6317,"children":6318},{"class":331,"line":350},[6319],{"type":17,"tag":329,"props":6320,"children":6321},{},[6322],{"type":23,"value":2572},{"type":17,"tag":329,"props":6324,"children":6325},{"class":331,"line":359},[6326],{"type":17,"tag":329,"props":6327,"children":6328},{},[6329],{"type":23,"value":2307},{"type":17,"tag":329,"props":6331,"children":6332},{"class":331,"line":368},[6333],{"type":17,"tag":329,"props":6334,"children":6335},{},[6336],{"type":23,"value":6337},"public void testGetDeptAndEmpByDeptId() {\n",{"type":17,"tag":329,"props":6339,"children":6340},{"class":331,"line":377},[6341],{"type":17,"tag":329,"props":6342,"children":6343},{},[6344],{"type":23,"value":1602},{"type":17,"tag":329,"props":6346,"children":6347},{"class":331,"line":386},[6348],{"type":17,"tag":329,"props":6349,"children":6350},{},[6351],{"type":23,"value":2323},{"type":17,"tag":329,"props":6353,"children":6354},{"class":331,"line":394},[6355],{"type":17,"tag":329,"props":6356,"children":6357},{},[6358],{"type":23,"value":6359},"    DeptMapper mapper = sqlSession.getMapper(DeptMapper.class);\n",{"type":17,"tag":329,"props":6361,"children":6362},{"class":331,"line":403},[6363],{"type":17,"tag":329,"props":6364,"children":6365},{},[6366],{"type":23,"value":6367},"    Dept deptAndEmpByDeptId = mapper.getDeptAndEmpByDeptId(1);\n",{"type":17,"tag":329,"props":6369,"children":6370},{"class":331,"line":412},[6371],{"type":17,"tag":329,"props":6372,"children":6373},{},[6374],{"type":23,"value":6375},"    System.out.println(deptAndEmpByDeptId);\n",{"type":17,"tag":329,"props":6377,"children":6378},{"class":331,"line":421},[6379],{"type":17,"tag":329,"props":6380,"children":6381},{"emptyLinePlaceholder":542},[6382],{"type":23,"value":545},{"type":17,"tag":329,"props":6384,"children":6385},{"class":331,"line":430},[6386],{"type":17,"tag":329,"props":6387,"children":6388},{},[6389],{"type":23,"value":753},{"type":17,"tag":3272,"props":6391,"children":6393},{"id":6392},"_732-分步查询",[6394],{"type":23,"value":6395},"7.3.2 分步查询",{"type":17,"tag":4624,"props":6397,"children":6399},{"id":6398},"第一步-1",[6400],{"type":23,"value":6401},"第一步：",{"type":17,"tag":57,"props":6403,"children":6404},{},[6405],{"type":17,"tag":86,"props":6406,"children":6407},{},[6408],{"type":23,"value":5651},{"type":17,"tag":319,"props":6410,"children":6412},{"className":321,"code":6411,"language":323,"meta":7,"style":7},"\u002F**\n * 根据部门id查询部门信息与部门中员工信息，分步查询\n *\u002F\nDept getDeptAndEmpByStepOne(@Param(\"deptId\") int deptId);\n",[6413],{"type":17,"tag":293,"props":6414,"children":6415},{"__ignoreMap":7},[6416,6423,6431,6438],{"type":17,"tag":329,"props":6417,"children":6418},{"class":331,"line":332},[6419],{"type":17,"tag":329,"props":6420,"children":6421},{},[6422],{"type":23,"value":2532},{"type":17,"tag":329,"props":6424,"children":6425},{"class":331,"line":341},[6426],{"type":17,"tag":329,"props":6427,"children":6428},{},[6429],{"type":23,"value":6430}," * 根据部门id查询部门信息与部门中员工信息，分步查询\n",{"type":17,"tag":329,"props":6432,"children":6433},{"class":331,"line":350},[6434],{"type":17,"tag":329,"props":6435,"children":6436},{},[6437],{"type":23,"value":2572},{"type":17,"tag":329,"props":6439,"children":6440},{"class":331,"line":359},[6441],{"type":17,"tag":329,"props":6442,"children":6443},{},[6444],{"type":23,"value":6445},"Dept getDeptAndEmpByStepOne(@Param(\"deptId\") int deptId);\n",{"type":17,"tag":57,"props":6447,"children":6448},{},[6449],{"type":17,"tag":86,"props":6450,"children":6451},{},[6452],{"type":23,"value":5696},{"type":17,"tag":319,"props":6454,"children":6456},{"className":1376,"code":6455,"language":1378,"meta":7,"style":7},"\u003CresultMap id=\"DeptAndEmpByStepOneResultMap\" type=\"dept\">\n    \u003Cid column=\"dept_id\" property=\"deptId\"\u002F>\n    \u003Cresult column=\"dept_name\" property=\"deptName\"\u002F>\n    \u003Ccollection\n            property=\"empList\"\n            column=\"dept_id\"\n            select=\"com.wangkun.mybatis.mapper.EmpMapper.getDeptAndEmpByStepTwo\"\n    \u002F>\n\u003C\u002FresultMap>\n\u003C!--Dept getDeptAndEmpByStepOne(@Param(\"deptId\") int deptId);-->\n\u003Cselect id=\"getDeptAndEmpByStepOne\" resultMap=\"DeptAndEmpByStepOneResultMap\">\n    select *\n    from t_dept\n    where dept_id = #{deptId}\n\u003C\u002Fselect>\n",[6457],{"type":17,"tag":293,"props":6458,"children":6459},{"__ignoreMap":7},[6460,6468,6475,6482,6490,6498,6505,6513,6521,6528,6536,6544,6551,6558,6566],{"type":17,"tag":329,"props":6461,"children":6462},{"class":331,"line":332},[6463],{"type":17,"tag":329,"props":6464,"children":6465},{},[6466],{"type":23,"value":6467},"\u003CresultMap id=\"DeptAndEmpByStepOneResultMap\" type=\"dept\">\n",{"type":17,"tag":329,"props":6469,"children":6470},{"class":331,"line":341},[6471],{"type":17,"tag":329,"props":6472,"children":6473},{},[6474],{"type":23,"value":6168},{"type":17,"tag":329,"props":6476,"children":6477},{"class":331,"line":350},[6478],{"type":17,"tag":329,"props":6479,"children":6480},{},[6481],{"type":23,"value":6176},{"type":17,"tag":329,"props":6483,"children":6484},{"class":331,"line":359},[6485],{"type":17,"tag":329,"props":6486,"children":6487},{},[6488],{"type":23,"value":6489},"    \u003Ccollection\n",{"type":17,"tag":329,"props":6491,"children":6492},{"class":331,"line":368},[6493],{"type":17,"tag":329,"props":6494,"children":6495},{},[6496],{"type":23,"value":6497},"            property=\"empList\"\n",{"type":17,"tag":329,"props":6499,"children":6500},{"class":331,"line":377},[6501],{"type":17,"tag":329,"props":6502,"children":6503},{},[6504],{"type":23,"value":5569},{"type":17,"tag":329,"props":6506,"children":6507},{"class":331,"line":386},[6508],{"type":17,"tag":329,"props":6509,"children":6510},{},[6511],{"type":23,"value":6512},"            select=\"com.wangkun.mybatis.mapper.EmpMapper.getDeptAndEmpByStepTwo\"\n",{"type":17,"tag":329,"props":6514,"children":6515},{"class":331,"line":394},[6516],{"type":17,"tag":329,"props":6517,"children":6518},{},[6519],{"type":23,"value":6520},"    \u002F>\n",{"type":17,"tag":329,"props":6522,"children":6523},{"class":331,"line":403},[6524],{"type":17,"tag":329,"props":6525,"children":6526},{},[6527],{"type":23,"value":4956},{"type":17,"tag":329,"props":6529,"children":6530},{"class":331,"line":412},[6531],{"type":17,"tag":329,"props":6532,"children":6533},{},[6534],{"type":23,"value":6535},"\u003C!--Dept getDeptAndEmpByStepOne(@Param(\"deptId\") int deptId);-->\n",{"type":17,"tag":329,"props":6537,"children":6538},{"class":331,"line":421},[6539],{"type":17,"tag":329,"props":6540,"children":6541},{},[6542],{"type":23,"value":6543},"\u003Cselect id=\"getDeptAndEmpByStepOne\" resultMap=\"DeptAndEmpByStepOneResultMap\">\n",{"type":17,"tag":329,"props":6545,"children":6546},{"class":331,"line":430},[6547],{"type":17,"tag":329,"props":6548,"children":6549},{},[6550],{"type":23,"value":6255},{"type":17,"tag":329,"props":6552,"children":6553},{"class":331,"line":439},[6554],{"type":17,"tag":329,"props":6555,"children":6556},{},[6557],{"type":23,"value":6263},{"type":17,"tag":329,"props":6559,"children":6560},{"class":331,"line":447},[6561],{"type":17,"tag":329,"props":6562,"children":6563},{},[6564],{"type":23,"value":6565},"    where dept_id = #{deptId}\n",{"type":17,"tag":329,"props":6567,"children":6568},{"class":331,"line":456},[6569],{"type":17,"tag":329,"props":6570,"children":6571},{},[6572],{"type":23,"value":2123},{"type":17,"tag":4624,"props":6574,"children":6576},{"id":6575},"第二步-1",[6577],{"type":23,"value":6578},"第二步：",{"type":17,"tag":57,"props":6580,"children":6581},{},[6582],{"type":17,"tag":86,"props":6583,"children":6584},{},[6585],{"type":23,"value":5434},{"type":17,"tag":319,"props":6587,"children":6589},{"className":321,"code":6588,"language":323,"meta":7,"style":7},"\u002F**\n * 根据dept_id查询部门信息与部门中员工的信息\n *\u002F\nList\u003CEmp> getDeptAndEmpByStepTwo(@Param(\"deptId\") int deptId);\n",[6590],{"type":17,"tag":293,"props":6591,"children":6592},{"__ignoreMap":7},[6593,6600,6608,6615],{"type":17,"tag":329,"props":6594,"children":6595},{"class":331,"line":332},[6596],{"type":17,"tag":329,"props":6597,"children":6598},{},[6599],{"type":23,"value":2532},{"type":17,"tag":329,"props":6601,"children":6602},{"class":331,"line":341},[6603],{"type":17,"tag":329,"props":6604,"children":6605},{},[6606],{"type":23,"value":6607}," * 根据dept_id查询部门信息与部门中员工的信息\n",{"type":17,"tag":329,"props":6609,"children":6610},{"class":331,"line":350},[6611],{"type":17,"tag":329,"props":6612,"children":6613},{},[6614],{"type":23,"value":2572},{"type":17,"tag":329,"props":6616,"children":6617},{"class":331,"line":359},[6618],{"type":17,"tag":329,"props":6619,"children":6620},{},[6621],{"type":23,"value":6622},"List\u003CEmp> getDeptAndEmpByStepTwo(@Param(\"deptId\") int deptId);\n",{"type":17,"tag":57,"props":6624,"children":6625},{},[6626],{"type":17,"tag":86,"props":6627,"children":6628},{},[6629],{"type":23,"value":6630},"映射文件（EmpMapper.xml）：",{"type":17,"tag":319,"props":6632,"children":6634},{"className":1376,"code":6633,"language":1378,"meta":7,"style":7},"\u003C!--List\u003CEmp> getDeptAndEmpByStepTwo(@Param(\"deptId\") int deptId);-->\n\u003Cselect id=\"getDeptAndEmpByStepTwo\" resultType=\"emp\">\n    select * from t_emp where dept_id = #{deptId}\n\u003C\u002Fselect>\n",[6635],{"type":17,"tag":293,"props":6636,"children":6637},{"__ignoreMap":7},[6638,6646,6654,6662],{"type":17,"tag":329,"props":6639,"children":6640},{"class":331,"line":332},[6641],{"type":17,"tag":329,"props":6642,"children":6643},{},[6644],{"type":23,"value":6645},"\u003C!--List\u003CEmp> getDeptAndEmpByStepTwo(@Param(\"deptId\") int deptId);-->\n",{"type":17,"tag":329,"props":6647,"children":6648},{"class":331,"line":341},[6649],{"type":17,"tag":329,"props":6650,"children":6651},{},[6652],{"type":23,"value":6653},"\u003Cselect id=\"getDeptAndEmpByStepTwo\" resultType=\"emp\">\n",{"type":17,"tag":329,"props":6655,"children":6656},{"class":331,"line":350},[6657],{"type":17,"tag":329,"props":6658,"children":6659},{},[6660],{"type":23,"value":6661},"    select * from t_emp where dept_id = #{deptId}\n",{"type":17,"tag":329,"props":6663,"children":6664},{"class":331,"line":359},[6665],{"type":17,"tag":329,"props":6666,"children":6667},{},[6668],{"type":23,"value":2123},{"type":17,"tag":57,"props":6670,"children":6671},{},[6672],{"type":17,"tag":86,"props":6673,"children":6674},{},[6675],{"type":23,"value":2292},{"type":17,"tag":319,"props":6677,"children":6679},{"className":321,"code":6678,"language":323,"meta":7,"style":7},"\u002F**\n * 根据部门id查询部门信息与员工信息，分步查询\n *\u002F\n@Test\npublic void testGetDeptAndEmpByStep(){\n    SqlSession sqlSession = SqlSessionUtil.getSqlSession();\n    DeptMapper mapper = sqlSession.getMapper(DeptMapper.class);\n    Dept deptAndEmpByStepOne = mapper.getDeptAndEmpByStepOne(1);\n    System.out.println(deptAndEmpByStepOne);\n}\n",[6680],{"type":17,"tag":293,"props":6681,"children":6682},{"__ignoreMap":7},[6683,6690,6698,6705,6712,6720,6727,6734,6742,6750],{"type":17,"tag":329,"props":6684,"children":6685},{"class":331,"line":332},[6686],{"type":17,"tag":329,"props":6687,"children":6688},{},[6689],{"type":23,"value":2532},{"type":17,"tag":329,"props":6691,"children":6692},{"class":331,"line":341},[6693],{"type":17,"tag":329,"props":6694,"children":6695},{},[6696],{"type":23,"value":6697}," * 根据部门id查询部门信息与员工信息，分步查询\n",{"type":17,"tag":329,"props":6699,"children":6700},{"class":331,"line":350},[6701],{"type":17,"tag":329,"props":6702,"children":6703},{},[6704],{"type":23,"value":2572},{"type":17,"tag":329,"props":6706,"children":6707},{"class":331,"line":359},[6708],{"type":17,"tag":329,"props":6709,"children":6710},{},[6711],{"type":23,"value":2307},{"type":17,"tag":329,"props":6713,"children":6714},{"class":331,"line":368},[6715],{"type":17,"tag":329,"props":6716,"children":6717},{},[6718],{"type":23,"value":6719},"public void testGetDeptAndEmpByStep(){\n",{"type":17,"tag":329,"props":6721,"children":6722},{"class":331,"line":377},[6723],{"type":17,"tag":329,"props":6724,"children":6725},{},[6726],{"type":23,"value":2323},{"type":17,"tag":329,"props":6728,"children":6729},{"class":331,"line":386},[6730],{"type":17,"tag":329,"props":6731,"children":6732},{},[6733],{"type":23,"value":6359},{"type":17,"tag":329,"props":6735,"children":6736},{"class":331,"line":394},[6737],{"type":17,"tag":329,"props":6738,"children":6739},{},[6740],{"type":23,"value":6741},"    Dept deptAndEmpByStepOne = mapper.getDeptAndEmpByStepOne(1);\n",{"type":17,"tag":329,"props":6743,"children":6744},{"class":331,"line":403},[6745],{"type":17,"tag":329,"props":6746,"children":6747},{},[6748],{"type":23,"value":6749},"    System.out.println(deptAndEmpByStepOne);\n",{"type":17,"tag":329,"props":6751,"children":6752},{"class":331,"line":412},[6753],{"type":17,"tag":329,"props":6754,"children":6755},{},[6756],{"type":23,"value":753},{"type":17,"tag":74,"props":6758,"children":6760},{"id":6759},"_74-总结",[6761],{"type":23,"value":6762},"7.4 总结",{"type":17,"tag":31,"props":6764,"children":6765},{},[6766,6771,6776],{"type":17,"tag":35,"props":6767,"children":6768},{},[6769],{"type":23,"value":6770},"对一 对应对象，对多 对应集合",{"type":17,"tag":35,"props":6772,"children":6773},{},[6774],{"type":23,"value":6775},"二次查询结果为对象，用association",{"type":17,"tag":35,"props":6777,"children":6778},{},[6779],{"type":23,"value":6780},"二次查询结果为集合，用collection",{"type":17,"tag":25,"props":6782,"children":6784},{"id":6783},"_8-动态sql",[6785],{"type":23,"value":6786},"8 动态SQL",{"type":17,"tag":53,"props":6788,"children":6789},{},[6790],{"type":17,"tag":57,"props":6791,"children":6792},{},[6793],{"type":23,"value":6794},"MyBatis框架的动态SQl技术是一种根据特定条件动态拼接SQL语句的功能，他存在的意义是为了解决拼接SQL语句字符串时的痛点问题",{"type":17,"tag":74,"props":6796,"children":6798},{"id":6797},"_81-if-标签",[6799],{"type":23,"value":6800},"8.1 if 标签",{"type":17,"tag":53,"props":6802,"children":6803},{},[6804],{"type":17,"tag":57,"props":6805,"children":6806},{},[6807],{"type":23,"value":6808},"根据test属性判断是否将if标签内部的sql语句进行拼接",{"type":17,"tag":319,"props":6810,"children":6812},{"className":1376,"code":6811,"language":1378,"meta":7,"style":7},"\u003C!--List\u003CEmp> getEmpByCondition(Emp emp);-->\n\u003Cselect id=\"getEmpByCondition\" resultType=\"emp\">\n    select * from t_emp where \n    \u003Cif test=\"empName != null and empName != ''\">\n        emp_name = #{empName}\n    \u003C\u002Fif>\n    \u003Cif test=\"age != null and age != ''\">\n        and age = #{age}\n    \u003C\u002Fif>\n    \u003Cif test=\"gender != null and gender != ''\">\n        and gender = #{gender}\n    \u003C\u002Fif>\n\u003C\u002Fselect>\n",[6813],{"type":17,"tag":293,"props":6814,"children":6815},{"__ignoreMap":7},[6816,6824,6832,6840,6848,6856,6864,6872,6880,6887,6895,6903,6910],{"type":17,"tag":329,"props":6817,"children":6818},{"class":331,"line":332},[6819],{"type":17,"tag":329,"props":6820,"children":6821},{},[6822],{"type":23,"value":6823},"\u003C!--List\u003CEmp> getEmpByCondition(Emp emp);-->\n",{"type":17,"tag":329,"props":6825,"children":6826},{"class":331,"line":341},[6827],{"type":17,"tag":329,"props":6828,"children":6829},{},[6830],{"type":23,"value":6831},"\u003Cselect id=\"getEmpByCondition\" resultType=\"emp\">\n",{"type":17,"tag":329,"props":6833,"children":6834},{"class":331,"line":350},[6835],{"type":17,"tag":329,"props":6836,"children":6837},{},[6838],{"type":23,"value":6839},"    select * from t_emp where \n",{"type":17,"tag":329,"props":6841,"children":6842},{"class":331,"line":359},[6843],{"type":17,"tag":329,"props":6844,"children":6845},{},[6846],{"type":23,"value":6847},"    \u003Cif test=\"empName != null and empName != ''\">\n",{"type":17,"tag":329,"props":6849,"children":6850},{"class":331,"line":368},[6851],{"type":17,"tag":329,"props":6852,"children":6853},{},[6854],{"type":23,"value":6855},"        emp_name = #{empName}\n",{"type":17,"tag":329,"props":6857,"children":6858},{"class":331,"line":377},[6859],{"type":17,"tag":329,"props":6860,"children":6861},{},[6862],{"type":23,"value":6863},"    \u003C\u002Fif>\n",{"type":17,"tag":329,"props":6865,"children":6866},{"class":331,"line":386},[6867],{"type":17,"tag":329,"props":6868,"children":6869},{},[6870],{"type":23,"value":6871},"    \u003Cif test=\"age != null and age != ''\">\n",{"type":17,"tag":329,"props":6873,"children":6874},{"class":331,"line":394},[6875],{"type":17,"tag":329,"props":6876,"children":6877},{},[6878],{"type":23,"value":6879},"        and age = #{age}\n",{"type":17,"tag":329,"props":6881,"children":6882},{"class":331,"line":403},[6883],{"type":17,"tag":329,"props":6884,"children":6885},{},[6886],{"type":23,"value":6863},{"type":17,"tag":329,"props":6888,"children":6889},{"class":331,"line":412},[6890],{"type":17,"tag":329,"props":6891,"children":6892},{},[6893],{"type":23,"value":6894},"    \u003Cif test=\"gender != null and gender != ''\">\n",{"type":17,"tag":329,"props":6896,"children":6897},{"class":331,"line":421},[6898],{"type":17,"tag":329,"props":6899,"children":6900},{},[6901],{"type":23,"value":6902},"        and gender = #{gender}\n",{"type":17,"tag":329,"props":6904,"children":6905},{"class":331,"line":430},[6906],{"type":17,"tag":329,"props":6907,"children":6908},{},[6909],{"type":23,"value":6863},{"type":17,"tag":329,"props":6911,"children":6912},{"class":331,"line":439},[6913],{"type":17,"tag":329,"props":6914,"children":6915},{},[6916],{"type":23,"value":2123},{"type":17,"tag":74,"props":6918,"children":6920},{"id":6919},"_82-where标签",[6921],{"type":23,"value":6922},"8.2 where标签",{"type":17,"tag":53,"props":6924,"children":6925},{},[6926],{"type":17,"tag":245,"props":6927,"children":6928},{},[6929,6934,6939],{"type":17,"tag":35,"props":6930,"children":6931},{},[6932],{"type":23,"value":6933},"若where标签中有成立的条件，则自动生成where关键字",{"type":17,"tag":35,"props":6935,"children":6936},{},[6937],{"type":23,"value":6938},"会自动将where标签中多余的and去掉",{"type":17,"tag":35,"props":6940,"children":6941},{},[6942],{"type":23,"value":6943},"若where标签中没有任何一个条件成立，则会自动删除where关键字",{"type":17,"tag":319,"props":6945,"children":6947},{"className":1376,"code":6946,"language":1378,"meta":7,"style":7},"\u003C!--List\u003CEmp> getEmpByCondition(Emp emp);-->\n\u003Cselect id=\"getEmpByCondition\" resultType=\"emp\">\n    select * from t_emp\n    \u003Cwhere>\n        \u003Cif test=\"empName != null and empName != ''\">\n            emp_name = #{empName}\n        \u003C\u002Fif>\n        \u003Cif test=\"age != null and age != ''\">\n            and age = #{age}\n        \u003C\u002Fif>\n        \u003Cif test=\"gender != null and gender != ''\">\n            and gender = #{gender}\n        \u003C\u002Fif>\n    \u003C\u002Fwhere>\n\u003C\u002Fselect>\n",[6948],{"type":17,"tag":293,"props":6949,"children":6950},{"__ignoreMap":7},[6951,6958,6965,6973,6981,6989,6997,7005,7013,7021,7028,7036,7044,7051,7059],{"type":17,"tag":329,"props":6952,"children":6953},{"class":331,"line":332},[6954],{"type":17,"tag":329,"props":6955,"children":6956},{},[6957],{"type":23,"value":6823},{"type":17,"tag":329,"props":6959,"children":6960},{"class":331,"line":341},[6961],{"type":17,"tag":329,"props":6962,"children":6963},{},[6964],{"type":23,"value":6831},{"type":17,"tag":329,"props":6966,"children":6967},{"class":331,"line":350},[6968],{"type":17,"tag":329,"props":6969,"children":6970},{},[6971],{"type":23,"value":6972},"    select * from t_emp\n",{"type":17,"tag":329,"props":6974,"children":6975},{"class":331,"line":359},[6976],{"type":17,"tag":329,"props":6977,"children":6978},{},[6979],{"type":23,"value":6980},"    \u003Cwhere>\n",{"type":17,"tag":329,"props":6982,"children":6983},{"class":331,"line":368},[6984],{"type":17,"tag":329,"props":6985,"children":6986},{},[6987],{"type":23,"value":6988},"        \u003Cif test=\"empName != null and empName != ''\">\n",{"type":17,"tag":329,"props":6990,"children":6991},{"class":331,"line":377},[6992],{"type":17,"tag":329,"props":6993,"children":6994},{},[6995],{"type":23,"value":6996},"            emp_name = #{empName}\n",{"type":17,"tag":329,"props":6998,"children":6999},{"class":331,"line":386},[7000],{"type":17,"tag":329,"props":7001,"children":7002},{},[7003],{"type":23,"value":7004},"        \u003C\u002Fif>\n",{"type":17,"tag":329,"props":7006,"children":7007},{"class":331,"line":394},[7008],{"type":17,"tag":329,"props":7009,"children":7010},{},[7011],{"type":23,"value":7012},"        \u003Cif test=\"age != null and age != ''\">\n",{"type":17,"tag":329,"props":7014,"children":7015},{"class":331,"line":403},[7016],{"type":17,"tag":329,"props":7017,"children":7018},{},[7019],{"type":23,"value":7020},"            and age = #{age}\n",{"type":17,"tag":329,"props":7022,"children":7023},{"class":331,"line":412},[7024],{"type":17,"tag":329,"props":7025,"children":7026},{},[7027],{"type":23,"value":7004},{"type":17,"tag":329,"props":7029,"children":7030},{"class":331,"line":421},[7031],{"type":17,"tag":329,"props":7032,"children":7033},{},[7034],{"type":23,"value":7035},"        \u003Cif test=\"gender != null and gender != ''\">\n",{"type":17,"tag":329,"props":7037,"children":7038},{"class":331,"line":430},[7039],{"type":17,"tag":329,"props":7040,"children":7041},{},[7042],{"type":23,"value":7043},"            and gender = #{gender}\n",{"type":17,"tag":329,"props":7045,"children":7046},{"class":331,"line":439},[7047],{"type":17,"tag":329,"props":7048,"children":7049},{},[7050],{"type":23,"value":7004},{"type":17,"tag":329,"props":7052,"children":7053},{"class":331,"line":447},[7054],{"type":17,"tag":329,"props":7055,"children":7056},{},[7057],{"type":23,"value":7058},"    \u003C\u002Fwhere>\n",{"type":17,"tag":329,"props":7060,"children":7061},{"class":331,"line":456},[7062],{"type":17,"tag":329,"props":7063,"children":7064},{},[7065],{"type":23,"value":2123},{"type":17,"tag":74,"props":7067,"children":7069},{"id":7068},"_83-trim标签",[7070],{"type":23,"value":7071},"8.3  trim标签",{"type":17,"tag":53,"props":7073,"children":7074},{},[7075],{"type":17,"tag":245,"props":7076,"children":7077},{},[7078,7083],{"type":17,"tag":35,"props":7079,"children":7080},{},[7081],{"type":23,"value":7082},"prefix、suffix：在标签前面或后面添加指定内容",{"type":17,"tag":35,"props":7084,"children":7085},{},[7086],{"type":23,"value":7087},"prefixOverrides、suffixOverrides：在标签中内容前面或后面去掉指定内容",{"type":17,"tag":319,"props":7089,"children":7091},{"className":1376,"code":7090,"language":1378,"meta":7,"style":7},"\u003C!--List\u003CEmp> getEmpByCondition(Emp emp);-->\n\u003Cselect id=\"getEmpByCondition\" resultType=\"emp\">\n    select * from t_emp\n    \u003Ctrim prefix=\"where\" suffixOverrides=\"and\">\n        \u003Cif test=\"empName != null and empName != ''\">\n            emp_name = #{empName} and\n        \u003C\u002Fif>\n        \u003Cif test=\"age != null and age != ''\">\n            age = #{age} and\n        \u003C\u002Fif>\n        \u003Cif test=\"gender != null and gender != ''\">\n            gender = #{gender}\n        \u003C\u002Fif>\n    \u003C\u002Ftrim>\n\u003C\u002Fselect>\n",[7092],{"type":17,"tag":293,"props":7093,"children":7094},{"__ignoreMap":7},[7095,7102,7109,7116,7124,7131,7139,7146,7153,7161,7168,7175,7183,7190,7198],{"type":17,"tag":329,"props":7096,"children":7097},{"class":331,"line":332},[7098],{"type":17,"tag":329,"props":7099,"children":7100},{},[7101],{"type":23,"value":6823},{"type":17,"tag":329,"props":7103,"children":7104},{"class":331,"line":341},[7105],{"type":17,"tag":329,"props":7106,"children":7107},{},[7108],{"type":23,"value":6831},{"type":17,"tag":329,"props":7110,"children":7111},{"class":331,"line":350},[7112],{"type":17,"tag":329,"props":7113,"children":7114},{},[7115],{"type":23,"value":6972},{"type":17,"tag":329,"props":7117,"children":7118},{"class":331,"line":359},[7119],{"type":17,"tag":329,"props":7120,"children":7121},{},[7122],{"type":23,"value":7123},"    \u003Ctrim prefix=\"where\" suffixOverrides=\"and\">\n",{"type":17,"tag":329,"props":7125,"children":7126},{"class":331,"line":368},[7127],{"type":17,"tag":329,"props":7128,"children":7129},{},[7130],{"type":23,"value":6988},{"type":17,"tag":329,"props":7132,"children":7133},{"class":331,"line":377},[7134],{"type":17,"tag":329,"props":7135,"children":7136},{},[7137],{"type":23,"value":7138},"            emp_name = #{empName} and\n",{"type":17,"tag":329,"props":7140,"children":7141},{"class":331,"line":386},[7142],{"type":17,"tag":329,"props":7143,"children":7144},{},[7145],{"type":23,"value":7004},{"type":17,"tag":329,"props":7147,"children":7148},{"class":331,"line":394},[7149],{"type":17,"tag":329,"props":7150,"children":7151},{},[7152],{"type":23,"value":7012},{"type":17,"tag":329,"props":7154,"children":7155},{"class":331,"line":403},[7156],{"type":17,"tag":329,"props":7157,"children":7158},{},[7159],{"type":23,"value":7160},"            age = #{age} and\n",{"type":17,"tag":329,"props":7162,"children":7163},{"class":331,"line":412},[7164],{"type":17,"tag":329,"props":7165,"children":7166},{},[7167],{"type":23,"value":7004},{"type":17,"tag":329,"props":7169,"children":7170},{"class":331,"line":421},[7171],{"type":17,"tag":329,"props":7172,"children":7173},{},[7174],{"type":23,"value":7035},{"type":17,"tag":329,"props":7176,"children":7177},{"class":331,"line":430},[7178],{"type":17,"tag":329,"props":7179,"children":7180},{},[7181],{"type":23,"value":7182},"            gender = #{gender}\n",{"type":17,"tag":329,"props":7184,"children":7185},{"class":331,"line":439},[7186],{"type":17,"tag":329,"props":7187,"children":7188},{},[7189],{"type":23,"value":7004},{"type":17,"tag":329,"props":7191,"children":7192},{"class":331,"line":447},[7193],{"type":17,"tag":329,"props":7194,"children":7195},{},[7196],{"type":23,"value":7197},"    \u003C\u002Ftrim>\n",{"type":17,"tag":329,"props":7199,"children":7200},{"class":331,"line":456},[7201],{"type":17,"tag":329,"props":7202,"children":7203},{},[7204],{"type":23,"value":2123},{"type":17,"tag":74,"props":7206,"children":7208},{"id":7207},"_84-choose-when-otherwise",[7209],{"type":23,"value":7210},"8.4  choose when otherwise",{"type":17,"tag":53,"props":7212,"children":7213},{},[7214,7219],{"type":17,"tag":57,"props":7215,"children":7216},{},[7217],{"type":23,"value":7218},"相当于if else if",{"type":17,"tag":57,"props":7220,"children":7221},{},[7222],{"type":23,"value":7223},"前面一旦有条件通过了，后面就不会继续执行拼接了",{"type":17,"tag":319,"props":7225,"children":7227},{"className":1376,"code":7226,"language":1378,"meta":7,"style":7},"\u003C!--List\u003CEmp> getEmpByChoose(Emp emp);-->\n\u003Cselect id=\"getEmpByChoose\" resultType=\"emp\">\n    select * from t_emp\n    \u003Cwhere>\n        \u003Cchoose>\n            \u003Cwhen test=\"empName != null and empName != ''\">\n                emp_name = #{empName}\n            \u003C\u002Fwhen>\n            \u003Cwhen test=\"age != null and age != ''\">\n                age = #{age}\n            \u003C\u002Fwhen>\n            \u003Cwhen test=\"gender != null and gender != ''\">\n                gender = #{gender}\n            \u003C\u002Fwhen>\n        \u003C\u002Fchoose>\n    \u003C\u002Fwhere>\n\u003C\u002Fselect>\n",[7228],{"type":17,"tag":293,"props":7229,"children":7230},{"__ignoreMap":7},[7231,7239,7247,7254,7261,7269,7277,7285,7293,7301,7309,7316,7324,7332,7339,7347,7354],{"type":17,"tag":329,"props":7232,"children":7233},{"class":331,"line":332},[7234],{"type":17,"tag":329,"props":7235,"children":7236},{},[7237],{"type":23,"value":7238},"\u003C!--List\u003CEmp> getEmpByChoose(Emp emp);-->\n",{"type":17,"tag":329,"props":7240,"children":7241},{"class":331,"line":341},[7242],{"type":17,"tag":329,"props":7243,"children":7244},{},[7245],{"type":23,"value":7246},"\u003Cselect id=\"getEmpByChoose\" resultType=\"emp\">\n",{"type":17,"tag":329,"props":7248,"children":7249},{"class":331,"line":350},[7250],{"type":17,"tag":329,"props":7251,"children":7252},{},[7253],{"type":23,"value":6972},{"type":17,"tag":329,"props":7255,"children":7256},{"class":331,"line":359},[7257],{"type":17,"tag":329,"props":7258,"children":7259},{},[7260],{"type":23,"value":6980},{"type":17,"tag":329,"props":7262,"children":7263},{"class":331,"line":368},[7264],{"type":17,"tag":329,"props":7265,"children":7266},{},[7267],{"type":23,"value":7268},"        \u003Cchoose>\n",{"type":17,"tag":329,"props":7270,"children":7271},{"class":331,"line":377},[7272],{"type":17,"tag":329,"props":7273,"children":7274},{},[7275],{"type":23,"value":7276},"            \u003Cwhen test=\"empName != null and empName != ''\">\n",{"type":17,"tag":329,"props":7278,"children":7279},{"class":331,"line":386},[7280],{"type":17,"tag":329,"props":7281,"children":7282},{},[7283],{"type":23,"value":7284},"                emp_name = #{empName}\n",{"type":17,"tag":329,"props":7286,"children":7287},{"class":331,"line":394},[7288],{"type":17,"tag":329,"props":7289,"children":7290},{},[7291],{"type":23,"value":7292},"            \u003C\u002Fwhen>\n",{"type":17,"tag":329,"props":7294,"children":7295},{"class":331,"line":403},[7296],{"type":17,"tag":329,"props":7297,"children":7298},{},[7299],{"type":23,"value":7300},"            \u003Cwhen test=\"age != null and age != ''\">\n",{"type":17,"tag":329,"props":7302,"children":7303},{"class":331,"line":412},[7304],{"type":17,"tag":329,"props":7305,"children":7306},{},[7307],{"type":23,"value":7308},"                age = #{age}\n",{"type":17,"tag":329,"props":7310,"children":7311},{"class":331,"line":421},[7312],{"type":17,"tag":329,"props":7313,"children":7314},{},[7315],{"type":23,"value":7292},{"type":17,"tag":329,"props":7317,"children":7318},{"class":331,"line":430},[7319],{"type":17,"tag":329,"props":7320,"children":7321},{},[7322],{"type":23,"value":7323},"            \u003Cwhen test=\"gender != null and gender != ''\">\n",{"type":17,"tag":329,"props":7325,"children":7326},{"class":331,"line":439},[7327],{"type":17,"tag":329,"props":7328,"children":7329},{},[7330],{"type":23,"value":7331},"                gender = #{gender}\n",{"type":17,"tag":329,"props":7333,"children":7334},{"class":331,"line":447},[7335],{"type":17,"tag":329,"props":7336,"children":7337},{},[7338],{"type":23,"value":7292},{"type":17,"tag":329,"props":7340,"children":7341},{"class":331,"line":456},[7342],{"type":17,"tag":329,"props":7343,"children":7344},{},[7345],{"type":23,"value":7346},"        \u003C\u002Fchoose>\n",{"type":17,"tag":329,"props":7348,"children":7349},{"class":331,"line":465},[7350],{"type":17,"tag":329,"props":7351,"children":7352},{},[7353],{"type":23,"value":7058},{"type":17,"tag":329,"props":7355,"children":7356},{"class":331,"line":474},[7357],{"type":17,"tag":329,"props":7358,"children":7359},{},[7360],{"type":23,"value":2123},{"type":17,"tag":74,"props":7362,"children":7364},{"id":7363},"_85-foreach标签",[7365],{"type":23,"value":7366},"8.5 foreach标签",{"type":17,"tag":53,"props":7368,"children":7369},{},[7370,7375,7380,7385,7390],{"type":17,"tag":57,"props":7371,"children":7372},{},[7373],{"type":23,"value":7374},"collection：设置要循环的数组或集合",{"type":17,"tag":57,"props":7376,"children":7377},{},[7378],{"type":23,"value":7379},"item：用一个字符串表示数组或集合中的每一个数据",{"type":17,"tag":57,"props":7381,"children":7382},{},[7383],{"type":23,"value":7384},"separator：设置每次循环的数据之间的分隔符",{"type":17,"tag":57,"props":7386,"children":7387},{},[7388],{"type":23,"value":7389},"open：循环的内容以什么开始",{"type":17,"tag":57,"props":7391,"children":7392},{},[7393],{"type":23,"value":7394},"close：循环的内容以什么结束",{"type":17,"tag":3272,"props":7396,"children":7398},{"id":7397},"新增多个员工信息",[7399],{"type":23,"value":7397},{"type":17,"tag":57,"props":7401,"children":7402},{},[7403],{"type":17,"tag":86,"props":7404,"children":7405},{},[7406],{"type":23,"value":2386},{"type":17,"tag":319,"props":7408,"children":7410},{"className":1376,"code":7409,"language":1378,"meta":7,"style":7},"\u003C!--void insertManyEmp(@Param(\"emps\") List\u003CEmp> emps);-->\n\u003Cinsert id=\"insertManyEmp\">\n    insert into t_emp values\n    \u003Cforeach collection=\"emps\" item=\"emp\" separator=\",\">\n        (null, #{emp.empName}, #{emp.age}, #{emp.gender}, null)\n    \u003C\u002Fforeach>\n\u003C\u002Finsert>\n",[7411],{"type":17,"tag":293,"props":7412,"children":7413},{"__ignoreMap":7},[7414,7422,7430,7438,7446,7454,7462],{"type":17,"tag":329,"props":7415,"children":7416},{"class":331,"line":332},[7417],{"type":17,"tag":329,"props":7418,"children":7419},{},[7420],{"type":23,"value":7421},"\u003C!--void insertManyEmp(@Param(\"emps\") List\u003CEmp> emps);-->\n",{"type":17,"tag":329,"props":7423,"children":7424},{"class":331,"line":341},[7425],{"type":17,"tag":329,"props":7426,"children":7427},{},[7428],{"type":23,"value":7429},"\u003Cinsert id=\"insertManyEmp\">\n",{"type":17,"tag":329,"props":7431,"children":7432},{"class":331,"line":350},[7433],{"type":17,"tag":329,"props":7434,"children":7435},{},[7436],{"type":23,"value":7437},"    insert into t_emp values\n",{"type":17,"tag":329,"props":7439,"children":7440},{"class":331,"line":359},[7441],{"type":17,"tag":329,"props":7442,"children":7443},{},[7444],{"type":23,"value":7445},"    \u003Cforeach collection=\"emps\" item=\"emp\" separator=\",\">\n",{"type":17,"tag":329,"props":7447,"children":7448},{"class":331,"line":368},[7449],{"type":17,"tag":329,"props":7450,"children":7451},{},[7452],{"type":23,"value":7453},"        (null, #{emp.empName}, #{emp.age}, #{emp.gender}, null)\n",{"type":17,"tag":329,"props":7455,"children":7456},{"class":331,"line":377},[7457],{"type":17,"tag":329,"props":7458,"children":7459},{},[7460],{"type":23,"value":7461},"    \u003C\u002Fforeach>\n",{"type":17,"tag":329,"props":7463,"children":7464},{"class":331,"line":386},[7465],{"type":17,"tag":329,"props":7466,"children":7467},{},[7468],{"type":23,"value":2503},{"type":17,"tag":3272,"props":7470,"children":7472},{"id":7471},"删除多个员工信息",[7473],{"type":23,"value":7471},{"type":17,"tag":57,"props":7475,"children":7476},{},[7477],{"type":17,"tag":86,"props":7478,"children":7479},{},[7480],{"type":23,"value":4722},{"type":17,"tag":319,"props":7482,"children":7484},{"className":1376,"code":7483,"language":1378,"meta":7,"style":7},"\u003C!--void delManyEmp(@Param(\"empIds\") Integer[] empIds);-->\n\u003Cdelete id=\"delManyEmp\">\n    delete from t_emp where\n    \u003Cforeach collection=\"empIds\" item=\"empId\" separator=\"or\">\n        emp_id = #{empId}\n    \u003C\u002Fforeach>\n\u003C\u002Fdelete>\n",[7485],{"type":17,"tag":293,"props":7486,"children":7487},{"__ignoreMap":7},[7488,7496,7504,7512,7520,7528,7535],{"type":17,"tag":329,"props":7489,"children":7490},{"class":331,"line":332},[7491],{"type":17,"tag":329,"props":7492,"children":7493},{},[7494],{"type":23,"value":7495},"\u003C!--void delManyEmp(@Param(\"empIds\") Integer[] empIds);-->\n",{"type":17,"tag":329,"props":7497,"children":7498},{"class":331,"line":341},[7499],{"type":17,"tag":329,"props":7500,"children":7501},{},[7502],{"type":23,"value":7503},"\u003Cdelete id=\"delManyEmp\">\n",{"type":17,"tag":329,"props":7505,"children":7506},{"class":331,"line":350},[7507],{"type":17,"tag":329,"props":7508,"children":7509},{},[7510],{"type":23,"value":7511},"    delete from t_emp where\n",{"type":17,"tag":329,"props":7513,"children":7514},{"class":331,"line":359},[7515],{"type":17,"tag":329,"props":7516,"children":7517},{},[7518],{"type":23,"value":7519},"    \u003Cforeach collection=\"empIds\" item=\"empId\" separator=\"or\">\n",{"type":17,"tag":329,"props":7521,"children":7522},{"class":331,"line":368},[7523],{"type":17,"tag":329,"props":7524,"children":7525},{},[7526],{"type":23,"value":7527},"        emp_id = #{empId}\n",{"type":17,"tag":329,"props":7529,"children":7530},{"class":331,"line":377},[7531],{"type":17,"tag":329,"props":7532,"children":7533},{},[7534],{"type":23,"value":7461},{"type":17,"tag":329,"props":7536,"children":7537},{"class":331,"line":386},[7538],{"type":17,"tag":329,"props":7539,"children":7540},{},[7541],{"type":23,"value":3979},{"type":17,"tag":74,"props":7543,"children":7545},{"id":7544},"sql-标签",[7546],{"type":23,"value":7547},"sql 标签",{"type":17,"tag":53,"props":7549,"children":7550},{},[7551],{"type":17,"tag":57,"props":7552,"children":7553},{},[7554],{"type":23,"value":7555},"可以记录一段sql，在需要的地方使用include标签进行引用",{"type":17,"tag":319,"props":7557,"children":7559},{"className":1376,"code":7558,"language":1378,"meta":7,"style":7},"\u003Csql id=\"empColumns\">\n    emp_id\n    ,emp_name, age, gender\n\u003C\u002Fsql>\n\u003C!--List\u003CEmp> getEmpByChoose(Emp emp);-->\n\u003Cselect id=\"getEmpByChoose\" resultType=\"emp\">\n    select\n    \u003Cinclude refid=\"empColumns\"\u002F>\n    from t_emp\n    \u003Cwhere>\n        \u003Cchoose>\n            \u003Cwhen test=\"empName != null and empName != ''\">\n                emp_name = #{empName}\n            \u003C\u002Fwhen>\n            \u003Cwhen test=\"age != null and age != ''\">\n                age = #{age}\n            \u003C\u002Fwhen>\n            \u003Cwhen test=\"gender != null and gender != ''\">\n                gender = #{gender}\n            \u003C\u002Fwhen>\n        \u003C\u002Fchoose>\n    \u003C\u002Fwhere>\n\u003C\u002Fselect>\n",[7560],{"type":17,"tag":293,"props":7561,"children":7562},{"__ignoreMap":7},[7563,7571,7579,7587,7595,7602,7609,7617,7625,7632,7639,7646,7653,7660,7667,7674,7681,7688,7695,7702,7709,7716,7723],{"type":17,"tag":329,"props":7564,"children":7565},{"class":331,"line":332},[7566],{"type":17,"tag":329,"props":7567,"children":7568},{},[7569],{"type":23,"value":7570},"\u003Csql id=\"empColumns\">\n",{"type":17,"tag":329,"props":7572,"children":7573},{"class":331,"line":341},[7574],{"type":17,"tag":329,"props":7575,"children":7576},{},[7577],{"type":23,"value":7578},"    emp_id\n",{"type":17,"tag":329,"props":7580,"children":7581},{"class":331,"line":350},[7582],{"type":17,"tag":329,"props":7583,"children":7584},{},[7585],{"type":23,"value":7586},"    ,emp_name, age, gender\n",{"type":17,"tag":329,"props":7588,"children":7589},{"class":331,"line":359},[7590],{"type":17,"tag":329,"props":7591,"children":7592},{},[7593],{"type":23,"value":7594},"\u003C\u002Fsql>\n",{"type":17,"tag":329,"props":7596,"children":7597},{"class":331,"line":368},[7598],{"type":17,"tag":329,"props":7599,"children":7600},{},[7601],{"type":23,"value":7238},{"type":17,"tag":329,"props":7603,"children":7604},{"class":331,"line":377},[7605],{"type":17,"tag":329,"props":7606,"children":7607},{},[7608],{"type":23,"value":7246},{"type":17,"tag":329,"props":7610,"children":7611},{"class":331,"line":386},[7612],{"type":17,"tag":329,"props":7613,"children":7614},{},[7615],{"type":23,"value":7616},"    select\n",{"type":17,"tag":329,"props":7618,"children":7619},{"class":331,"line":394},[7620],{"type":17,"tag":329,"props":7621,"children":7622},{},[7623],{"type":23,"value":7624},"    \u003Cinclude refid=\"empColumns\"\u002F>\n",{"type":17,"tag":329,"props":7626,"children":7627},{"class":331,"line":403},[7628],{"type":17,"tag":329,"props":7629,"children":7630},{},[7631],{"type":23,"value":5210},{"type":17,"tag":329,"props":7633,"children":7634},{"class":331,"line":412},[7635],{"type":17,"tag":329,"props":7636,"children":7637},{},[7638],{"type":23,"value":6980},{"type":17,"tag":329,"props":7640,"children":7641},{"class":331,"line":421},[7642],{"type":17,"tag":329,"props":7643,"children":7644},{},[7645],{"type":23,"value":7268},{"type":17,"tag":329,"props":7647,"children":7648},{"class":331,"line":430},[7649],{"type":17,"tag":329,"props":7650,"children":7651},{},[7652],{"type":23,"value":7276},{"type":17,"tag":329,"props":7654,"children":7655},{"class":331,"line":439},[7656],{"type":17,"tag":329,"props":7657,"children":7658},{},[7659],{"type":23,"value":7284},{"type":17,"tag":329,"props":7661,"children":7662},{"class":331,"line":447},[7663],{"type":17,"tag":329,"props":7664,"children":7665},{},[7666],{"type":23,"value":7292},{"type":17,"tag":329,"props":7668,"children":7669},{"class":331,"line":456},[7670],{"type":17,"tag":329,"props":7671,"children":7672},{},[7673],{"type":23,"value":7300},{"type":17,"tag":329,"props":7675,"children":7676},{"class":331,"line":465},[7677],{"type":17,"tag":329,"props":7678,"children":7679},{},[7680],{"type":23,"value":7308},{"type":17,"tag":329,"props":7682,"children":7683},{"class":331,"line":474},[7684],{"type":17,"tag":329,"props":7685,"children":7686},{},[7687],{"type":23,"value":7292},{"type":17,"tag":329,"props":7689,"children":7690},{"class":331,"line":483},[7691],{"type":17,"tag":329,"props":7692,"children":7693},{},[7694],{"type":23,"value":7323},{"type":17,"tag":329,"props":7696,"children":7697},{"class":331,"line":667},[7698],{"type":17,"tag":329,"props":7699,"children":7700},{},[7701],{"type":23,"value":7331},{"type":17,"tag":329,"props":7703,"children":7704},{"class":331,"line":676},[7705],{"type":17,"tag":329,"props":7706,"children":7707},{},[7708],{"type":23,"value":7292},{"type":17,"tag":329,"props":7710,"children":7711},{"class":331,"line":685},[7712],{"type":17,"tag":329,"props":7713,"children":7714},{},[7715],{"type":23,"value":7346},{"type":17,"tag":329,"props":7717,"children":7718},{"class":331,"line":694},[7719],{"type":17,"tag":329,"props":7720,"children":7721},{},[7722],{"type":23,"value":7058},{"type":17,"tag":329,"props":7724,"children":7725},{"class":331,"line":1213},[7726],{"type":17,"tag":329,"props":7727,"children":7728},{},[7729],{"type":23,"value":2123},{"type":17,"tag":25,"props":7731,"children":7733},{"id":7732},"_9-mybatis缓存",[7734],{"type":23,"value":7735},"9 MyBatis缓存",{"type":17,"tag":74,"props":7737,"children":7739},{"id":7738},"_91-一级缓存",[7740],{"type":23,"value":7741},"9.1 一级缓存",{"type":17,"tag":53,"props":7743,"children":7744},{},[7745],{"type":17,"tag":57,"props":7746,"children":7747},{},[7748],{"type":23,"value":7749},"一级缓存是SqlSession级别的，通过同一个SqlSession查询的数据会被缓存，下次查询相同的数据，就会从缓存中获取，不用在执行一遍sql语句去数据库获取",{"type":17,"tag":57,"props":7751,"children":7752},{},[7753],{"type":23,"value":7754},"**开启条件：**默认开启",{"type":17,"tag":57,"props":7756,"children":7757},{},[7758],{"type":17,"tag":86,"props":7759,"children":7760},{},[7761],{"type":23,"value":7762},"一级缓存失效的四种情况",{"type":17,"tag":245,"props":7764,"children":7765},{},[7766,7771,7776,7781],{"type":17,"tag":35,"props":7767,"children":7768},{},[7769],{"type":23,"value":7770},"不同的SqlSession对应不同的一级缓存",{"type":17,"tag":35,"props":7772,"children":7773},{},[7774],{"type":23,"value":7775},"同一个SqlSession但查询条件不同",{"type":17,"tag":35,"props":7777,"children":7778},{},[7779],{"type":23,"value":7780},"同一个SqlSession但两次查询期间执行了任何crud操作",{"type":17,"tag":35,"props":7782,"children":7783},{},[7784,7786],{"type":23,"value":7785},"同一个SqlSession但两次查询期间手动清空缓存：",{"type":17,"tag":293,"props":7787,"children":7789},{"className":7788},[],[7790],{"type":23,"value":7791},"sqlSession.clearCache();",{"type":17,"tag":74,"props":7793,"children":7795},{"id":7794},"_92-二级缓存",[7796],{"type":23,"value":7797},"9.2 二级缓存",{"type":17,"tag":53,"props":7799,"children":7800},{},[7801],{"type":17,"tag":57,"props":7802,"children":7803},{},[7804],{"type":23,"value":7805},"二级缓存是SqlSessionFactory级别的，通过同一个SqlSessionFactory创建的SqlSession查询的结果会被缓存；伺候若再次执行相同的查询语句，结果会从缓存中获取",{"type":17,"tag":57,"props":7807,"children":7808},{},[7809],{"type":17,"tag":86,"props":7810,"children":7811},{},[7812],{"type":23,"value":7813},"开启条件：",{"type":17,"tag":31,"props":7815,"children":7816},{},[7817,7830,7841,7846],{"type":17,"tag":35,"props":7818,"children":7819},{},[7820,7822,7828],{"type":23,"value":7821},"在核心配置文件中，设置全局配置属性",{"type":17,"tag":293,"props":7823,"children":7825},{"className":7824},[],[7826],{"type":23,"value":7827},"cacheEnabled=\"true\"",{"type":23,"value":7829},"，默认为true，不需要配置",{"type":17,"tag":35,"props":7831,"children":7832},{},[7833,7835],{"type":23,"value":7834},"在映射文件中设置标签",{"type":17,"tag":293,"props":7836,"children":7838},{"className":7837},[],[7839],{"type":23,"value":7840},"\u003Ccache\u002F>",{"type":17,"tag":35,"props":7842,"children":7843},{},[7844],{"type":23,"value":7845},"二级缓存中必须在SqlSession关闭或提交之后有效",{"type":17,"tag":35,"props":7847,"children":7848},{},[7849],{"type":23,"value":7850},"查询的数据所转换的实体类类型必须实现序列化接口",{"type":17,"tag":57,"props":7852,"children":7853},{},[7854],{"type":17,"tag":86,"props":7855,"children":7856},{},[7857],{"type":23,"value":7858},"二级缓存失效的一种情况：",{"type":17,"tag":57,"props":7860,"children":7861},{},[7862],{"type":23,"value":7863},"两次查询之间执行了任意的增改，会使一级和二级缓存同时失效",{"type":17,"tag":74,"props":7865,"children":7867},{"id":7866},"_93-mybatis缓存查询的顺序",[7868],{"type":23,"value":7869},"9.3 MyBatis缓存查询的顺序",{"type":17,"tag":53,"props":7871,"children":7872},{},[7873],{"type":17,"tag":57,"props":7874,"children":7875},{},[7876],{"type":23,"value":7877},"先找范围大的，再找范围小的",{"type":17,"tag":57,"props":7879,"children":7880},{},[7881],{"type":23,"value":7882},"先查询二级缓存，二级缓存中可能有其他程序已经查出来的数据，可以拿来直接使用",{"type":17,"tag":57,"props":7884,"children":7885},{},[7886],{"type":23,"value":7887},"二级缓存没有命中，在查询一级缓存",{"type":17,"tag":57,"props":7889,"children":7890},{},[7891],{"type":23,"value":7892},"一级缓存没有命中，再去查找数据库",{"type":17,"tag":57,"props":7894,"children":7895},{},[7896],{"type":23,"value":7897},"SqlSession关闭之后，一级缓存中的数据会写入二级缓存",{"type":17,"tag":74,"props":7899,"children":7901},{"id":7900},"_94-mybatis可以整合第三方缓存",[7902],{"type":23,"value":7903},"9.4 MyBatis可以整合第三方缓存",{"type":17,"tag":57,"props":7905,"children":7906},{},[7907],{"type":23,"value":7908},"略。。。。。。",{"type":17,"tag":25,"props":7910,"children":7912},{"id":7911},"_10-mybatis的逆向工程",[7913],{"type":23,"value":7914},"10 MyBatis的逆向工程",{"type":17,"tag":53,"props":7916,"children":7917},{},[7918,7923,7928],{"type":17,"tag":57,"props":7919,"children":7920},{},[7921],{"type":23,"value":7922},"**正向工程：**先创建Java实体类，由框架负责根据实体类生成数据库表。Hibernate是支持正向工程的",{"type":17,"tag":57,"props":7924,"children":7925},{},[7926],{"type":23,"value":7927},"**逆向工程：**先创建数据库表，由框架负责根据数据库表，反向生成",{"type":17,"tag":31,"props":7929,"children":7930},{},[7931,7936,7941],{"type":17,"tag":35,"props":7932,"children":7933},{},[7934],{"type":23,"value":7935},"Java实体类",{"type":17,"tag":35,"props":7937,"children":7938},{},[7939],{"type":23,"value":7940},"Mapper接口",{"type":17,"tag":35,"props":7942,"children":7943},{},[7944],{"type":23,"value":7945},"Mapper映射文件",{"type":17,"tag":57,"props":7947,"children":7948},{},[7949],{"type":17,"tag":86,"props":7950,"children":7951},{},[7952],{"type":23,"value":7953},"pom.xml：",{"type":17,"tag":319,"props":7955,"children":7957},{"className":1376,"code":7956,"language":1378,"meta":7,"style":7},"\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\u003Cproject xmlns=\"http:\u002F\u002Fmaven.apache.org\u002FPOM\u002F4.0.0\"\n         xmlns:xsi=\"http:\u002F\u002Fwww.w3.org\u002F2001\u002FXMLSchema-instance\"\n         xsi:schemaLocation=\"http:\u002F\u002Fmaven.apache.org\u002FPOM\u002F4.0.0 http:\u002F\u002Fmaven.apache.org\u002Fxsd\u002Fmaven-4.0.0.xsd\">\n    \u003CmodelVersion>4.0.0\u003C\u002FmodelVersion>\n\n    \u003CgroupId>com.wangkun.mybatis\u003C\u002FgroupId>\n    \u003CartifactId>mybatis_mbg\u003C\u002FartifactId>\n    \u003Cversion>1.0-SNAPSHOT\u003C\u002Fversion>\n    \u003Cpackaging>jar\u003C\u002Fpackaging>\n\n    \u003Cproperties>\n        \u003Cmaven.compiler.source>8\u003C\u002Fmaven.compiler.source>\n        \u003Cmaven.compiler.target>8\u003C\u002Fmaven.compiler.target>\n        \u003Cproject.build.sourceEncoding>UTF-8\u003C\u002Fproject.build.sourceEncoding>\n    \u003C\u002Fproperties>\n\n    \u003Cdependencies>\n        \u003Cdependency>\n            \u003CgroupId>org.mybatis\u003C\u002FgroupId>\n            \u003CartifactId>mybatis\u003C\u002FartifactId>\n            \u003Cversion>3.5.7\u003C\u002Fversion>\n        \u003C\u002Fdependency>\n        \u003C!-- junit测试 -->\n        \u003Cdependency>\n            \u003CgroupId>junit\u003C\u002FgroupId>\n            \u003CartifactId>junit\u003C\u002FartifactId>\n            \u003Cversion>4.12\u003C\u002Fversion>\n            \u003Cscope>test\u003C\u002Fscope>\n        \u003C\u002Fdependency>\n        \u003C!-- log4j日志 -->\n        \u003Cdependency>\n            \u003CgroupId>log4j\u003C\u002FgroupId>\n            \u003CartifactId>log4j\u003C\u002FartifactId>\n            \u003Cversion>1.2.17\u003C\u002Fversion>\n        \u003C\u002Fdependency>\n        \u003Cdependency>\n            \u003CgroupId>mysql\u003C\u002FgroupId>\n            \u003CartifactId>mysql-connector-java\u003C\u002FartifactId>\n            \u003Cversion>8.0.16\u003C\u002Fversion>\n        \u003C\u002Fdependency>\n    \u003C\u002Fdependencies>\n    \u003C!-- 构建过程中用到的插件 -->\n    \u003Cbuild>\n        \u003C!-- 具体插件，逆向工程的操作是以构建过程中插件形式出现的 -->\n        \u003Cplugins>\n            \u003Cplugin>\n                \u003CgroupId>org.mybatis.generator\u003C\u002FgroupId>\n                \u003CartifactId>mybatis-generator-maven-plugin\u003C\u002FartifactId>\n                \u003Cversion>1.3.0\u003C\u002Fversion>\n                \u003C!--插件的依赖-->\n                \u003Cdependencies>\n                    \u003C!--逆向工程的核心依赖-->\n                    \u003Cdependency>\n                        \u003CgroupId>org.mybatis.generator\u003C\u002FgroupId>\n                        \u003CartifactId>mybatis-generator-core\u003C\u002FartifactId>\n                        \u003Cversion>1.3.2\u003C\u002Fversion>\n                    \u003C\u002Fdependency>\n                    \u003C!--MySQL驱动-->\n                    \u003Cdependency>\n                        \u003CgroupId>mysql\u003C\u002FgroupId>\n                        \u003CartifactId>mysql-connector-java\u003C\u002FartifactId>\n                        \u003Cversion>8.0.16\u003C\u002Fversion>\n                    \u003C\u002Fdependency>\n                \u003C\u002Fdependencies>\n            \u003C\u002Fplugin>\n        \u003C\u002Fplugins>\n    \u003C\u002Fbuild>\n\u003C\u002Fproject>\n",[7958],{"type":17,"tag":293,"props":7959,"children":7960},{"__ignoreMap":7},[7961,7969,7977,7985,7993,8001,8008,8016,8024,8032,8040,8047,8055,8063,8071,8079,8087,8094,8102,8110,8118,8126,8134,8142,8150,8157,8165,8173,8181,8189,8196,8204,8211,8219,8227,8235,8242,8249,8257,8265,8273,8280,8288,8296,8304,8313,8322,8331,8340,8349,8358,8367,8376,8385,8394,8403,8412,8421,8430,8439,8447,8456,8465,8474,8482,8491,8500,8509,8518],{"type":17,"tag":329,"props":7962,"children":7963},{"class":331,"line":332},[7964],{"type":17,"tag":329,"props":7965,"children":7966},{},[7967],{"type":23,"value":7968},"\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n",{"type":17,"tag":329,"props":7970,"children":7971},{"class":331,"line":341},[7972],{"type":17,"tag":329,"props":7973,"children":7974},{},[7975],{"type":23,"value":7976},"\u003Cproject xmlns=\"http:\u002F\u002Fmaven.apache.org\u002FPOM\u002F4.0.0\"\n",{"type":17,"tag":329,"props":7978,"children":7979},{"class":331,"line":350},[7980],{"type":17,"tag":329,"props":7981,"children":7982},{},[7983],{"type":23,"value":7984},"         xmlns:xsi=\"http:\u002F\u002Fwww.w3.org\u002F2001\u002FXMLSchema-instance\"\n",{"type":17,"tag":329,"props":7986,"children":7987},{"class":331,"line":359},[7988],{"type":17,"tag":329,"props":7989,"children":7990},{},[7991],{"type":23,"value":7992},"         xsi:schemaLocation=\"http:\u002F\u002Fmaven.apache.org\u002FPOM\u002F4.0.0 http:\u002F\u002Fmaven.apache.org\u002Fxsd\u002Fmaven-4.0.0.xsd\">\n",{"type":17,"tag":329,"props":7994,"children":7995},{"class":331,"line":368},[7996],{"type":17,"tag":329,"props":7997,"children":7998},{},[7999],{"type":23,"value":8000},"    \u003CmodelVersion>4.0.0\u003C\u002FmodelVersion>\n",{"type":17,"tag":329,"props":8002,"children":8003},{"class":331,"line":377},[8004],{"type":17,"tag":329,"props":8005,"children":8006},{"emptyLinePlaceholder":542},[8007],{"type":23,"value":545},{"type":17,"tag":329,"props":8009,"children":8010},{"class":331,"line":386},[8011],{"type":17,"tag":329,"props":8012,"children":8013},{},[8014],{"type":23,"value":8015},"    \u003CgroupId>com.wangkun.mybatis\u003C\u002FgroupId>\n",{"type":17,"tag":329,"props":8017,"children":8018},{"class":331,"line":394},[8019],{"type":17,"tag":329,"props":8020,"children":8021},{},[8022],{"type":23,"value":8023},"    \u003CartifactId>mybatis_mbg\u003C\u002FartifactId>\n",{"type":17,"tag":329,"props":8025,"children":8026},{"class":331,"line":403},[8027],{"type":17,"tag":329,"props":8028,"children":8029},{},[8030],{"type":23,"value":8031},"    \u003Cversion>1.0-SNAPSHOT\u003C\u002Fversion>\n",{"type":17,"tag":329,"props":8033,"children":8034},{"class":331,"line":412},[8035],{"type":17,"tag":329,"props":8036,"children":8037},{},[8038],{"type":23,"value":8039},"    \u003Cpackaging>jar\u003C\u002Fpackaging>\n",{"type":17,"tag":329,"props":8041,"children":8042},{"class":331,"line":421},[8043],{"type":17,"tag":329,"props":8044,"children":8045},{"emptyLinePlaceholder":542},[8046],{"type":23,"value":545},{"type":17,"tag":329,"props":8048,"children":8049},{"class":331,"line":430},[8050],{"type":17,"tag":329,"props":8051,"children":8052},{},[8053],{"type":23,"value":8054},"    \u003Cproperties>\n",{"type":17,"tag":329,"props":8056,"children":8057},{"class":331,"line":439},[8058],{"type":17,"tag":329,"props":8059,"children":8060},{},[8061],{"type":23,"value":8062},"        \u003Cmaven.compiler.source>8\u003C\u002Fmaven.compiler.source>\n",{"type":17,"tag":329,"props":8064,"children":8065},{"class":331,"line":447},[8066],{"type":17,"tag":329,"props":8067,"children":8068},{},[8069],{"type":23,"value":8070},"        \u003Cmaven.compiler.target>8\u003C\u002Fmaven.compiler.target>\n",{"type":17,"tag":329,"props":8072,"children":8073},{"class":331,"line":456},[8074],{"type":17,"tag":329,"props":8075,"children":8076},{},[8077],{"type":23,"value":8078},"        \u003Cproject.build.sourceEncoding>UTF-8\u003C\u002Fproject.build.sourceEncoding>\n",{"type":17,"tag":329,"props":8080,"children":8081},{"class":331,"line":465},[8082],{"type":17,"tag":329,"props":8083,"children":8084},{},[8085],{"type":23,"value":8086},"    \u003C\u002Fproperties>\n",{"type":17,"tag":329,"props":8088,"children":8089},{"class":331,"line":474},[8090],{"type":17,"tag":329,"props":8091,"children":8092},{"emptyLinePlaceholder":542},[8093],{"type":23,"value":545},{"type":17,"tag":329,"props":8095,"children":8096},{"class":331,"line":483},[8097],{"type":17,"tag":329,"props":8098,"children":8099},{},[8100],{"type":23,"value":8101},"    \u003Cdependencies>\n",{"type":17,"tag":329,"props":8103,"children":8104},{"class":331,"line":667},[8105],{"type":17,"tag":329,"props":8106,"children":8107},{},[8108],{"type":23,"value":8109},"        \u003Cdependency>\n",{"type":17,"tag":329,"props":8111,"children":8112},{"class":331,"line":676},[8113],{"type":17,"tag":329,"props":8114,"children":8115},{},[8116],{"type":23,"value":8117},"            \u003CgroupId>org.mybatis\u003C\u002FgroupId>\n",{"type":17,"tag":329,"props":8119,"children":8120},{"class":331,"line":685},[8121],{"type":17,"tag":329,"props":8122,"children":8123},{},[8124],{"type":23,"value":8125},"            \u003CartifactId>mybatis\u003C\u002FartifactId>\n",{"type":17,"tag":329,"props":8127,"children":8128},{"class":331,"line":694},[8129],{"type":17,"tag":329,"props":8130,"children":8131},{},[8132],{"type":23,"value":8133},"            \u003Cversion>3.5.7\u003C\u002Fversion>\n",{"type":17,"tag":329,"props":8135,"children":8136},{"class":331,"line":1213},[8137],{"type":17,"tag":329,"props":8138,"children":8139},{},[8140],{"type":23,"value":8141},"        \u003C\u002Fdependency>\n",{"type":17,"tag":329,"props":8143,"children":8144},{"class":331,"line":1222},[8145],{"type":17,"tag":329,"props":8146,"children":8147},{},[8148],{"type":23,"value":8149},"        \u003C!-- junit测试 -->\n",{"type":17,"tag":329,"props":8151,"children":8152},{"class":331,"line":1231},[8153],{"type":17,"tag":329,"props":8154,"children":8155},{},[8156],{"type":23,"value":8109},{"type":17,"tag":329,"props":8158,"children":8159},{"class":331,"line":1240},[8160],{"type":17,"tag":329,"props":8161,"children":8162},{},[8163],{"type":23,"value":8164},"            \u003CgroupId>junit\u003C\u002FgroupId>\n",{"type":17,"tag":329,"props":8166,"children":8167},{"class":331,"line":1248},[8168],{"type":17,"tag":329,"props":8169,"children":8170},{},[8171],{"type":23,"value":8172},"            \u003CartifactId>junit\u003C\u002FartifactId>\n",{"type":17,"tag":329,"props":8174,"children":8175},{"class":331,"line":1257},[8176],{"type":17,"tag":329,"props":8177,"children":8178},{},[8179],{"type":23,"value":8180},"            \u003Cversion>4.12\u003C\u002Fversion>\n",{"type":17,"tag":329,"props":8182,"children":8183},{"class":331,"line":1266},[8184],{"type":17,"tag":329,"props":8185,"children":8186},{},[8187],{"type":23,"value":8188},"            \u003Cscope>test\u003C\u002Fscope>\n",{"type":17,"tag":329,"props":8190,"children":8191},{"class":331,"line":1275},[8192],{"type":17,"tag":329,"props":8193,"children":8194},{},[8195],{"type":23,"value":8141},{"type":17,"tag":329,"props":8197,"children":8198},{"class":331,"line":1284},[8199],{"type":17,"tag":329,"props":8200,"children":8201},{},[8202],{"type":23,"value":8203},"        \u003C!-- log4j日志 -->\n",{"type":17,"tag":329,"props":8205,"children":8206},{"class":331,"line":1292},[8207],{"type":17,"tag":329,"props":8208,"children":8209},{},[8210],{"type":23,"value":8109},{"type":17,"tag":329,"props":8212,"children":8213},{"class":331,"line":1301},[8214],{"type":17,"tag":329,"props":8215,"children":8216},{},[8217],{"type":23,"value":8218},"            \u003CgroupId>log4j\u003C\u002FgroupId>\n",{"type":17,"tag":329,"props":8220,"children":8221},{"class":331,"line":1310},[8222],{"type":17,"tag":329,"props":8223,"children":8224},{},[8225],{"type":23,"value":8226},"            \u003CartifactId>log4j\u003C\u002FartifactId>\n",{"type":17,"tag":329,"props":8228,"children":8229},{"class":331,"line":1319},[8230],{"type":17,"tag":329,"props":8231,"children":8232},{},[8233],{"type":23,"value":8234},"            \u003Cversion>1.2.17\u003C\u002Fversion>\n",{"type":17,"tag":329,"props":8236,"children":8237},{"class":331,"line":1328},[8238],{"type":17,"tag":329,"props":8239,"children":8240},{},[8241],{"type":23,"value":8141},{"type":17,"tag":329,"props":8243,"children":8244},{"class":331,"line":1336},[8245],{"type":17,"tag":329,"props":8246,"children":8247},{},[8248],{"type":23,"value":8109},{"type":17,"tag":329,"props":8250,"children":8251},{"class":331,"line":1345},[8252],{"type":17,"tag":329,"props":8253,"children":8254},{},[8255],{"type":23,"value":8256},"            \u003CgroupId>mysql\u003C\u002FgroupId>\n",{"type":17,"tag":329,"props":8258,"children":8259},{"class":331,"line":1354},[8260],{"type":17,"tag":329,"props":8261,"children":8262},{},[8263],{"type":23,"value":8264},"            \u003CartifactId>mysql-connector-java\u003C\u002FartifactId>\n",{"type":17,"tag":329,"props":8266,"children":8267},{"class":331,"line":1979},[8268],{"type":17,"tag":329,"props":8269,"children":8270},{},[8271],{"type":23,"value":8272},"            \u003Cversion>8.0.16\u003C\u002Fversion>\n",{"type":17,"tag":329,"props":8274,"children":8275},{"class":331,"line":1988},[8276],{"type":17,"tag":329,"props":8277,"children":8278},{},[8279],{"type":23,"value":8141},{"type":17,"tag":329,"props":8281,"children":8282},{"class":331,"line":1997},[8283],{"type":17,"tag":329,"props":8284,"children":8285},{},[8286],{"type":23,"value":8287},"    \u003C\u002Fdependencies>\n",{"type":17,"tag":329,"props":8289,"children":8290},{"class":331,"line":2006},[8291],{"type":17,"tag":329,"props":8292,"children":8293},{},[8294],{"type":23,"value":8295},"    \u003C!-- 构建过程中用到的插件 -->\n",{"type":17,"tag":329,"props":8297,"children":8298},{"class":331,"line":2014},[8299],{"type":17,"tag":329,"props":8300,"children":8301},{},[8302],{"type":23,"value":8303},"    \u003Cbuild>\n",{"type":17,"tag":329,"props":8305,"children":8307},{"class":331,"line":8306},45,[8308],{"type":17,"tag":329,"props":8309,"children":8310},{},[8311],{"type":23,"value":8312},"        \u003C!-- 具体插件，逆向工程的操作是以构建过程中插件形式出现的 -->\n",{"type":17,"tag":329,"props":8314,"children":8316},{"class":331,"line":8315},46,[8317],{"type":17,"tag":329,"props":8318,"children":8319},{},[8320],{"type":23,"value":8321},"        \u003Cplugins>\n",{"type":17,"tag":329,"props":8323,"children":8325},{"class":331,"line":8324},47,[8326],{"type":17,"tag":329,"props":8327,"children":8328},{},[8329],{"type":23,"value":8330},"            \u003Cplugin>\n",{"type":17,"tag":329,"props":8332,"children":8334},{"class":331,"line":8333},48,[8335],{"type":17,"tag":329,"props":8336,"children":8337},{},[8338],{"type":23,"value":8339},"                \u003CgroupId>org.mybatis.generator\u003C\u002FgroupId>\n",{"type":17,"tag":329,"props":8341,"children":8343},{"class":331,"line":8342},49,[8344],{"type":17,"tag":329,"props":8345,"children":8346},{},[8347],{"type":23,"value":8348},"                \u003CartifactId>mybatis-generator-maven-plugin\u003C\u002FartifactId>\n",{"type":17,"tag":329,"props":8350,"children":8352},{"class":331,"line":8351},50,[8353],{"type":17,"tag":329,"props":8354,"children":8355},{},[8356],{"type":23,"value":8357},"                \u003Cversion>1.3.0\u003C\u002Fversion>\n",{"type":17,"tag":329,"props":8359,"children":8361},{"class":331,"line":8360},51,[8362],{"type":17,"tag":329,"props":8363,"children":8364},{},[8365],{"type":23,"value":8366},"                \u003C!--插件的依赖-->\n",{"type":17,"tag":329,"props":8368,"children":8370},{"class":331,"line":8369},52,[8371],{"type":17,"tag":329,"props":8372,"children":8373},{},[8374],{"type":23,"value":8375},"                \u003Cdependencies>\n",{"type":17,"tag":329,"props":8377,"children":8379},{"class":331,"line":8378},53,[8380],{"type":17,"tag":329,"props":8381,"children":8382},{},[8383],{"type":23,"value":8384},"                    \u003C!--逆向工程的核心依赖-->\n",{"type":17,"tag":329,"props":8386,"children":8388},{"class":331,"line":8387},54,[8389],{"type":17,"tag":329,"props":8390,"children":8391},{},[8392],{"type":23,"value":8393},"                    \u003Cdependency>\n",{"type":17,"tag":329,"props":8395,"children":8397},{"class":331,"line":8396},55,[8398],{"type":17,"tag":329,"props":8399,"children":8400},{},[8401],{"type":23,"value":8402},"                        \u003CgroupId>org.mybatis.generator\u003C\u002FgroupId>\n",{"type":17,"tag":329,"props":8404,"children":8406},{"class":331,"line":8405},56,[8407],{"type":17,"tag":329,"props":8408,"children":8409},{},[8410],{"type":23,"value":8411},"                        \u003CartifactId>mybatis-generator-core\u003C\u002FartifactId>\n",{"type":17,"tag":329,"props":8413,"children":8415},{"class":331,"line":8414},57,[8416],{"type":17,"tag":329,"props":8417,"children":8418},{},[8419],{"type":23,"value":8420},"                        \u003Cversion>1.3.2\u003C\u002Fversion>\n",{"type":17,"tag":329,"props":8422,"children":8424},{"class":331,"line":8423},58,[8425],{"type":17,"tag":329,"props":8426,"children":8427},{},[8428],{"type":23,"value":8429},"                    \u003C\u002Fdependency>\n",{"type":17,"tag":329,"props":8431,"children":8433},{"class":331,"line":8432},59,[8434],{"type":17,"tag":329,"props":8435,"children":8436},{},[8437],{"type":23,"value":8438},"                    \u003C!--MySQL驱动-->\n",{"type":17,"tag":329,"props":8440,"children":8442},{"class":331,"line":8441},60,[8443],{"type":17,"tag":329,"props":8444,"children":8445},{},[8446],{"type":23,"value":8393},{"type":17,"tag":329,"props":8448,"children":8450},{"class":331,"line":8449},61,[8451],{"type":17,"tag":329,"props":8452,"children":8453},{},[8454],{"type":23,"value":8455},"                        \u003CgroupId>mysql\u003C\u002FgroupId>\n",{"type":17,"tag":329,"props":8457,"children":8459},{"class":331,"line":8458},62,[8460],{"type":17,"tag":329,"props":8461,"children":8462},{},[8463],{"type":23,"value":8464},"                        \u003CartifactId>mysql-connector-java\u003C\u002FartifactId>\n",{"type":17,"tag":329,"props":8466,"children":8468},{"class":331,"line":8467},63,[8469],{"type":17,"tag":329,"props":8470,"children":8471},{},[8472],{"type":23,"value":8473},"                        \u003Cversion>8.0.16\u003C\u002Fversion>\n",{"type":17,"tag":329,"props":8475,"children":8477},{"class":331,"line":8476},64,[8478],{"type":17,"tag":329,"props":8479,"children":8480},{},[8481],{"type":23,"value":8429},{"type":17,"tag":329,"props":8483,"children":8485},{"class":331,"line":8484},65,[8486],{"type":17,"tag":329,"props":8487,"children":8488},{},[8489],{"type":23,"value":8490},"                \u003C\u002Fdependencies>\n",{"type":17,"tag":329,"props":8492,"children":8494},{"class":331,"line":8493},66,[8495],{"type":17,"tag":329,"props":8496,"children":8497},{},[8498],{"type":23,"value":8499},"            \u003C\u002Fplugin>\n",{"type":17,"tag":329,"props":8501,"children":8503},{"class":331,"line":8502},67,[8504],{"type":17,"tag":329,"props":8505,"children":8506},{},[8507],{"type":23,"value":8508},"        \u003C\u002Fplugins>\n",{"type":17,"tag":329,"props":8510,"children":8512},{"class":331,"line":8511},68,[8513],{"type":17,"tag":329,"props":8514,"children":8515},{},[8516],{"type":23,"value":8517},"    \u003C\u002Fbuild>\n",{"type":17,"tag":329,"props":8519,"children":8521},{"class":331,"line":8520},69,[8522],{"type":17,"tag":329,"props":8523,"children":8524},{},[8525],{"type":23,"value":8526},"\u003C\u002Fproject>\n",{"type":17,"tag":57,"props":8528,"children":8529},{},[8530],{"type":17,"tag":86,"props":8531,"children":8532},{},[8533],{"type":23,"value":8534},"resources\u002FgeneratorConfig.xml",{"type":17,"tag":319,"props":8536,"children":8538},{"className":1376,"code":8537,"language":1378,"meta":7,"style":7},"\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\u003C!DOCTYPE generatorConfiguration PUBLIC\n        \"-\u002F\u002Fmybatis.org\u002F\u002FDTD MyBatis Generator Configuration 1.0\u002F\u002FEN\"\n        \"http:\u002F\u002Fmybatis.org\u002Fdtd\u002Fmybatis-generator-config_1_0.dtd\">\n\u003CgeneratorConfiguration>\n    \u003C!-- targetRuntime: 执行生成的逆向工程的版本\n                MyBatis3Simple: 生成基本的CRUD（清新简洁版）\n                MyBatis3: 生成带条件的CRUD（奢华尊享版） -->\n    \u003Ccontext id=\"DB2Tables\" targetRuntime=\"MyBatis3\">\n        \u003C!-- 数据库的连接信息 -->\n        \u003CjdbcConnection\n                driverClass=\"com.mysql.cj.jdbc.Driver\"\n                connectionURL=\"jdbc:mysql:\u002F\u002Flocalhost:3306\u002Fatguigu?serverTimezone=UTC\"\n                userId=\"root\"\n                password=\"wangkun1\"\n        \u002F>\n        \u003C!-- javaBean的生成策略-->\n        \u003CjavaModelGenerator targetPackage=\"com.wangkun.mybatis.pojo\" targetProject=\".\u002Fsrc\u002Fmain\u002Fjava\">\n            \u003Cproperty name=\"enableSubPackages\" value=\"true\"\u002F>\n            \u003Cproperty name=\"trimStrings\" value=\"true\"\u002F>\n        \u003C\u002FjavaModelGenerator>\n        \u003C!-- SQL映射文件的生成策略 -->\n        \u003CsqlMapGenerator targetPackage=\"com.wangkun.mybatis.mapper\" targetProject=\".\u002Fsrc\u002Fmain\u002Fresources\">\n            \u003Cproperty name=\"enableSubPackages\" value=\"true\"\u002F>\n        \u003C\u002FsqlMapGenerator>\n        \u003C!-- Mapper接口的生成策略 -->\n        \u003CjavaClientGenerator\n                type=\"XMLMAPPER\"\n                targetPackage=\"com.wangkun.mybatis.mapper\"\n                targetProject=\".\u002Fsrc\u002Fmain\u002Fjava\">\n\n            \u003Cproperty name=\"enableSubPackages\" value=\"true\"\u002F>\n        \u003C\u002FjavaClientGenerator>\n        \u003C!-- 逆向分析的表 --> \u003C!-- tableName设置为*号，可以对应所有表，此时不写domainObjectName -->\n        \u003C!-- domainObjectName属性指定生成出来的实体类的类名 -->\n        \u003Ctable tableName=\"t_emp\" domainObjectName=\"Emp\"\u002F>\n        \u003Ctable tableName=\"t_dept\" domainObjectName=\"Dept\"\u002F>\n    \u003C\u002Fcontext>\n\u003C\u002FgeneratorConfiguration>\n",[8539],{"type":17,"tag":293,"props":8540,"children":8541},{"__ignoreMap":7},[8542,8549,8557,8565,8573,8581,8589,8597,8605,8613,8621,8629,8637,8645,8653,8661,8669,8677,8685,8693,8701,8709,8717,8725,8732,8740,8748,8756,8764,8772,8780,8787,8794,8802,8810,8818,8826,8834,8842],{"type":17,"tag":329,"props":8543,"children":8544},{"class":331,"line":332},[8545],{"type":17,"tag":329,"props":8546,"children":8547},{},[8548],{"type":23,"value":7968},{"type":17,"tag":329,"props":8550,"children":8551},{"class":331,"line":341},[8552],{"type":17,"tag":329,"props":8553,"children":8554},{},[8555],{"type":23,"value":8556},"\u003C!DOCTYPE generatorConfiguration PUBLIC\n",{"type":17,"tag":329,"props":8558,"children":8559},{"class":331,"line":350},[8560],{"type":17,"tag":329,"props":8561,"children":8562},{},[8563],{"type":23,"value":8564},"        \"-\u002F\u002Fmybatis.org\u002F\u002FDTD MyBatis Generator Configuration 1.0\u002F\u002FEN\"\n",{"type":17,"tag":329,"props":8566,"children":8567},{"class":331,"line":359},[8568],{"type":17,"tag":329,"props":8569,"children":8570},{},[8571],{"type":23,"value":8572},"        \"http:\u002F\u002Fmybatis.org\u002Fdtd\u002Fmybatis-generator-config_1_0.dtd\">\n",{"type":17,"tag":329,"props":8574,"children":8575},{"class":331,"line":368},[8576],{"type":17,"tag":329,"props":8577,"children":8578},{},[8579],{"type":23,"value":8580},"\u003CgeneratorConfiguration>\n",{"type":17,"tag":329,"props":8582,"children":8583},{"class":331,"line":377},[8584],{"type":17,"tag":329,"props":8585,"children":8586},{},[8587],{"type":23,"value":8588},"    \u003C!-- targetRuntime: 执行生成的逆向工程的版本\n",{"type":17,"tag":329,"props":8590,"children":8591},{"class":331,"line":386},[8592],{"type":17,"tag":329,"props":8593,"children":8594},{},[8595],{"type":23,"value":8596},"                MyBatis3Simple: 生成基本的CRUD（清新简洁版）\n",{"type":17,"tag":329,"props":8598,"children":8599},{"class":331,"line":394},[8600],{"type":17,"tag":329,"props":8601,"children":8602},{},[8603],{"type":23,"value":8604},"                MyBatis3: 生成带条件的CRUD（奢华尊享版） -->\n",{"type":17,"tag":329,"props":8606,"children":8607},{"class":331,"line":403},[8608],{"type":17,"tag":329,"props":8609,"children":8610},{},[8611],{"type":23,"value":8612},"    \u003Ccontext id=\"DB2Tables\" targetRuntime=\"MyBatis3\">\n",{"type":17,"tag":329,"props":8614,"children":8615},{"class":331,"line":412},[8616],{"type":17,"tag":329,"props":8617,"children":8618},{},[8619],{"type":23,"value":8620},"        \u003C!-- 数据库的连接信息 -->\n",{"type":17,"tag":329,"props":8622,"children":8623},{"class":331,"line":421},[8624],{"type":17,"tag":329,"props":8625,"children":8626},{},[8627],{"type":23,"value":8628},"        \u003CjdbcConnection\n",{"type":17,"tag":329,"props":8630,"children":8631},{"class":331,"line":430},[8632],{"type":17,"tag":329,"props":8633,"children":8634},{},[8635],{"type":23,"value":8636},"                driverClass=\"com.mysql.cj.jdbc.Driver\"\n",{"type":17,"tag":329,"props":8638,"children":8639},{"class":331,"line":439},[8640],{"type":17,"tag":329,"props":8641,"children":8642},{},[8643],{"type":23,"value":8644},"                connectionURL=\"jdbc:mysql:\u002F\u002Flocalhost:3306\u002Fatguigu?serverTimezone=UTC\"\n",{"type":17,"tag":329,"props":8646,"children":8647},{"class":331,"line":447},[8648],{"type":17,"tag":329,"props":8649,"children":8650},{},[8651],{"type":23,"value":8652},"                userId=\"root\"\n",{"type":17,"tag":329,"props":8654,"children":8655},{"class":331,"line":456},[8656],{"type":17,"tag":329,"props":8657,"children":8658},{},[8659],{"type":23,"value":8660},"                password=\"wangkun1\"\n",{"type":17,"tag":329,"props":8662,"children":8663},{"class":331,"line":465},[8664],{"type":17,"tag":329,"props":8665,"children":8666},{},[8667],{"type":23,"value":8668},"        \u002F>\n",{"type":17,"tag":329,"props":8670,"children":8671},{"class":331,"line":474},[8672],{"type":17,"tag":329,"props":8673,"children":8674},{},[8675],{"type":23,"value":8676},"        \u003C!-- javaBean的生成策略-->\n",{"type":17,"tag":329,"props":8678,"children":8679},{"class":331,"line":483},[8680],{"type":17,"tag":329,"props":8681,"children":8682},{},[8683],{"type":23,"value":8684},"        \u003CjavaModelGenerator targetPackage=\"com.wangkun.mybatis.pojo\" targetProject=\".\u002Fsrc\u002Fmain\u002Fjava\">\n",{"type":17,"tag":329,"props":8686,"children":8687},{"class":331,"line":667},[8688],{"type":17,"tag":329,"props":8689,"children":8690},{},[8691],{"type":23,"value":8692},"            \u003Cproperty name=\"enableSubPackages\" value=\"true\"\u002F>\n",{"type":17,"tag":329,"props":8694,"children":8695},{"class":331,"line":676},[8696],{"type":17,"tag":329,"props":8697,"children":8698},{},[8699],{"type":23,"value":8700},"            \u003Cproperty name=\"trimStrings\" value=\"true\"\u002F>\n",{"type":17,"tag":329,"props":8702,"children":8703},{"class":331,"line":685},[8704],{"type":17,"tag":329,"props":8705,"children":8706},{},[8707],{"type":23,"value":8708},"        \u003C\u002FjavaModelGenerator>\n",{"type":17,"tag":329,"props":8710,"children":8711},{"class":331,"line":694},[8712],{"type":17,"tag":329,"props":8713,"children":8714},{},[8715],{"type":23,"value":8716},"        \u003C!-- SQL映射文件的生成策略 -->\n",{"type":17,"tag":329,"props":8718,"children":8719},{"class":331,"line":1213},[8720],{"type":17,"tag":329,"props":8721,"children":8722},{},[8723],{"type":23,"value":8724},"        \u003CsqlMapGenerator targetPackage=\"com.wangkun.mybatis.mapper\" targetProject=\".\u002Fsrc\u002Fmain\u002Fresources\">\n",{"type":17,"tag":329,"props":8726,"children":8727},{"class":331,"line":1222},[8728],{"type":17,"tag":329,"props":8729,"children":8730},{},[8731],{"type":23,"value":8692},{"type":17,"tag":329,"props":8733,"children":8734},{"class":331,"line":1231},[8735],{"type":17,"tag":329,"props":8736,"children":8737},{},[8738],{"type":23,"value":8739},"        \u003C\u002FsqlMapGenerator>\n",{"type":17,"tag":329,"props":8741,"children":8742},{"class":331,"line":1240},[8743],{"type":17,"tag":329,"props":8744,"children":8745},{},[8746],{"type":23,"value":8747},"        \u003C!-- Mapper接口的生成策略 -->\n",{"type":17,"tag":329,"props":8749,"children":8750},{"class":331,"line":1248},[8751],{"type":17,"tag":329,"props":8752,"children":8753},{},[8754],{"type":23,"value":8755},"        \u003CjavaClientGenerator\n",{"type":17,"tag":329,"props":8757,"children":8758},{"class":331,"line":1257},[8759],{"type":17,"tag":329,"props":8760,"children":8761},{},[8762],{"type":23,"value":8763},"                type=\"XMLMAPPER\"\n",{"type":17,"tag":329,"props":8765,"children":8766},{"class":331,"line":1266},[8767],{"type":17,"tag":329,"props":8768,"children":8769},{},[8770],{"type":23,"value":8771},"                targetPackage=\"com.wangkun.mybatis.mapper\"\n",{"type":17,"tag":329,"props":8773,"children":8774},{"class":331,"line":1275},[8775],{"type":17,"tag":329,"props":8776,"children":8777},{},[8778],{"type":23,"value":8779},"                targetProject=\".\u002Fsrc\u002Fmain\u002Fjava\">\n",{"type":17,"tag":329,"props":8781,"children":8782},{"class":331,"line":1284},[8783],{"type":17,"tag":329,"props":8784,"children":8785},{"emptyLinePlaceholder":542},[8786],{"type":23,"value":545},{"type":17,"tag":329,"props":8788,"children":8789},{"class":331,"line":1292},[8790],{"type":17,"tag":329,"props":8791,"children":8792},{},[8793],{"type":23,"value":8692},{"type":17,"tag":329,"props":8795,"children":8796},{"class":331,"line":1301},[8797],{"type":17,"tag":329,"props":8798,"children":8799},{},[8800],{"type":23,"value":8801},"        \u003C\u002FjavaClientGenerator>\n",{"type":17,"tag":329,"props":8803,"children":8804},{"class":331,"line":1310},[8805],{"type":17,"tag":329,"props":8806,"children":8807},{},[8808],{"type":23,"value":8809},"        \u003C!-- 逆向分析的表 --> \u003C!-- tableName设置为*号，可以对应所有表，此时不写domainObjectName -->\n",{"type":17,"tag":329,"props":8811,"children":8812},{"class":331,"line":1319},[8813],{"type":17,"tag":329,"props":8814,"children":8815},{},[8816],{"type":23,"value":8817},"        \u003C!-- domainObjectName属性指定生成出来的实体类的类名 -->\n",{"type":17,"tag":329,"props":8819,"children":8820},{"class":331,"line":1328},[8821],{"type":17,"tag":329,"props":8822,"children":8823},{},[8824],{"type":23,"value":8825},"        \u003Ctable tableName=\"t_emp\" domainObjectName=\"Emp\"\u002F>\n",{"type":17,"tag":329,"props":8827,"children":8828},{"class":331,"line":1336},[8829],{"type":17,"tag":329,"props":8830,"children":8831},{},[8832],{"type":23,"value":8833},"        \u003Ctable tableName=\"t_dept\" domainObjectName=\"Dept\"\u002F>\n",{"type":17,"tag":329,"props":8835,"children":8836},{"class":331,"line":1345},[8837],{"type":17,"tag":329,"props":8838,"children":8839},{},[8840],{"type":23,"value":8841},"    \u003C\u002Fcontext>\n",{"type":17,"tag":329,"props":8843,"children":8844},{"class":331,"line":1354},[8845],{"type":17,"tag":329,"props":8846,"children":8847},{},[8848],{"type":23,"value":8849},"\u003C\u002FgeneratorConfiguration>\n",{"type":17,"tag":57,"props":8851,"children":8852},{},[8853],{"type":17,"tag":86,"props":8854,"children":8855},{},[8856],{"type":23,"value":8857},"生成文件：",{"type":17,"tag":57,"props":8859,"children":8860},{},[8861],{"type":23,"value":8862},"![image-20230317160201578](\u002FUsers\u002Fwangkun\u002FLibrary\u002FApplication Support\u002Ftypora-user-images\u002Fimage-20230317160201578.png)",{"type":17,"tag":57,"props":8864,"children":8865},{},[8866],{"type":17,"tag":86,"props":8867,"children":8868},{},[8869],{"type":23,"value":8870},"使用：",{"type":17,"tag":319,"props":8872,"children":8874},{"className":321,"code":8873,"language":323,"meta":7,"style":7},"import com.wangkun.mybatis.mapper.EmpMapper;\nimport com.wangkun.mybatis.pojo.Emp;\nimport com.wangkun.mybatis.pojo.EmpExample;\nimport com.wangkun.mybatis.utils.SqlSessionUtil;\nimport org.apache.ibatis.session.SqlSession;\nimport org.junit.Test;\n\nimport java.util.List;\n\npublic class TestMbg {\n\n    \u002F**\n     * 根据主键id查询员工信息\n     *\u002F\n    @Test\n    public void testGetEmpByExample1() {\n\n        SqlSession sqlSession = SqlSessionUtil.getSqlSession();\n        EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);\n        \u002F\u002F 根据id查询员工信息\n        Emp emp = mapper.selectByPrimaryKey(1);\n        System.out.println(emp);\n\n    }\n\n    \u002F**\n     * 查询所有员工\n     *\u002F\n    @Test\n    public void testGetEmpByExample2() {\n        SqlSession sqlSession = SqlSessionUtil.getSqlSession();\n        EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);\n        List\u003CEmp> emps = mapper.selectByExample(null);\n        for (Emp emp : emps) {\n            System.out.println(emp);\n        }\n\n    }\n\n    \u002F**\n     * 根据条件查询员工\n     *\u002F\n    @Test\n    public void testGetEmpByExample3() {\n        SqlSession sqlSession = SqlSessionUtil.getSqlSession();\n        EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);\n        \u002F\u002F 创建实例\n        EmpExample empExample = new EmpExample();\n        \u002F\u002F 添加条件\n        empExample.createCriteria().andEmpNameEqualTo(\"张三\").andGenderEqualTo(\"女\");\n        empExample.or().andAgeLessThan(20);\n\n        List\u003CEmp> emps = mapper.selectByExample(empExample);\n        for (Emp item : emps) {\n            System.out.println(item);\n        }\n    }\n\n    \u002F**\n     * 修改员工信息\n     *\u002F\n    @Test\n    public void testGetEmpByExample4() {\n        SqlSession sqlSession = SqlSessionUtil.getSqlSession();\n        EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);\n        \u002F\u002F 创建实例\n        Emp emp = new Emp(1, \"小白\", 12, \"女\");\n        \u002F\u002F 1. 修改\n        int i1 = mapper.updateByPrimaryKey(emp);\n        \u002F\u002F 2. 选择性修改，不赋值或者为null的字段不会修改数据库\n        \u002F\u002F int i = mapper.updateByPrimaryKeySelective(emp);\n\n    }\n\n}\n",[8875],{"type":17,"tag":293,"props":8876,"children":8877},{"__ignoreMap":7},[8878,8886,8894,8902,8910,8917,8924,8931,8939,8946,8954,8961,8969,8977,8985,8992,9000,9007,9015,9023,9031,9039,9047,9054,9061,9068,9075,9083,9090,9097,9105,9112,9119,9127,9135,9143,9151,9158,9165,9172,9179,9187,9194,9201,9209,9216,9223,9231,9239,9247,9255,9263,9270,9278,9286,9294,9301,9308,9315,9322,9330,9337,9344,9352,9359,9366,9373,9381,9389,9397,9406,9415,9423,9431,9439],{"type":17,"tag":329,"props":8879,"children":8880},{"class":331,"line":332},[8881],{"type":17,"tag":329,"props":8882,"children":8883},{},[8884],{"type":23,"value":8885},"import com.wangkun.mybatis.mapper.EmpMapper;\n",{"type":17,"tag":329,"props":8887,"children":8888},{"class":331,"line":341},[8889],{"type":17,"tag":329,"props":8890,"children":8891},{},[8892],{"type":23,"value":8893},"import com.wangkun.mybatis.pojo.Emp;\n",{"type":17,"tag":329,"props":8895,"children":8896},{"class":331,"line":350},[8897],{"type":17,"tag":329,"props":8898,"children":8899},{},[8900],{"type":23,"value":8901},"import com.wangkun.mybatis.pojo.EmpExample;\n",{"type":17,"tag":329,"props":8903,"children":8904},{"class":331,"line":359},[8905],{"type":17,"tag":329,"props":8906,"children":8907},{},[8908],{"type":23,"value":8909},"import com.wangkun.mybatis.utils.SqlSessionUtil;\n",{"type":17,"tag":329,"props":8911,"children":8912},{"class":331,"line":368},[8913],{"type":17,"tag":329,"props":8914,"children":8915},{},[8916],{"type":23,"value":1077},{"type":17,"tag":329,"props":8918,"children":8919},{"class":331,"line":377},[8920],{"type":17,"tag":329,"props":8921,"children":8922},{},[8923],{"type":23,"value":1101},{"type":17,"tag":329,"props":8925,"children":8926},{"class":331,"line":386},[8927],{"type":17,"tag":329,"props":8928,"children":8929},{"emptyLinePlaceholder":542},[8930],{"type":23,"value":545},{"type":17,"tag":329,"props":8932,"children":8933},{"class":331,"line":394},[8934],{"type":17,"tag":329,"props":8935,"children":8936},{},[8937],{"type":23,"value":8938},"import java.util.List;\n",{"type":17,"tag":329,"props":8940,"children":8941},{"class":331,"line":403},[8942],{"type":17,"tag":329,"props":8943,"children":8944},{"emptyLinePlaceholder":542},[8945],{"type":23,"value":545},{"type":17,"tag":329,"props":8947,"children":8948},{"class":331,"line":412},[8949],{"type":17,"tag":329,"props":8950,"children":8951},{},[8952],{"type":23,"value":8953},"public class TestMbg {\n",{"type":17,"tag":329,"props":8955,"children":8956},{"class":331,"line":421},[8957],{"type":17,"tag":329,"props":8958,"children":8959},{"emptyLinePlaceholder":542},[8960],{"type":23,"value":545},{"type":17,"tag":329,"props":8962,"children":8963},{"class":331,"line":430},[8964],{"type":17,"tag":329,"props":8965,"children":8966},{},[8967],{"type":23,"value":8968},"    \u002F**\n",{"type":17,"tag":329,"props":8970,"children":8971},{"class":331,"line":439},[8972],{"type":17,"tag":329,"props":8973,"children":8974},{},[8975],{"type":23,"value":8976},"     * 根据主键id查询员工信息\n",{"type":17,"tag":329,"props":8978,"children":8979},{"class":331,"line":447},[8980],{"type":17,"tag":329,"props":8981,"children":8982},{},[8983],{"type":23,"value":8984},"     *\u002F\n",{"type":17,"tag":329,"props":8986,"children":8987},{"class":331,"line":456},[8988],{"type":17,"tag":329,"props":8989,"children":8990},{},[8991],{"type":23,"value":1147},{"type":17,"tag":329,"props":8993,"children":8994},{"class":331,"line":465},[8995],{"type":17,"tag":329,"props":8996,"children":8997},{},[8998],{"type":23,"value":8999},"    public void testGetEmpByExample1() {\n",{"type":17,"tag":329,"props":9001,"children":9002},{"class":331,"line":474},[9003],{"type":17,"tag":329,"props":9004,"children":9005},{"emptyLinePlaceholder":542},[9006],{"type":23,"value":545},{"type":17,"tag":329,"props":9008,"children":9009},{"class":331,"line":483},[9010],{"type":17,"tag":329,"props":9011,"children":9012},{},[9013],{"type":23,"value":9014},"        SqlSession sqlSession = SqlSessionUtil.getSqlSession();\n",{"type":17,"tag":329,"props":9016,"children":9017},{"class":331,"line":667},[9018],{"type":17,"tag":329,"props":9019,"children":9020},{},[9021],{"type":23,"value":9022},"        EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);\n",{"type":17,"tag":329,"props":9024,"children":9025},{"class":331,"line":676},[9026],{"type":17,"tag":329,"props":9027,"children":9028},{},[9029],{"type":23,"value":9030},"        \u002F\u002F 根据id查询员工信息\n",{"type":17,"tag":329,"props":9032,"children":9033},{"class":331,"line":685},[9034],{"type":17,"tag":329,"props":9035,"children":9036},{},[9037],{"type":23,"value":9038},"        Emp emp = mapper.selectByPrimaryKey(1);\n",{"type":17,"tag":329,"props":9040,"children":9041},{"class":331,"line":694},[9042],{"type":17,"tag":329,"props":9043,"children":9044},{},[9045],{"type":23,"value":9046},"        System.out.println(emp);\n",{"type":17,"tag":329,"props":9048,"children":9049},{"class":331,"line":1213},[9050],{"type":17,"tag":329,"props":9051,"children":9052},{"emptyLinePlaceholder":542},[9053],{"type":23,"value":545},{"type":17,"tag":329,"props":9055,"children":9056},{"class":331,"line":1222},[9057],{"type":17,"tag":329,"props":9058,"children":9059},{},[9060],{"type":23,"value":1351},{"type":17,"tag":329,"props":9062,"children":9063},{"class":331,"line":1231},[9064],{"type":17,"tag":329,"props":9065,"children":9066},{"emptyLinePlaceholder":542},[9067],{"type":23,"value":545},{"type":17,"tag":329,"props":9069,"children":9070},{"class":331,"line":1240},[9071],{"type":17,"tag":329,"props":9072,"children":9073},{},[9074],{"type":23,"value":8968},{"type":17,"tag":329,"props":9076,"children":9077},{"class":331,"line":1248},[9078],{"type":17,"tag":329,"props":9079,"children":9080},{},[9081],{"type":23,"value":9082},"     * 查询所有员工\n",{"type":17,"tag":329,"props":9084,"children":9085},{"class":331,"line":1257},[9086],{"type":17,"tag":329,"props":9087,"children":9088},{},[9089],{"type":23,"value":8984},{"type":17,"tag":329,"props":9091,"children":9092},{"class":331,"line":1266},[9093],{"type":17,"tag":329,"props":9094,"children":9095},{},[9096],{"type":23,"value":1147},{"type":17,"tag":329,"props":9098,"children":9099},{"class":331,"line":1275},[9100],{"type":17,"tag":329,"props":9101,"children":9102},{},[9103],{"type":23,"value":9104},"    public void testGetEmpByExample2() {\n",{"type":17,"tag":329,"props":9106,"children":9107},{"class":331,"line":1284},[9108],{"type":17,"tag":329,"props":9109,"children":9110},{},[9111],{"type":23,"value":9014},{"type":17,"tag":329,"props":9113,"children":9114},{"class":331,"line":1292},[9115],{"type":17,"tag":329,"props":9116,"children":9117},{},[9118],{"type":23,"value":9022},{"type":17,"tag":329,"props":9120,"children":9121},{"class":331,"line":1301},[9122],{"type":17,"tag":329,"props":9123,"children":9124},{},[9125],{"type":23,"value":9126},"        List\u003CEmp> emps = mapper.selectByExample(null);\n",{"type":17,"tag":329,"props":9128,"children":9129},{"class":331,"line":1310},[9130],{"type":17,"tag":329,"props":9131,"children":9132},{},[9133],{"type":23,"value":9134},"        for (Emp emp : emps) {\n",{"type":17,"tag":329,"props":9136,"children":9137},{"class":331,"line":1319},[9138],{"type":17,"tag":329,"props":9139,"children":9140},{},[9141],{"type":23,"value":9142},"            System.out.println(emp);\n",{"type":17,"tag":329,"props":9144,"children":9145},{"class":331,"line":1328},[9146],{"type":17,"tag":329,"props":9147,"children":9148},{},[9149],{"type":23,"value":9150},"        }\n",{"type":17,"tag":329,"props":9152,"children":9153},{"class":331,"line":1336},[9154],{"type":17,"tag":329,"props":9155,"children":9156},{"emptyLinePlaceholder":542},[9157],{"type":23,"value":545},{"type":17,"tag":329,"props":9159,"children":9160},{"class":331,"line":1345},[9161],{"type":17,"tag":329,"props":9162,"children":9163},{},[9164],{"type":23,"value":1351},{"type":17,"tag":329,"props":9166,"children":9167},{"class":331,"line":1354},[9168],{"type":17,"tag":329,"props":9169,"children":9170},{"emptyLinePlaceholder":542},[9171],{"type":23,"value":545},{"type":17,"tag":329,"props":9173,"children":9174},{"class":331,"line":1979},[9175],{"type":17,"tag":329,"props":9176,"children":9177},{},[9178],{"type":23,"value":8968},{"type":17,"tag":329,"props":9180,"children":9181},{"class":331,"line":1988},[9182],{"type":17,"tag":329,"props":9183,"children":9184},{},[9185],{"type":23,"value":9186},"     * 根据条件查询员工\n",{"type":17,"tag":329,"props":9188,"children":9189},{"class":331,"line":1997},[9190],{"type":17,"tag":329,"props":9191,"children":9192},{},[9193],{"type":23,"value":8984},{"type":17,"tag":329,"props":9195,"children":9196},{"class":331,"line":2006},[9197],{"type":17,"tag":329,"props":9198,"children":9199},{},[9200],{"type":23,"value":1147},{"type":17,"tag":329,"props":9202,"children":9203},{"class":331,"line":2014},[9204],{"type":17,"tag":329,"props":9205,"children":9206},{},[9207],{"type":23,"value":9208},"    public void testGetEmpByExample3() {\n",{"type":17,"tag":329,"props":9210,"children":9211},{"class":331,"line":8306},[9212],{"type":17,"tag":329,"props":9213,"children":9214},{},[9215],{"type":23,"value":9014},{"type":17,"tag":329,"props":9217,"children":9218},{"class":331,"line":8315},[9219],{"type":17,"tag":329,"props":9220,"children":9221},{},[9222],{"type":23,"value":9022},{"type":17,"tag":329,"props":9224,"children":9225},{"class":331,"line":8324},[9226],{"type":17,"tag":329,"props":9227,"children":9228},{},[9229],{"type":23,"value":9230},"        \u002F\u002F 创建实例\n",{"type":17,"tag":329,"props":9232,"children":9233},{"class":331,"line":8333},[9234],{"type":17,"tag":329,"props":9235,"children":9236},{},[9237],{"type":23,"value":9238},"        EmpExample empExample = new EmpExample();\n",{"type":17,"tag":329,"props":9240,"children":9241},{"class":331,"line":8342},[9242],{"type":17,"tag":329,"props":9243,"children":9244},{},[9245],{"type":23,"value":9246},"        \u002F\u002F 添加条件\n",{"type":17,"tag":329,"props":9248,"children":9249},{"class":331,"line":8351},[9250],{"type":17,"tag":329,"props":9251,"children":9252},{},[9253],{"type":23,"value":9254},"        empExample.createCriteria().andEmpNameEqualTo(\"张三\").andGenderEqualTo(\"女\");\n",{"type":17,"tag":329,"props":9256,"children":9257},{"class":331,"line":8360},[9258],{"type":17,"tag":329,"props":9259,"children":9260},{},[9261],{"type":23,"value":9262},"        empExample.or().andAgeLessThan(20);\n",{"type":17,"tag":329,"props":9264,"children":9265},{"class":331,"line":8369},[9266],{"type":17,"tag":329,"props":9267,"children":9268},{"emptyLinePlaceholder":542},[9269],{"type":23,"value":545},{"type":17,"tag":329,"props":9271,"children":9272},{"class":331,"line":8378},[9273],{"type":17,"tag":329,"props":9274,"children":9275},{},[9276],{"type":23,"value":9277},"        List\u003CEmp> emps = mapper.selectByExample(empExample);\n",{"type":17,"tag":329,"props":9279,"children":9280},{"class":331,"line":8387},[9281],{"type":17,"tag":329,"props":9282,"children":9283},{},[9284],{"type":23,"value":9285},"        for (Emp item : emps) {\n",{"type":17,"tag":329,"props":9287,"children":9288},{"class":331,"line":8396},[9289],{"type":17,"tag":329,"props":9290,"children":9291},{},[9292],{"type":23,"value":9293},"            System.out.println(item);\n",{"type":17,"tag":329,"props":9295,"children":9296},{"class":331,"line":8405},[9297],{"type":17,"tag":329,"props":9298,"children":9299},{},[9300],{"type":23,"value":9150},{"type":17,"tag":329,"props":9302,"children":9303},{"class":331,"line":8414},[9304],{"type":17,"tag":329,"props":9305,"children":9306},{},[9307],{"type":23,"value":1351},{"type":17,"tag":329,"props":9309,"children":9310},{"class":331,"line":8423},[9311],{"type":17,"tag":329,"props":9312,"children":9313},{"emptyLinePlaceholder":542},[9314],{"type":23,"value":545},{"type":17,"tag":329,"props":9316,"children":9317},{"class":331,"line":8432},[9318],{"type":17,"tag":329,"props":9319,"children":9320},{},[9321],{"type":23,"value":8968},{"type":17,"tag":329,"props":9323,"children":9324},{"class":331,"line":8441},[9325],{"type":17,"tag":329,"props":9326,"children":9327},{},[9328],{"type":23,"value":9329},"     * 修改员工信息\n",{"type":17,"tag":329,"props":9331,"children":9332},{"class":331,"line":8449},[9333],{"type":17,"tag":329,"props":9334,"children":9335},{},[9336],{"type":23,"value":8984},{"type":17,"tag":329,"props":9338,"children":9339},{"class":331,"line":8458},[9340],{"type":17,"tag":329,"props":9341,"children":9342},{},[9343],{"type":23,"value":1147},{"type":17,"tag":329,"props":9345,"children":9346},{"class":331,"line":8467},[9347],{"type":17,"tag":329,"props":9348,"children":9349},{},[9350],{"type":23,"value":9351},"    public void testGetEmpByExample4() {\n",{"type":17,"tag":329,"props":9353,"children":9354},{"class":331,"line":8476},[9355],{"type":17,"tag":329,"props":9356,"children":9357},{},[9358],{"type":23,"value":9014},{"type":17,"tag":329,"props":9360,"children":9361},{"class":331,"line":8484},[9362],{"type":17,"tag":329,"props":9363,"children":9364},{},[9365],{"type":23,"value":9022},{"type":17,"tag":329,"props":9367,"children":9368},{"class":331,"line":8493},[9369],{"type":17,"tag":329,"props":9370,"children":9371},{},[9372],{"type":23,"value":9230},{"type":17,"tag":329,"props":9374,"children":9375},{"class":331,"line":8502},[9376],{"type":17,"tag":329,"props":9377,"children":9378},{},[9379],{"type":23,"value":9380},"        Emp emp = new Emp(1, \"小白\", 12, \"女\");\n",{"type":17,"tag":329,"props":9382,"children":9383},{"class":331,"line":8511},[9384],{"type":17,"tag":329,"props":9385,"children":9386},{},[9387],{"type":23,"value":9388},"        \u002F\u002F 1. 修改\n",{"type":17,"tag":329,"props":9390,"children":9391},{"class":331,"line":8520},[9392],{"type":17,"tag":329,"props":9393,"children":9394},{},[9395],{"type":23,"value":9396},"        int i1 = mapper.updateByPrimaryKey(emp);\n",{"type":17,"tag":329,"props":9398,"children":9400},{"class":331,"line":9399},70,[9401],{"type":17,"tag":329,"props":9402,"children":9403},{},[9404],{"type":23,"value":9405},"        \u002F\u002F 2. 选择性修改，不赋值或者为null的字段不会修改数据库\n",{"type":17,"tag":329,"props":9407,"children":9409},{"class":331,"line":9408},71,[9410],{"type":17,"tag":329,"props":9411,"children":9412},{},[9413],{"type":23,"value":9414},"        \u002F\u002F int i = mapper.updateByPrimaryKeySelective(emp);\n",{"type":17,"tag":329,"props":9416,"children":9418},{"class":331,"line":9417},72,[9419],{"type":17,"tag":329,"props":9420,"children":9421},{"emptyLinePlaceholder":542},[9422],{"type":23,"value":545},{"type":17,"tag":329,"props":9424,"children":9426},{"class":331,"line":9425},73,[9427],{"type":17,"tag":329,"props":9428,"children":9429},{},[9430],{"type":23,"value":1351},{"type":17,"tag":329,"props":9432,"children":9434},{"class":331,"line":9433},74,[9435],{"type":17,"tag":329,"props":9436,"children":9437},{"emptyLinePlaceholder":542},[9438],{"type":23,"value":545},{"type":17,"tag":329,"props":9440,"children":9442},{"class":331,"line":9441},75,[9443],{"type":17,"tag":329,"props":9444,"children":9445},{},[9446],{"type":23,"value":753},{"type":17,"tag":74,"props":9448,"children":9450},{"id":9449},"注意点",[9451],{"type":23,"value":9452},"注意点：",{"type":17,"tag":31,"props":9454,"children":9455},{},[9456],{"type":17,"tag":35,"props":9457,"children":9458},{},[9459],{"type":23,"value":9460},"逆向工程生成的实体类没有重写toString方法，直接打印会返回地址值",{"type":17,"tag":25,"props":9462,"children":9464},{"id":9463},"_11-分页插件",[9465],{"type":23,"value":9466},"11 分页插件",{"type":17,"tag":74,"props":9468,"children":9470},{"id":9469},"_111-简介",[9471],{"type":23,"value":9472},"11.1 简介",{"type":17,"tag":57,"props":9474,"children":9475},{},[9476],{"type":17,"tag":86,"props":9477,"children":9478},{},[9479],{"type":23,"value":9480},"几个关键的属性：",{"type":17,"tag":57,"props":9482,"children":9483},{},[9484],{"type":23,"value":9485},"limit：sql语句中用于截取数据的关键字",{"type":17,"tag":57,"props":9487,"children":9488},{},[9489],{"type":23,"value":9490},"pageSize：每页显示的条数",{"type":17,"tag":57,"props":9492,"children":9493},{},[9494],{"type":23,"value":9495},"pageNum：当前页的页码",{"type":17,"tag":57,"props":9497,"children":9498},{},[9499],{"type":23,"value":9500},"index：当前也的起始索引，index=(pageNum - 1) * pageSize",{"type":17,"tag":57,"props":9502,"children":9503},{},[9504],{"type":23,"value":9505},"count:  总条数",{"type":17,"tag":57,"props":9507,"children":9508},{},[9509],{"type":23,"value":9510},"totalPage：总页数",{"type":17,"tag":57,"props":9512,"children":9513},{},[9514],{"type":23,"value":9515},"pageSize=4, pageNum=1, index=0, limit 0, 4",{"type":17,"tag":57,"props":9517,"children":9518},{},[9519],{"type":23,"value":9520},"pageSize=4, pageNum=3, index=8, limit 8, 4",{"type":17,"tag":57,"props":9522,"children":9523},{},[9524],{"type":23,"value":9525},"pageSize=4, pageNum=6, index=20, limil 20, 4",{"type":17,"tag":74,"props":9527,"children":9529},{"id":9528},"_112-安装与配置分页插件",[9530],{"type":23,"value":9531},"11.2 安装与配置分页插件",{"type":17,"tag":31,"props":9533,"children":9534},{},[9535],{"type":17,"tag":35,"props":9536,"children":9537},{},[],{"type":17,"tag":3272,"props":9539,"children":9541},{"id":9540},"添加依赖",[9542],{"type":23,"value":9543},"添加依赖：",{"type":17,"tag":31,"props":9545,"children":9546},{},[9547],{"type":17,"tag":35,"props":9548,"children":9549},{},[],{"type":17,"tag":319,"props":9551,"children":9553},{"className":1376,"code":9552,"language":1378,"meta":7,"style":7},"\u003Cdependency>\n    \u003CgroupId>com.github.pagehelper\u003C\u002FgroupId>\n    \u003CartifactId>pagehelper\u003C\u002FartifactId>\n    \u003Cversion>5.2.0\u003C\u002Fversion>\n\u003C\u002Fdependency>\n",[9554],{"type":17,"tag":293,"props":9555,"children":9556},{"__ignoreMap":7},[9557,9564,9572,9580,9588],{"type":17,"tag":329,"props":9558,"children":9559},{"class":331,"line":332},[9560],{"type":17,"tag":329,"props":9561,"children":9562},{},[9563],{"type":23,"value":1398},{"type":17,"tag":329,"props":9565,"children":9566},{"class":331,"line":341},[9567],{"type":17,"tag":329,"props":9568,"children":9569},{},[9570],{"type":23,"value":9571},"    \u003CgroupId>com.github.pagehelper\u003C\u002FgroupId>\n",{"type":17,"tag":329,"props":9573,"children":9574},{"class":331,"line":350},[9575],{"type":17,"tag":329,"props":9576,"children":9577},{},[9578],{"type":23,"value":9579},"    \u003CartifactId>pagehelper\u003C\u002FartifactId>\n",{"type":17,"tag":329,"props":9581,"children":9582},{"class":331,"line":359},[9583],{"type":17,"tag":329,"props":9584,"children":9585},{},[9586],{"type":23,"value":9587},"    \u003Cversion>5.2.0\u003C\u002Fversion>\n",{"type":17,"tag":329,"props":9589,"children":9590},{"class":331,"line":368},[9591],{"type":17,"tag":329,"props":9592,"children":9593},{},[9594],{"type":23,"value":1430},{"type":17,"tag":31,"props":9596,"children":9597},{},[9598],{"type":17,"tag":35,"props":9599,"children":9600},{},[9601],{"type":23,"value":9602},"在MyBatis中加入配置",{"type":17,"tag":319,"props":9604,"children":9606},{"className":1376,"code":9605,"language":1378,"meta":7,"style":7},"\u003CtypeAliases>\n    \u003Cpackage name=\"com.wangkun.mybatis.pojo\"\u002F>\n\u003C\u002FtypeAliases>\n\n\u003Cplugins>\n    \u003C!--设置分页插件-->\n    \u003Cplugin interceptor=\"com.github.pagehelper.PageInterceptor\">\u003C\u002Fplugin>\n\u003C\u002Fplugins>\n",[9607],{"type":17,"tag":293,"props":9608,"children":9609},{"__ignoreMap":7},[9610,9617,9624,9631,9638,9646,9654,9662],{"type":17,"tag":329,"props":9611,"children":9612},{"class":331,"line":332},[9613],{"type":17,"tag":329,"props":9614,"children":9615},{},[9616],{"type":23,"value":4698},{"type":17,"tag":329,"props":9618,"children":9619},{"class":331,"line":341},[9620],{"type":17,"tag":329,"props":9621,"children":9622},{},[9623],{"type":23,"value":4706},{"type":17,"tag":329,"props":9625,"children":9626},{"class":331,"line":350},[9627],{"type":17,"tag":329,"props":9628,"children":9629},{},[9630],{"type":23,"value":4714},{"type":17,"tag":329,"props":9632,"children":9633},{"class":331,"line":359},[9634],{"type":17,"tag":329,"props":9635,"children":9636},{"emptyLinePlaceholder":542},[9637],{"type":23,"value":545},{"type":17,"tag":329,"props":9639,"children":9640},{"class":331,"line":368},[9641],{"type":17,"tag":329,"props":9642,"children":9643},{},[9644],{"type":23,"value":9645},"\u003Cplugins>\n",{"type":17,"tag":329,"props":9647,"children":9648},{"class":331,"line":377},[9649],{"type":17,"tag":329,"props":9650,"children":9651},{},[9652],{"type":23,"value":9653},"    \u003C!--设置分页插件-->\n",{"type":17,"tag":329,"props":9655,"children":9656},{"class":331,"line":386},[9657],{"type":17,"tag":329,"props":9658,"children":9659},{},[9660],{"type":23,"value":9661},"    \u003Cplugin interceptor=\"com.github.pagehelper.PageInterceptor\">\u003C\u002Fplugin>\n",{"type":17,"tag":329,"props":9663,"children":9664},{"class":331,"line":394},[9665],{"type":17,"tag":329,"props":9666,"children":9667},{},[9668],{"type":23,"value":9669},"\u003C\u002Fplugins>\n",{"type":17,"tag":74,"props":9671,"children":9673},{"id":9672},"_113-使用",[9674],{"type":23,"value":9675},"11.3 使用",{"type":17,"tag":319,"props":9677,"children":9679},{"className":321,"code":9678,"language":323,"meta":7,"style":7},"public class TestPage {\n    @Test\n    public void testPage() {\n        SqlSession sqlSession = SqlSessionUtil.getSqlSession();\n        EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);\n        \u002F\u002F 设置页码数与每页显示多少条，同时返回分页相关的数据\n        Page\u003CObject> objects = PageHelper.startPage(1, 4);\n        List\u003CEmp> emps = mapper.selectByExample(null);\n        \u002F\u002F 查询功能之后可以再获取分页相关的所有数据（比上面的objects更加详细）\n        PageInfo\u003CEmp> empPageInfo = new PageInfo\u003C>(emps, 1);\n        for (Emp emp : emps) {\n            System.out.println(emp);\n        }\n        System.out.println(objects);\n    }\n}\n",[9680],{"type":17,"tag":293,"props":9681,"children":9682},{"__ignoreMap":7},[9683,9691,9698,9706,9713,9720,9728,9736,9743,9751,9759,9766,9773,9780,9788,9795],{"type":17,"tag":329,"props":9684,"children":9685},{"class":331,"line":332},[9686],{"type":17,"tag":329,"props":9687,"children":9688},{},[9689],{"type":23,"value":9690},"public class TestPage {\n",{"type":17,"tag":329,"props":9692,"children":9693},{"class":331,"line":341},[9694],{"type":17,"tag":329,"props":9695,"children":9696},{},[9697],{"type":23,"value":1147},{"type":17,"tag":329,"props":9699,"children":9700},{"class":331,"line":350},[9701],{"type":17,"tag":329,"props":9702,"children":9703},{},[9704],{"type":23,"value":9705},"    public void testPage() {\n",{"type":17,"tag":329,"props":9707,"children":9708},{"class":331,"line":359},[9709],{"type":17,"tag":329,"props":9710,"children":9711},{},[9712],{"type":23,"value":9014},{"type":17,"tag":329,"props":9714,"children":9715},{"class":331,"line":368},[9716],{"type":17,"tag":329,"props":9717,"children":9718},{},[9719],{"type":23,"value":9022},{"type":17,"tag":329,"props":9721,"children":9722},{"class":331,"line":377},[9723],{"type":17,"tag":329,"props":9724,"children":9725},{},[9726],{"type":23,"value":9727},"        \u002F\u002F 设置页码数与每页显示多少条，同时返回分页相关的数据\n",{"type":17,"tag":329,"props":9729,"children":9730},{"class":331,"line":386},[9731],{"type":17,"tag":329,"props":9732,"children":9733},{},[9734],{"type":23,"value":9735},"        Page\u003CObject> objects = PageHelper.startPage(1, 4);\n",{"type":17,"tag":329,"props":9737,"children":9738},{"class":331,"line":394},[9739],{"type":17,"tag":329,"props":9740,"children":9741},{},[9742],{"type":23,"value":9126},{"type":17,"tag":329,"props":9744,"children":9745},{"class":331,"line":403},[9746],{"type":17,"tag":329,"props":9747,"children":9748},{},[9749],{"type":23,"value":9750},"        \u002F\u002F 查询功能之后可以再获取分页相关的所有数据（比上面的objects更加详细）\n",{"type":17,"tag":329,"props":9752,"children":9753},{"class":331,"line":412},[9754],{"type":17,"tag":329,"props":9755,"children":9756},{},[9757],{"type":23,"value":9758},"        PageInfo\u003CEmp> empPageInfo = new PageInfo\u003C>(emps, 1);\n",{"type":17,"tag":329,"props":9760,"children":9761},{"class":331,"line":421},[9762],{"type":17,"tag":329,"props":9763,"children":9764},{},[9765],{"type":23,"value":9134},{"type":17,"tag":329,"props":9767,"children":9768},{"class":331,"line":430},[9769],{"type":17,"tag":329,"props":9770,"children":9771},{},[9772],{"type":23,"value":9142},{"type":17,"tag":329,"props":9774,"children":9775},{"class":331,"line":439},[9776],{"type":17,"tag":329,"props":9777,"children":9778},{},[9779],{"type":23,"value":9150},{"type":17,"tag":329,"props":9781,"children":9782},{"class":331,"line":447},[9783],{"type":17,"tag":329,"props":9784,"children":9785},{},[9786],{"type":23,"value":9787},"        System.out.println(objects);\n",{"type":17,"tag":329,"props":9789,"children":9790},{"class":331,"line":456},[9791],{"type":17,"tag":329,"props":9792,"children":9793},{},[9794],{"type":23,"value":1351},{"type":17,"tag":329,"props":9796,"children":9797},{"class":331,"line":465},[9798],{"type":17,"tag":329,"props":9799,"children":9800},{},[9801],{"type":23,"value":753},{"type":17,"tag":46,"props":9803,"children":9805},{"id":9804},"spring",[9806],{"type":23,"value":9807},"Spring",{"type":17,"tag":25,"props":9809,"children":9811},{"id":9810},"_1-简述",[9812],{"type":23,"value":9813},"1. 简述",{"type":17,"tag":74,"props":9815,"children":9817},{"id":9816},"_11-spring概述",[9818],{"type":23,"value":9819},"1.1 Spring概述",{"type":17,"tag":31,"props":9821,"children":9822},{},[9823,9828,9833,9838],{"type":17,"tag":35,"props":9824,"children":9825},{},[9826],{"type":23,"value":9827},"Spring 是最受欢迎的企业级 Java 应用程序开发框架，数以百万的来自世界各地的开发人员使用Spring 框架来创建性能好、易于测试、可重用的代码。",{"type":17,"tag":35,"props":9829,"children":9830},{},[9831],{"type":23,"value":9832},"Spring 框架是一个开源的 Java 平台，它最初是由 Rod Johnson 编写的，并且于 2003 年 6 月首次在 Apache 2.0 许可下发布。",{"type":17,"tag":35,"props":9834,"children":9835},{},[9836],{"type":23,"value":9837},"Spring 是轻量级的框架，其基础版本只有 2 MB 左右的大小。",{"type":17,"tag":35,"props":9839,"children":9840},{},[9841],{"type":23,"value":9842},"Spring 框架的核心特性是可以用于开发任何 Java 应用程序，但是在 Java EE 平台上构建 web 应用程序是需要扩展的。 Spring 框架的目标是使 J2EE 开发变得更容易使用，通过启用基于 POJO编程模型来促进良好的编程实践。",{"type":17,"tag":74,"props":9844,"children":9846},{"id":9845},"_12-spring-framework",[9847],{"type":23,"value":9848},"1.2 Spring Framework",{"type":17,"tag":53,"props":9850,"children":9851},{},[9852],{"type":17,"tag":57,"props":9853,"children":9854},{},[9855],{"type":23,"value":9856},"Spring 的基础框架，可以视为 Spring 基础设施，基本上任何其他 Spring 项目都是以 Spring Framework为基础的。",{"type":17,"tag":3272,"props":9858,"children":9860},{"id":9859},"_121-特性",[9861],{"type":23,"value":9862},"1.2.1 特性",{"type":17,"tag":31,"props":9864,"children":9865},{},[9866,9871,9876,9881,9886,9891],{"type":17,"tag":35,"props":9867,"children":9868},{},[9869],{"type":23,"value":9870},"非侵入式：使用 Spring Framework 开发应用程序时，Spring 对应用程序本身的结构影响非常小。对领域模型可以做到零污染；对功能性组件也只需要使用几个简单的注解进行标记，完全不会破坏原有结构，反而能将组件结构进一步简化。这就使得基于 Spring Framework 开发应用程序时结构清晰、简洁优雅。",{"type":17,"tag":35,"props":9872,"children":9873},{},[9874],{"type":23,"value":9875},"控制反转：IOC——Inversion of Control，翻转资源获取方向。把自己创建资源、向环境索取资源变成环境将资源准备好，我们享受资源注入。面向切面编程：AOP——Aspect Oriented Programming，在不修改源代码的基础上增强代码功能。",{"type":17,"tag":35,"props":9877,"children":9878},{},[9879],{"type":23,"value":9880},"容器：Spring IOC 是一个容器，因为它包含并且管理组件对象的生命周期。组件享受到了容器化的管理，替程序员屏蔽了组件创建过程中的大量细节，极大的降低了使用门槛，大幅度提高了开发效率。",{"type":17,"tag":35,"props":9882,"children":9883},{},[9884],{"type":23,"value":9885},"组件化：Spring 实现了使用简单的组件配置组合成一个复杂的应用。在 Spring 中可以使用 XML和 Java 注解组合这些对象。这使得我们可以基于一个个功能明确、边界清晰的组件有条不紊的搭建超大型复杂应用系统。",{"type":17,"tag":35,"props":9887,"children":9888},{},[9889],{"type":23,"value":9890},"声明式：很多以前需要编写代码才能实现的功能，现在只需要声明需求即可由框架代为实现。",{"type":17,"tag":35,"props":9892,"children":9893},{},[9894],{"type":23,"value":9895},"一站式：在 IOC 和 AOP 的基础上可以整合各种企业应用的开源框架和优秀的第三方类库。而且Spring 旗下的项目已经覆盖了广泛领域，很多方面的功能性需求可以在 Spring Framework 的基础上全部使用 Spring 来实现。",{"type":17,"tag":3272,"props":9897,"children":9899},{"id":9898},"_122-spring-framework五大功能模块",[9900],{"type":23,"value":9901},"1.2.2 Spring Framework五大功能模块",{"type":17,"tag":812,"props":9903,"children":9904},{},[9905,9921],{"type":17,"tag":816,"props":9906,"children":9907},{},[9908],{"type":17,"tag":820,"props":9909,"children":9910},{},[9911,9916],{"type":17,"tag":824,"props":9912,"children":9913},{},[9914],{"type":23,"value":9915},"功能模块",{"type":17,"tag":824,"props":9917,"children":9918},{},[9919],{"type":23,"value":9920},"功能介绍",{"type":17,"tag":836,"props":9922,"children":9923},{},[9924,9937,9950,9963,9976],{"type":17,"tag":820,"props":9925,"children":9926},{},[9927,9932],{"type":17,"tag":843,"props":9928,"children":9929},{},[9930],{"type":23,"value":9931},"Core Container",{"type":17,"tag":843,"props":9933,"children":9934},{},[9935],{"type":23,"value":9936},"核心容器，在Spring环境下使用任何功能都必须基于IOC容器",{"type":17,"tag":820,"props":9938,"children":9939},{},[9940,9945],{"type":17,"tag":843,"props":9941,"children":9942},{},[9943],{"type":23,"value":9944},"AOP&Aspects",{"type":17,"tag":843,"props":9946,"children":9947},{},[9948],{"type":23,"value":9949},"面向切面编程",{"type":17,"tag":820,"props":9951,"children":9952},{},[9953,9958],{"type":17,"tag":843,"props":9954,"children":9955},{},[9956],{"type":23,"value":9957},"Testing",{"type":17,"tag":843,"props":9959,"children":9960},{},[9961],{"type":23,"value":9962},"提供了对junit或TestNG测试框架的整合",{"type":17,"tag":820,"props":9964,"children":9965},{},[9966,9971],{"type":17,"tag":843,"props":9967,"children":9968},{},[9969],{"type":23,"value":9970},"Data Access\u002FIntegration",{"type":17,"tag":843,"props":9972,"children":9973},{},[9974],{"type":23,"value":9975},"提供了对数据访问\u002F集成的功能",{"type":17,"tag":820,"props":9977,"children":9978},{},[9979,9984],{"type":17,"tag":843,"props":9980,"children":9981},{},[9982],{"type":23,"value":9983},"Spring MVC",{"type":17,"tag":843,"props":9985,"children":9986},{},[9987],{"type":23,"value":9988},"提供了面向Web应用程序的集成功能",{"type":17,"tag":25,"props":9990,"children":9992},{"id":9991},"_2-ioc",[9993],{"type":23,"value":9994},"2. IOC",{"type":17,"tag":74,"props":9996,"children":9998},{"id":9997},"_21-ioc容器",[9999],{"type":23,"value":10000},"2.1 IOC容器",{"type":17,"tag":3272,"props":10002,"children":10004},{"id":10003},"_211-ioc思想",[10005],{"type":23,"value":10006},"2.1.1 IOC思想",{"type":17,"tag":53,"props":10008,"children":10009},{},[10010,10015],{"type":17,"tag":57,"props":10011,"children":10012},{},[10013],{"type":23,"value":10014},"IOC，即控制反转，是指把对象的创建、初始化、销毁交给 Spring 来管理，而不是由开发者控制，实现控制反转。IOC 思想基于 IOC 容器完成，IOC 容器底层就是对象工厂（BeanFactory 接口）。",{"type":17,"tag":57,"props":10016,"children":10017},{},[10018],{"type":23,"value":10019},"Spring 通过 IOC 容器来管理所有 Java 对象的实例化和初始化，控制对象与对象之间的依赖关系。我们将由 IoC 容器管理的 Java 对象称为 Spring Bean。",{"type":17,"tag":31,"props":10021,"children":10022},{},[10023,10054,10079],{"type":17,"tag":35,"props":10024,"children":10025},{},[10026,10031,10035,10037,10040,10042,10045,10047,10052],{"type":17,"tag":86,"props":10027,"children":10028},{},[10029],{"type":23,"value":10030},"获取资源的传统方式",{"type":17,"tag":10032,"props":10033,"children":10034},"br",{},[],{"type":23,"value":10036},"\n自己做饭：买菜、洗菜、择菜、改刀、炒菜，全过程参与，费时费力，必须清楚了解资源创建整个过程",{"type":17,"tag":10032,"props":10038,"children":10039},{},[],{"type":23,"value":10041},"\n中的全部细节且熟练掌握。",{"type":17,"tag":10032,"props":10043,"children":10044},{},[],{"type":23,"value":10046},"\n在应用程序中的组件需要获取资源时，传统的方式是组件",{"type":17,"tag":86,"props":10048,"children":10049},{},[10050],{"type":23,"value":10051},"主动",{"type":23,"value":10053},"的从容器中获取所需要的资源，在这样的模式下开发人员往往需要知道在具体容器中特定资源的获取方式，增加了学习成本，同时降低了开发效率。",{"type":17,"tag":35,"props":10055,"children":10056},{},[10057,10062,10065,10067,10070,10072,10077],{"type":17,"tag":86,"props":10058,"children":10059},{},[10060],{"type":23,"value":10061},"反转控制方式获取资源",{"type":17,"tag":10032,"props":10063,"children":10064},{},[],{"type":23,"value":10066},"\n点外卖：下单、等、吃，省时省力，不必关心资源创建过程的所有细节。",{"type":17,"tag":10032,"props":10068,"children":10069},{},[],{"type":23,"value":10071},"\n反转控制的思想完全颠覆了应用程序组件获取资源的传统方式：反转了资源的获取方向——改由容器主动的将资源推送给需要的组件，开发人员不需要知道容器是如何创建资源对象的，只需要提供接收资源的方式即可，极大的降低了学习成本，提高了开发的效率。这种行为也称为查找的",{"type":17,"tag":86,"props":10073,"children":10074},{},[10075],{"type":23,"value":10076},"被动",{"type":23,"value":10078},"形式。",{"type":17,"tag":35,"props":10080,"children":10081},{},[10082,10087,10090,10092,10097,10099,10102],{"type":17,"tag":86,"props":10083,"children":10084},{},[10085],{"type":23,"value":10086},"DI",{"type":17,"tag":10032,"props":10088,"children":10089},{},[],{"type":23,"value":10091},"\nDI：Dependency Injection，翻译过来是",{"type":17,"tag":86,"props":10093,"children":10094},{},[10095],{"type":23,"value":10096},"依赖注入",{"type":23,"value":10098},"。",{"type":17,"tag":10032,"props":10100,"children":10101},{},[],{"type":23,"value":10103},"\nDI 是 IOC 的另一种表述方式：即组件以一些预先定义好的方式（例如：setter 方法）接受来自于容器的资源注入。相对于IOC而言，这种表述更直接。",{"type":17,"tag":57,"props":10105,"children":10106},{},[10107],{"type":17,"tag":86,"props":10108,"children":10109},{},[10110],{"type":23,"value":10111},"结论：IOC 就是一种反转控制的思想， 而 DI 是对 IOC 的一种具体实现。",{"type":17,"tag":3272,"props":10113,"children":10115},{"id":10114},"_212-ioc容器在spring中的实现",[10116],{"type":23,"value":10117},"2.1.2 IOC容器在Spring中的实现",{"type":17,"tag":57,"props":10119,"children":10120},{},[10121],{"type":23,"value":10122},"Spring的IOC容器就是IOC思想的一个落地的产品实现、IOC容器中管理的组件也叫做bean。在创建bean之前，首先需要创建IOC容器。Spring提供了IOC容器的两种实现方式：",{"type":17,"tag":31,"props":10124,"children":10125},{},[10126,10136,10146],{"type":17,"tag":35,"props":10127,"children":10128},{},[10129,10131,10134],{"type":23,"value":10130},"BeanFactory",{"type":17,"tag":10032,"props":10132,"children":10133},{},[],{"type":23,"value":10135},"\n这是IOC容器的基本实现，是Spring内部使用的接口。面向Spring本身，不提供给开发人员使用",{"type":17,"tag":35,"props":10137,"children":10138},{},[10139,10141,10144],{"type":23,"value":10140},"ApplicationContext",{"type":17,"tag":10032,"props":10142,"children":10143},{},[],{"type":23,"value":10145},"\nBeanFactory的子接口，提供了更多的高级特性。面向Spring的使用者，几乎所有场合都使用ApplicationContext而不是底层的BeanFactory。",{"type":17,"tag":35,"props":10147,"children":10148},{},[10149,10151,10154],{"type":23,"value":10150},"ApplicationContext的主要实现类",{"type":17,"tag":10032,"props":10152,"children":10153},{},[],{"type":23,"value":10155},"\n![image-20230318151145483](\u002FUsers\u002Fwangkun\u002FLibrary\u002FApplication Support\u002Ftypora-user-images\u002Fimage-20230318151145483.png)",{"type":17,"tag":812,"props":10157,"children":10158},{},[10159,10175],{"type":17,"tag":816,"props":10160,"children":10161},{},[10162],{"type":17,"tag":820,"props":10163,"children":10164},{},[10165,10170],{"type":17,"tag":824,"props":10166,"children":10167},{},[10168],{"type":23,"value":10169},"类型名",{"type":17,"tag":824,"props":10171,"children":10172},{},[10173],{"type":23,"value":10174},"简介",{"type":17,"tag":836,"props":10176,"children":10177},{},[10178,10191,10204,10217],{"type":17,"tag":820,"props":10179,"children":10180},{},[10181,10186],{"type":17,"tag":843,"props":10182,"children":10183},{},[10184],{"type":23,"value":10185},"ClassPathXmlApplicationContext",{"type":17,"tag":843,"props":10187,"children":10188},{},[10189],{"type":23,"value":10190},"通过读取类路径下的 XML 格式的配置文件创建 IOC 容器对象",{"type":17,"tag":820,"props":10192,"children":10193},{},[10194,10199],{"type":17,"tag":843,"props":10195,"children":10196},{},[10197],{"type":23,"value":10198},"FileSystemXmlApplicationContext",{"type":17,"tag":843,"props":10200,"children":10201},{},[10202],{"type":23,"value":10203},"通过文件系统路径读取XML格式的配置文件创建IOC容器对象",{"type":17,"tag":820,"props":10205,"children":10206},{},[10207,10212],{"type":17,"tag":843,"props":10208,"children":10209},{},[10210],{"type":23,"value":10211},"ConfigurableApplicationContext",{"type":17,"tag":843,"props":10213,"children":10214},{},[10215],{"type":23,"value":10216},"ApplicationContext 的子接口，包含一些扩展方法refresh() 和 close() ，让 ApplicationContext 具有启动、关闭和刷新上下文的能力。",{"type":17,"tag":820,"props":10218,"children":10219},{},[10220,10225],{"type":17,"tag":843,"props":10221,"children":10222},{},[10223],{"type":23,"value":10224},"WebApplicationContext",{"type":17,"tag":843,"props":10226,"children":10227},{},[10228],{"type":23,"value":10229},"专门为 Web 应用准备，基于 Web 环境创建 IOC 容器对象，并将对象引入存入 ServletContext 域中。",{"type":17,"tag":31,"props":10231,"children":10232},{},[10233],{"type":17,"tag":35,"props":10234,"children":10235},{},[],{"type":17,"tag":74,"props":10237,"children":10239},{"id":10238},"_22-基于xml管理bean",[10240],{"type":23,"value":10241},"2.2 基于XML管理bean",{"type":17,"tag":3272,"props":10243,"children":10245},{"id":10244},"_221-实验一入门案例",[10246],{"type":23,"value":10247},"2.2.1 实验一：入门案例",{"type":17,"tag":53,"props":10249,"children":10250},{},[10251,10256],{"type":17,"tag":57,"props":10252,"children":10253},{},[10254],{"type":23,"value":10255},"spring管理的对象我们称为组件或者bean",{"type":17,"tag":57,"props":10257,"children":10258},{},[10259],{"type":23,"value":10260},"Spring 底层默认通过反射技术调用组件类的无参构造器来创建组件对象，这一点需要注意。如果在需要无参构造器时，没有无参构造器，会抛出异常",{"type":17,"tag":245,"props":10262,"children":10263},{},[10264],{"type":17,"tag":35,"props":10265,"children":10266},{},[10267],{"type":23,"value":317},{"type":17,"tag":319,"props":10269,"children":10271},{"className":1376,"code":10270,"language":1378,"meta":7,"style":7},"\u003Cdependencies>\n    \u003C!-- 基于Maven依赖传递性，导入spring-context依赖即可导入当前所需所有jar包 -->\n    \u003Cdependency>\n        \u003CgroupId>org.springframework\u003C\u002FgroupId>\n        \u003CartifactId>spring-context\u003C\u002FartifactId>\n        \u003Cversion>5.3.1\u003C\u002Fversion>\n    \u003C\u002Fdependency>\n    \u003C!-- junit测试 -->\n    \u003Cdependency>\n        \u003CgroupId>junit\u003C\u002FgroupId>\n        \u003CartifactId>junit\u003C\u002FartifactId>\n        \u003Cversion>4.12\u003C\u002Fversion>\n        \u003Cscope>test\u003C\u002Fscope>\n    \u003C\u002Fdependency>\n\u003C\u002Fdependencies>\n",[10272],{"type":17,"tag":293,"props":10273,"children":10274},{"__ignoreMap":7},[10275,10283,10291,10298,10306,10314,10322,10329,10337,10344,10351,10358,10365,10372,10379],{"type":17,"tag":329,"props":10276,"children":10277},{"class":331,"line":332},[10278],{"type":17,"tag":329,"props":10279,"children":10280},{},[10281],{"type":23,"value":10282},"\u003Cdependencies>\n",{"type":17,"tag":329,"props":10284,"children":10285},{"class":331,"line":341},[10286],{"type":17,"tag":329,"props":10287,"children":10288},{},[10289],{"type":23,"value":10290},"    \u003C!-- 基于Maven依赖传递性，导入spring-context依赖即可导入当前所需所有jar包 -->\n",{"type":17,"tag":329,"props":10292,"children":10293},{"class":331,"line":350},[10294],{"type":17,"tag":329,"props":10295,"children":10296},{},[10297],{"type":23,"value":347},{"type":17,"tag":329,"props":10299,"children":10300},{"class":331,"line":359},[10301],{"type":17,"tag":329,"props":10302,"children":10303},{},[10304],{"type":23,"value":10305},"        \u003CgroupId>org.springframework\u003C\u002FgroupId>\n",{"type":17,"tag":329,"props":10307,"children":10308},{"class":331,"line":368},[10309],{"type":17,"tag":329,"props":10310,"children":10311},{},[10312],{"type":23,"value":10313},"        \u003CartifactId>spring-context\u003C\u002FartifactId>\n",{"type":17,"tag":329,"props":10315,"children":10316},{"class":331,"line":377},[10317],{"type":17,"tag":329,"props":10318,"children":10319},{},[10320],{"type":23,"value":10321},"        \u003Cversion>5.3.1\u003C\u002Fversion>\n",{"type":17,"tag":329,"props":10323,"children":10324},{"class":331,"line":386},[10325],{"type":17,"tag":329,"props":10326,"children":10327},{},[10328],{"type":23,"value":480},{"type":17,"tag":329,"props":10330,"children":10331},{"class":331,"line":394},[10332],{"type":17,"tag":329,"props":10333,"children":10334},{},[10335],{"type":23,"value":10336},"    \u003C!-- junit测试 -->\n",{"type":17,"tag":329,"props":10338,"children":10339},{"class":331,"line":403},[10340],{"type":17,"tag":329,"props":10341,"children":10342},{},[10343],{"type":23,"value":347},{"type":17,"tag":329,"props":10345,"children":10346},{"class":331,"line":412},[10347],{"type":17,"tag":329,"props":10348,"children":10349},{},[10350],{"type":23,"value":400},{"type":17,"tag":329,"props":10352,"children":10353},{"class":331,"line":421},[10354],{"type":17,"tag":329,"props":10355,"children":10356},{},[10357],{"type":23,"value":409},{"type":17,"tag":329,"props":10359,"children":10360},{"class":331,"line":430},[10361],{"type":17,"tag":329,"props":10362,"children":10363},{},[10364],{"type":23,"value":418},{"type":17,"tag":329,"props":10366,"children":10367},{"class":331,"line":439},[10368],{"type":17,"tag":329,"props":10369,"children":10370},{},[10371],{"type":23,"value":427},{"type":17,"tag":329,"props":10373,"children":10374},{"class":331,"line":447},[10375],{"type":17,"tag":329,"props":10376,"children":10377},{},[10378],{"type":23,"value":480},{"type":17,"tag":329,"props":10380,"children":10381},{"class":331,"line":456},[10382],{"type":17,"tag":329,"props":10383,"children":10384},{},[10385],{"type":23,"value":489},{"type":17,"tag":245,"props":10387,"children":10388},{"start":341},[10389],{"type":17,"tag":35,"props":10390,"children":10391},{},[10392],{"type":23,"value":10393},"创建类组件",{"type":17,"tag":319,"props":10395,"children":10397},{"className":321,"code":10396,"language":323,"meta":7,"style":7},"package com.wangkun.spring.pojo;\n\npublic class HelloWorld {\n\n    public void sayHello() {\n\n        System.out.println(\"hello，spring\");\n\n    }\n}\n",[10398],{"type":17,"tag":293,"props":10399,"children":10400},{"__ignoreMap":7},[10401,10409,10416,10424,10431,10439,10446,10454,10461,10468],{"type":17,"tag":329,"props":10402,"children":10403},{"class":331,"line":332},[10404],{"type":17,"tag":329,"props":10405,"children":10406},{},[10407],{"type":23,"value":10408},"package com.wangkun.spring.pojo;\n",{"type":17,"tag":329,"props":10410,"children":10411},{"class":331,"line":341},[10412],{"type":17,"tag":329,"props":10413,"children":10414},{"emptyLinePlaceholder":542},[10415],{"type":23,"value":545},{"type":17,"tag":329,"props":10417,"children":10418},{"class":331,"line":350},[10419],{"type":17,"tag":329,"props":10420,"children":10421},{},[10422],{"type":23,"value":10423},"public class HelloWorld {\n",{"type":17,"tag":329,"props":10425,"children":10426},{"class":331,"line":359},[10427],{"type":17,"tag":329,"props":10428,"children":10429},{"emptyLinePlaceholder":542},[10430],{"type":23,"value":545},{"type":17,"tag":329,"props":10432,"children":10433},{"class":331,"line":368},[10434],{"type":17,"tag":329,"props":10435,"children":10436},{},[10437],{"type":23,"value":10438},"    public void sayHello() {\n",{"type":17,"tag":329,"props":10440,"children":10441},{"class":331,"line":377},[10442],{"type":17,"tag":329,"props":10443,"children":10444},{"emptyLinePlaceholder":542},[10445],{"type":23,"value":545},{"type":17,"tag":329,"props":10447,"children":10448},{"class":331,"line":386},[10449],{"type":17,"tag":329,"props":10450,"children":10451},{},[10452],{"type":23,"value":10453},"        System.out.println(\"hello，spring\");\n",{"type":17,"tag":329,"props":10455,"children":10456},{"class":331,"line":394},[10457],{"type":17,"tag":329,"props":10458,"children":10459},{"emptyLinePlaceholder":542},[10460],{"type":23,"value":545},{"type":17,"tag":329,"props":10462,"children":10463},{"class":331,"line":403},[10464],{"type":17,"tag":329,"props":10465,"children":10466},{},[10467],{"type":23,"value":1351},{"type":17,"tag":329,"props":10469,"children":10470},{"class":331,"line":412},[10471],{"type":17,"tag":329,"props":10472,"children":10473},{},[10474],{"type":23,"value":753},{"type":17,"tag":245,"props":10476,"children":10477},{"start":350},[10478,10488],{"type":17,"tag":35,"props":10479,"children":10480},{},[10481,10483,10486],{"type":23,"value":10482},"创建spring配置文件",{"type":17,"tag":10032,"props":10484,"children":10485},{},[],{"type":23,"value":10487},"\n![image-20230318161923722](\u002FUsers\u002Fwangkun\u002FLibrary\u002FApplication Support\u002Ftypora-user-images\u002Fimage-20230318161923722.png)",{"type":17,"tag":35,"props":10489,"children":10490},{},[10491],{"type":23,"value":10492},"在spring配置文件中配置bean",{"type":17,"tag":319,"props":10494,"children":10496},{"className":1376,"code":10495,"language":1378,"meta":7,"style":7},"\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\u003Cbeans xmlns=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\"\n       xmlns:xsi=\"http:\u002F\u002Fwww.w3.org\u002F2001\u002FXMLSchema-instance\"\n       xsi:schemaLocation=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\u002Fspring-beans.xsd\">\n\n    \u003C!--\n        bean：配置一个bean对象，将对象交给IOC容器管理\n        属性：\n        id：bean的唯一标识，不能重复\n        class：设置bean对象所对应的类型\n    -->\n    \u003Cbean id=\"helloWorld\" class=\"com.wangkun.spring.pojo.HelloWorld\"\u002F>\n\n\u003C\u002Fbeans>\n",[10497],{"type":17,"tag":293,"props":10498,"children":10499},{"__ignoreMap":7},[10500,10507,10515,10523,10531,10538,10546,10554,10562,10570,10578,10586,10594,10601],{"type":17,"tag":329,"props":10501,"children":10502},{"class":331,"line":332},[10503],{"type":17,"tag":329,"props":10504,"children":10505},{},[10506],{"type":23,"value":7968},{"type":17,"tag":329,"props":10508,"children":10509},{"class":331,"line":341},[10510],{"type":17,"tag":329,"props":10511,"children":10512},{},[10513],{"type":23,"value":10514},"\u003Cbeans xmlns=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\"\n",{"type":17,"tag":329,"props":10516,"children":10517},{"class":331,"line":350},[10518],{"type":17,"tag":329,"props":10519,"children":10520},{},[10521],{"type":23,"value":10522},"       xmlns:xsi=\"http:\u002F\u002Fwww.w3.org\u002F2001\u002FXMLSchema-instance\"\n",{"type":17,"tag":329,"props":10524,"children":10525},{"class":331,"line":359},[10526],{"type":17,"tag":329,"props":10527,"children":10528},{},[10529],{"type":23,"value":10530},"       xsi:schemaLocation=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\u002Fspring-beans.xsd\">\n",{"type":17,"tag":329,"props":10532,"children":10533},{"class":331,"line":368},[10534],{"type":17,"tag":329,"props":10535,"children":10536},{"emptyLinePlaceholder":542},[10537],{"type":23,"value":545},{"type":17,"tag":329,"props":10539,"children":10540},{"class":331,"line":377},[10541],{"type":17,"tag":329,"props":10542,"children":10543},{},[10544],{"type":23,"value":10545},"    \u003C!--\n",{"type":17,"tag":329,"props":10547,"children":10548},{"class":331,"line":386},[10549],{"type":17,"tag":329,"props":10550,"children":10551},{},[10552],{"type":23,"value":10553},"        bean：配置一个bean对象，将对象交给IOC容器管理\n",{"type":17,"tag":329,"props":10555,"children":10556},{"class":331,"line":394},[10557],{"type":17,"tag":329,"props":10558,"children":10559},{},[10560],{"type":23,"value":10561},"        属性：\n",{"type":17,"tag":329,"props":10563,"children":10564},{"class":331,"line":403},[10565],{"type":17,"tag":329,"props":10566,"children":10567},{},[10568],{"type":23,"value":10569},"        id：bean的唯一标识，不能重复\n",{"type":17,"tag":329,"props":10571,"children":10572},{"class":331,"line":412},[10573],{"type":17,"tag":329,"props":10574,"children":10575},{},[10576],{"type":23,"value":10577},"        class：设置bean对象所对应的类型\n",{"type":17,"tag":329,"props":10579,"children":10580},{"class":331,"line":421},[10581],{"type":17,"tag":329,"props":10582,"children":10583},{},[10584],{"type":23,"value":10585},"    -->\n",{"type":17,"tag":329,"props":10587,"children":10588},{"class":331,"line":430},[10589],{"type":17,"tag":329,"props":10590,"children":10591},{},[10592],{"type":23,"value":10593},"    \u003Cbean id=\"helloWorld\" class=\"com.wangkun.spring.pojo.HelloWorld\"\u002F>\n",{"type":17,"tag":329,"props":10595,"children":10596},{"class":331,"line":439},[10597],{"type":17,"tag":329,"props":10598,"children":10599},{"emptyLinePlaceholder":542},[10600],{"type":23,"value":545},{"type":17,"tag":329,"props":10602,"children":10603},{"class":331,"line":447},[10604],{"type":17,"tag":329,"props":10605,"children":10606},{},[10607],{"type":23,"value":10608},"\u003C\u002Fbeans>\n",{"type":17,"tag":245,"props":10610,"children":10611},{"start":368},[10612],{"type":17,"tag":35,"props":10613,"children":10614},{},[10615],{"type":23,"value":10616},"创建测试类测试",{"type":17,"tag":319,"props":10618,"children":10620},{"className":321,"code":10619,"language":323,"meta":7,"style":7},"package com.wangkun.spring.test;\n\nimport com.wangkun.spring.pojo.HelloWorld;\nimport org.junit.Test;\nimport org.springframework.context.annotation.ClassPathBeanDefinitionScanner;\nimport org.springframework.context.support.ClassPathXmlApplicationContext;\n\npublic class TestHelloWorld {\n    @Test\n    public void test() {\n        ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext(\"applicationContext.xml\");\n\n        HelloWorld helloWorld = (HelloWorld) ioc.getBean(\"helloWorld\");\n        helloWorld.sayHello();\n    }\n}\n",[10621],{"type":17,"tag":293,"props":10622,"children":10623},{"__ignoreMap":7},[10624,10632,10639,10647,10654,10662,10670,10677,10685,10692,10700,10708,10715,10723,10731,10738],{"type":17,"tag":329,"props":10625,"children":10626},{"class":331,"line":332},[10627],{"type":17,"tag":329,"props":10628,"children":10629},{},[10630],{"type":23,"value":10631},"package com.wangkun.spring.test;\n",{"type":17,"tag":329,"props":10633,"children":10634},{"class":331,"line":341},[10635],{"type":17,"tag":329,"props":10636,"children":10637},{"emptyLinePlaceholder":542},[10638],{"type":23,"value":545},{"type":17,"tag":329,"props":10640,"children":10641},{"class":331,"line":350},[10642],{"type":17,"tag":329,"props":10643,"children":10644},{},[10645],{"type":23,"value":10646},"import com.wangkun.spring.pojo.HelloWorld;\n",{"type":17,"tag":329,"props":10648,"children":10649},{"class":331,"line":359},[10650],{"type":17,"tag":329,"props":10651,"children":10652},{},[10653],{"type":23,"value":1101},{"type":17,"tag":329,"props":10655,"children":10656},{"class":331,"line":368},[10657],{"type":17,"tag":329,"props":10658,"children":10659},{},[10660],{"type":23,"value":10661},"import org.springframework.context.annotation.ClassPathBeanDefinitionScanner;\n",{"type":17,"tag":329,"props":10663,"children":10664},{"class":331,"line":377},[10665],{"type":17,"tag":329,"props":10666,"children":10667},{},[10668],{"type":23,"value":10669},"import org.springframework.context.support.ClassPathXmlApplicationContext;\n",{"type":17,"tag":329,"props":10671,"children":10672},{"class":331,"line":386},[10673],{"type":17,"tag":329,"props":10674,"children":10675},{"emptyLinePlaceholder":542},[10676],{"type":23,"value":545},{"type":17,"tag":329,"props":10678,"children":10679},{"class":331,"line":394},[10680],{"type":17,"tag":329,"props":10681,"children":10682},{},[10683],{"type":23,"value":10684},"public class TestHelloWorld {\n",{"type":17,"tag":329,"props":10686,"children":10687},{"class":331,"line":403},[10688],{"type":17,"tag":329,"props":10689,"children":10690},{},[10691],{"type":23,"value":1147},{"type":17,"tag":329,"props":10693,"children":10694},{"class":331,"line":412},[10695],{"type":17,"tag":329,"props":10696,"children":10697},{},[10698],{"type":23,"value":10699},"    public void test() {\n",{"type":17,"tag":329,"props":10701,"children":10702},{"class":331,"line":421},[10703],{"type":17,"tag":329,"props":10704,"children":10705},{},[10706],{"type":23,"value":10707},"        ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext(\"applicationContext.xml\");\n",{"type":17,"tag":329,"props":10709,"children":10710},{"class":331,"line":430},[10711],{"type":17,"tag":329,"props":10712,"children":10713},{"emptyLinePlaceholder":542},[10714],{"type":23,"value":545},{"type":17,"tag":329,"props":10716,"children":10717},{"class":331,"line":439},[10718],{"type":17,"tag":329,"props":10719,"children":10720},{},[10721],{"type":23,"value":10722},"        HelloWorld helloWorld = (HelloWorld) ioc.getBean(\"helloWorld\");\n",{"type":17,"tag":329,"props":10724,"children":10725},{"class":331,"line":447},[10726],{"type":17,"tag":329,"props":10727,"children":10728},{},[10729],{"type":23,"value":10730},"        helloWorld.sayHello();\n",{"type":17,"tag":329,"props":10732,"children":10733},{"class":331,"line":456},[10734],{"type":17,"tag":329,"props":10735,"children":10736},{},[10737],{"type":23,"value":1351},{"type":17,"tag":329,"props":10739,"children":10740},{"class":331,"line":465},[10741],{"type":17,"tag":329,"props":10742,"children":10743},{},[10744],{"type":23,"value":753},{"type":17,"tag":3272,"props":10746,"children":10748},{"id":10747},"_222-获取bean的三种方式",[10749],{"type":23,"value":10750},"2.2.2 获取bean的三种方式",{"type":17,"tag":245,"props":10752,"children":10753},{},[10754,10759,10764],{"type":17,"tag":35,"props":10755,"children":10756},{},[10757],{"type":23,"value":10758},"根据id获取",{"type":17,"tag":35,"props":10760,"children":10761},{},[10762],{"type":23,"value":10763},"根据类型获取（最常用）",{"type":17,"tag":35,"props":10765,"children":10766},{},[10767],{"type":23,"value":10768},"根据类型和id获取",{"type":17,"tag":319,"props":10770,"children":10772},{"className":321,"code":10771,"language":323,"meta":7,"style":7},"@Test\npublic void test() {\n    ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext(\"applicationContext.xml\");\n\n    \u002F*获取bean的三种方式*\u002F\n    \u002F\u002F 1. 根据id获取\n    \u002F\u002F Student studentOne = (Student) ioc.getBean(\"studentOne\");\n\n    \u002F\u002F 2. 根据类型获取 最常用\n    \u002F\u002F Student bean = ioc.getBean(Student.class);\n\n    \u002F\u002F 3. 根据类型和id获取\n    Student bean = ioc.getBean(\"studentOne\", Student.class);\n\n    System.out.println(bean);\n}\n",[10773],{"type":17,"tag":293,"props":10774,"children":10775},{"__ignoreMap":7},[10776,10783,10791,10799,10806,10814,10822,10830,10837,10845,10853,10860,10868,10876,10883,10891],{"type":17,"tag":329,"props":10777,"children":10778},{"class":331,"line":332},[10779],{"type":17,"tag":329,"props":10780,"children":10781},{},[10782],{"type":23,"value":2307},{"type":17,"tag":329,"props":10784,"children":10785},{"class":331,"line":341},[10786],{"type":17,"tag":329,"props":10787,"children":10788},{},[10789],{"type":23,"value":10790},"public void test() {\n",{"type":17,"tag":329,"props":10792,"children":10793},{"class":331,"line":350},[10794],{"type":17,"tag":329,"props":10795,"children":10796},{},[10797],{"type":23,"value":10798},"    ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext(\"applicationContext.xml\");\n",{"type":17,"tag":329,"props":10800,"children":10801},{"class":331,"line":359},[10802],{"type":17,"tag":329,"props":10803,"children":10804},{"emptyLinePlaceholder":542},[10805],{"type":23,"value":545},{"type":17,"tag":329,"props":10807,"children":10808},{"class":331,"line":368},[10809],{"type":17,"tag":329,"props":10810,"children":10811},{},[10812],{"type":23,"value":10813},"    \u002F*获取bean的三种方式*\u002F\n",{"type":17,"tag":329,"props":10815,"children":10816},{"class":331,"line":377},[10817],{"type":17,"tag":329,"props":10818,"children":10819},{},[10820],{"type":23,"value":10821},"    \u002F\u002F 1. 根据id获取\n",{"type":17,"tag":329,"props":10823,"children":10824},{"class":331,"line":386},[10825],{"type":17,"tag":329,"props":10826,"children":10827},{},[10828],{"type":23,"value":10829},"    \u002F\u002F Student studentOne = (Student) ioc.getBean(\"studentOne\");\n",{"type":17,"tag":329,"props":10831,"children":10832},{"class":331,"line":394},[10833],{"type":17,"tag":329,"props":10834,"children":10835},{"emptyLinePlaceholder":542},[10836],{"type":23,"value":545},{"type":17,"tag":329,"props":10838,"children":10839},{"class":331,"line":403},[10840],{"type":17,"tag":329,"props":10841,"children":10842},{},[10843],{"type":23,"value":10844},"    \u002F\u002F 2. 根据类型获取 最常用\n",{"type":17,"tag":329,"props":10846,"children":10847},{"class":331,"line":412},[10848],{"type":17,"tag":329,"props":10849,"children":10850},{},[10851],{"type":23,"value":10852},"    \u002F\u002F Student bean = ioc.getBean(Student.class);\n",{"type":17,"tag":329,"props":10854,"children":10855},{"class":331,"line":421},[10856],{"type":17,"tag":329,"props":10857,"children":10858},{"emptyLinePlaceholder":542},[10859],{"type":23,"value":545},{"type":17,"tag":329,"props":10861,"children":10862},{"class":331,"line":430},[10863],{"type":17,"tag":329,"props":10864,"children":10865},{},[10866],{"type":23,"value":10867},"    \u002F\u002F 3. 根据类型和id获取\n",{"type":17,"tag":329,"props":10869,"children":10870},{"class":331,"line":439},[10871],{"type":17,"tag":329,"props":10872,"children":10873},{},[10874],{"type":23,"value":10875},"    Student bean = ioc.getBean(\"studentOne\", Student.class);\n",{"type":17,"tag":329,"props":10877,"children":10878},{"class":331,"line":447},[10879],{"type":17,"tag":329,"props":10880,"children":10881},{"emptyLinePlaceholder":542},[10882],{"type":23,"value":545},{"type":17,"tag":329,"props":10884,"children":10885},{"class":331,"line":456},[10886],{"type":17,"tag":329,"props":10887,"children":10888},{},[10889],{"type":23,"value":10890},"    System.out.println(bean);\n",{"type":17,"tag":329,"props":10892,"children":10893},{"class":331,"line":465},[10894],{"type":17,"tag":329,"props":10895,"children":10896},{},[10897],{"type":23,"value":753},{"type":17,"tag":57,"props":10899,"children":10900},{},[10901],{"type":17,"tag":86,"props":10902,"children":10903},{},[10904],{"type":23,"value":10905},"注意：",{"type":17,"tag":31,"props":10907,"children":10908},{},[10909,10914],{"type":17,"tag":35,"props":10910,"children":10911},{},[10912],{"type":23,"value":10913},"当根据类型获取bean时，要IOC容器中指定的类型的bean有且只能有一个",{"type":17,"tag":35,"props":10915,"children":10916},{},[10917],{"type":23,"value":10918},"如果组件类实现了接口，根据接口类型可以获取到bean，但前提是有且只一个类实现了这个接口",{"type":17,"tag":57,"props":10920,"children":10921},{},[10922],{"type":17,"tag":86,"props":10923,"children":10924},{},[10925],{"type":23,"value":10926},"结论：",{"type":17,"tag":57,"props":10928,"children":10929},{},[10930,10932,10937],{"type":23,"value":10931},"根据类型来获取bean时，在满足bean唯一性的前提下，其实只是看：「对象 ",{"type":17,"tag":86,"props":10933,"children":10934},{},[10935],{"type":23,"value":10936},"instanceof",{"type":23,"value":10938}," 指定的类型」的返回的结果，只要返回的是true就可以认定为和类型匹配，就能够获取到",{"type":17,"tag":74,"props":10940,"children":10942},{"id":10941},"_23-依赖注入",[10943],{"type":23,"value":10944},"2.3 依赖注入",{"type":17,"tag":53,"props":10946,"children":10947},{},[10948],{"type":17,"tag":57,"props":10949,"children":10950},{},[10951],{"type":23,"value":10952},"就是给类组件中的属性赋值。",{"type":17,"tag":57,"props":10954,"children":10955},{},[10956],{"type":17,"tag":86,"props":10957,"children":10958},{},[10959],{"type":23,"value":10960},"较完整的xml头部标签",{"type":17,"tag":319,"props":10962,"children":10964},{"className":1376,"code":10963,"language":1378,"meta":7,"style":7},"\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n  \u003Cbeans xmlns=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\"\n         xmlns:xsi=\"http:\u002F\u002Fwww.w3.org\u002F2001\u002FXMLSchema-instance\"\n         xmlns:context=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fcontext\"\n         xsi:schemaLocation=\"\n         http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\n         http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\u002Fspring-beans.xsd\n         http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fcontext\n         http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fcontext\u002Fspring-context.xsd\">\n  \u003C\u002Fbeans>\n",[10965],{"type":17,"tag":293,"props":10966,"children":10967},{"__ignoreMap":7},[10968,10975,10983,10990,10998,11006,11014,11022,11030,11038],{"type":17,"tag":329,"props":10969,"children":10970},{"class":331,"line":332},[10971],{"type":17,"tag":329,"props":10972,"children":10973},{},[10974],{"type":23,"value":7968},{"type":17,"tag":329,"props":10976,"children":10977},{"class":331,"line":341},[10978],{"type":17,"tag":329,"props":10979,"children":10980},{},[10981],{"type":23,"value":10982},"  \u003Cbeans xmlns=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\"\n",{"type":17,"tag":329,"props":10984,"children":10985},{"class":331,"line":350},[10986],{"type":17,"tag":329,"props":10987,"children":10988},{},[10989],{"type":23,"value":7984},{"type":17,"tag":329,"props":10991,"children":10992},{"class":331,"line":359},[10993],{"type":17,"tag":329,"props":10994,"children":10995},{},[10996],{"type":23,"value":10997},"         xmlns:context=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fcontext\"\n",{"type":17,"tag":329,"props":10999,"children":11000},{"class":331,"line":368},[11001],{"type":17,"tag":329,"props":11002,"children":11003},{},[11004],{"type":23,"value":11005},"         xsi:schemaLocation=\"\n",{"type":17,"tag":329,"props":11007,"children":11008},{"class":331,"line":377},[11009],{"type":17,"tag":329,"props":11010,"children":11011},{},[11012],{"type":23,"value":11013},"         http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\n",{"type":17,"tag":329,"props":11015,"children":11016},{"class":331,"line":386},[11017],{"type":17,"tag":329,"props":11018,"children":11019},{},[11020],{"type":23,"value":11021},"         http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\u002Fspring-beans.xsd\n",{"type":17,"tag":329,"props":11023,"children":11024},{"class":331,"line":394},[11025],{"type":17,"tag":329,"props":11026,"children":11027},{},[11028],{"type":23,"value":11029},"         http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fcontext\n",{"type":17,"tag":329,"props":11031,"children":11032},{"class":331,"line":403},[11033],{"type":17,"tag":329,"props":11034,"children":11035},{},[11036],{"type":23,"value":11037},"         http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fcontext\u002Fspring-context.xsd\">\n",{"type":17,"tag":329,"props":11039,"children":11040},{"class":331,"line":412},[11041],{"type":17,"tag":329,"props":11042,"children":11043},{},[11044],{"type":23,"value":11045},"  \u003C\u002Fbeans>\n",{"type":17,"tag":3272,"props":11047,"children":11049},{"id":11048},"_231-setting注入",[11050],{"type":23,"value":11051},"2.3.1 setting注入",{"type":17,"tag":319,"props":11053,"children":11055},{"className":1376,"code":11054,"language":1378,"meta":7,"style":7},"\u003Cbean id=\"studentTwo\" class=\"com.wangkun.spring.pojo.Student\">\n    \u003Cproperty name=\"SId\" value=\"1\"\u002F>\n    \u003Cproperty name=\"SName\" value=\"张三\"\u002F>\n    \u003Cproperty name=\"age\" value=\"12\"\u002F>\n    \u003Cproperty name=\"gender\" value=\"男\"\u002F>\n\u003C\u002Fbean>\n",[11056],{"type":17,"tag":293,"props":11057,"children":11058},{"__ignoreMap":7},[11059,11067,11075,11083,11091,11099],{"type":17,"tag":329,"props":11060,"children":11061},{"class":331,"line":332},[11062],{"type":17,"tag":329,"props":11063,"children":11064},{},[11065],{"type":23,"value":11066},"\u003Cbean id=\"studentTwo\" class=\"com.wangkun.spring.pojo.Student\">\n",{"type":17,"tag":329,"props":11068,"children":11069},{"class":331,"line":341},[11070],{"type":17,"tag":329,"props":11071,"children":11072},{},[11073],{"type":23,"value":11074},"    \u003Cproperty name=\"SId\" value=\"1\"\u002F>\n",{"type":17,"tag":329,"props":11076,"children":11077},{"class":331,"line":350},[11078],{"type":17,"tag":329,"props":11079,"children":11080},{},[11081],{"type":23,"value":11082},"    \u003Cproperty name=\"SName\" value=\"张三\"\u002F>\n",{"type":17,"tag":329,"props":11084,"children":11085},{"class":331,"line":359},[11086],{"type":17,"tag":329,"props":11087,"children":11088},{},[11089],{"type":23,"value":11090},"    \u003Cproperty name=\"age\" value=\"12\"\u002F>\n",{"type":17,"tag":329,"props":11092,"children":11093},{"class":331,"line":368},[11094],{"type":17,"tag":329,"props":11095,"children":11096},{},[11097],{"type":23,"value":11098},"    \u003Cproperty name=\"gender\" value=\"男\"\u002F>\n",{"type":17,"tag":329,"props":11100,"children":11101},{"class":331,"line":377},[11102],{"type":17,"tag":329,"props":11103,"children":11104},{},[11105],{"type":23,"value":11106},"\u003C\u002Fbean>\n",{"type":17,"tag":3272,"props":11108,"children":11110},{"id":11109},"_232-构造器注入",[11111],{"type":23,"value":11112},"2.3.2 构造器注入",{"type":17,"tag":319,"props":11114,"children":11116},{"className":1376,"code":11115,"language":1378,"meta":7,"style":7},"\u003Cbean id=\"studentThree\" class=\"com.wangkun.spring.pojo.Student\">\n    \u003Cconstructor-arg value=\"10001\"\u002F>\n    \u003Cconstructor-arg value=\"李四\"\u002F>\n    \u003Cconstructor-arg value=\"女\"\u002F>\n    \u003C!--可以通过nane指定给那个属性赋值-->\n    \u003Cconstructor-arg value=\"12\" name=\"age\"\u002F>\n\u003C\u002Fbean>\n",[11117],{"type":17,"tag":293,"props":11118,"children":11119},{"__ignoreMap":7},[11120,11128,11136,11144,11152,11160,11168],{"type":17,"tag":329,"props":11121,"children":11122},{"class":331,"line":332},[11123],{"type":17,"tag":329,"props":11124,"children":11125},{},[11126],{"type":23,"value":11127},"\u003Cbean id=\"studentThree\" class=\"com.wangkun.spring.pojo.Student\">\n",{"type":17,"tag":329,"props":11129,"children":11130},{"class":331,"line":341},[11131],{"type":17,"tag":329,"props":11132,"children":11133},{},[11134],{"type":23,"value":11135},"    \u003Cconstructor-arg value=\"10001\"\u002F>\n",{"type":17,"tag":329,"props":11137,"children":11138},{"class":331,"line":350},[11139],{"type":17,"tag":329,"props":11140,"children":11141},{},[11142],{"type":23,"value":11143},"    \u003Cconstructor-arg value=\"李四\"\u002F>\n",{"type":17,"tag":329,"props":11145,"children":11146},{"class":331,"line":359},[11147],{"type":17,"tag":329,"props":11148,"children":11149},{},[11150],{"type":23,"value":11151},"    \u003Cconstructor-arg value=\"女\"\u002F>\n",{"type":17,"tag":329,"props":11153,"children":11154},{"class":331,"line":368},[11155],{"type":17,"tag":329,"props":11156,"children":11157},{},[11158],{"type":23,"value":11159},"    \u003C!--可以通过nane指定给那个属性赋值-->\n",{"type":17,"tag":329,"props":11161,"children":11162},{"class":331,"line":377},[11163],{"type":17,"tag":329,"props":11164,"children":11165},{},[11166],{"type":23,"value":11167},"    \u003Cconstructor-arg value=\"12\" name=\"age\"\u002F>\n",{"type":17,"tag":329,"props":11169,"children":11170},{"class":331,"line":386},[11171],{"type":17,"tag":329,"props":11172,"children":11173},{},[11174],{"type":23,"value":11106},{"type":17,"tag":3272,"props":11176,"children":11178},{"id":11177},"_233-特殊值处理",[11179],{"type":23,"value":11180},"2.3.3 特殊值处理",{"type":17,"tag":31,"props":11182,"children":11183},{},[11184],{"type":17,"tag":35,"props":11185,"children":11186},{},[11187],{"type":23,"value":11188},"null",{"type":17,"tag":319,"props":11190,"children":11192},{"className":1376,"code":11191,"language":1378,"meta":7,"style":7},"\u003Cbean id=\"studentTwo\" class=\"com.wangkun.spring.pojo.Student\">\n    \u003Cproperty name=\"SId\" value=\"1\"\u002F>\n    \u003Cproperty name=\"SName\" value=\"张三\"\u002F>\n    \u003Cproperty name=\"age\" value=\"12\"\u002F>\n    \u003Cproperty name=\"gender\">\n        \u003Cnull\u002F>\n    \u003C\u002Fproperty>\n    \u003Cproperty name=\"score\" value=\"24.1\"\u002F>\n\u003C\u002Fbean>\n",[11193],{"type":17,"tag":293,"props":11194,"children":11195},{"__ignoreMap":7},[11196,11203,11210,11217,11224,11232,11240,11248,11256],{"type":17,"tag":329,"props":11197,"children":11198},{"class":331,"line":332},[11199],{"type":17,"tag":329,"props":11200,"children":11201},{},[11202],{"type":23,"value":11066},{"type":17,"tag":329,"props":11204,"children":11205},{"class":331,"line":341},[11206],{"type":17,"tag":329,"props":11207,"children":11208},{},[11209],{"type":23,"value":11074},{"type":17,"tag":329,"props":11211,"children":11212},{"class":331,"line":350},[11213],{"type":17,"tag":329,"props":11214,"children":11215},{},[11216],{"type":23,"value":11082},{"type":17,"tag":329,"props":11218,"children":11219},{"class":331,"line":359},[11220],{"type":17,"tag":329,"props":11221,"children":11222},{},[11223],{"type":23,"value":11090},{"type":17,"tag":329,"props":11225,"children":11226},{"class":331,"line":368},[11227],{"type":17,"tag":329,"props":11228,"children":11229},{},[11230],{"type":23,"value":11231},"    \u003Cproperty name=\"gender\">\n",{"type":17,"tag":329,"props":11233,"children":11234},{"class":331,"line":377},[11235],{"type":17,"tag":329,"props":11236,"children":11237},{},[11238],{"type":23,"value":11239},"        \u003Cnull\u002F>\n",{"type":17,"tag":329,"props":11241,"children":11242},{"class":331,"line":386},[11243],{"type":17,"tag":329,"props":11244,"children":11245},{},[11246],{"type":23,"value":11247},"    \u003C\u002Fproperty>\n",{"type":17,"tag":329,"props":11249,"children":11250},{"class":331,"line":394},[11251],{"type":17,"tag":329,"props":11252,"children":11253},{},[11254],{"type":23,"value":11255},"    \u003Cproperty name=\"score\" value=\"24.1\"\u002F>\n",{"type":17,"tag":329,"props":11257,"children":11258},{"class":331,"line":403},[11259],{"type":17,"tag":329,"props":11260,"children":11261},{},[11262],{"type":23,"value":11106},{"type":17,"tag":31,"props":11264,"children":11265},{},[11266],{"type":17,"tag":35,"props":11267,"children":11268},{},[11269],{"type":23,"value":11270},"xml实体",{"type":17,"tag":319,"props":11272,"children":11274},{"className":1376,"code":11273,"language":1378,"meta":7,"style":7},"\u003C!-- 小于号在XML文档中用来定义标签的开始，不能随便使用 --> \n\u003C!-- 解决方案一：使用XML实体来代替 --> \n\u003Cproperty name=\"expression\" value=\"a &lt; b\"\u002F>\n",[11275],{"type":17,"tag":293,"props":11276,"children":11277},{"__ignoreMap":7},[11278,11286,11294],{"type":17,"tag":329,"props":11279,"children":11280},{"class":331,"line":332},[11281],{"type":17,"tag":329,"props":11282,"children":11283},{},[11284],{"type":23,"value":11285},"\u003C!-- 小于号在XML文档中用来定义标签的开始，不能随便使用 --> \n",{"type":17,"tag":329,"props":11287,"children":11288},{"class":331,"line":341},[11289],{"type":17,"tag":329,"props":11290,"children":11291},{},[11292],{"type":23,"value":11293},"\u003C!-- 解决方案一：使用XML实体来代替 --> \n",{"type":17,"tag":329,"props":11295,"children":11296},{"class":331,"line":350},[11297],{"type":17,"tag":329,"props":11298,"children":11299},{},[11300],{"type":23,"value":11301},"\u003Cproperty name=\"expression\" value=\"a &lt; b\"\u002F>\n",{"type":17,"tag":31,"props":11303,"children":11304},{},[11305],{"type":17,"tag":35,"props":11306,"children":11307},{},[11308],{"type":23,"value":11309},"CDATA节",{"type":17,"tag":319,"props":11311,"children":11313},{"className":1376,"code":11312,"language":1378,"meta":7,"style":7},"\u003Cproperty name=\"expression\"> \n\u003C!-- 解决方案二：使用CDATA节 --> \n\u003C!-- CDATA中的C代表Character，是文本、字符的含义，CDATA就表示纯文本数据 --> \n\u003C!-- XML解析器看到CDATA节就知道这里是纯文本，就不会当作XML标签或属性来解析 -->\n\u003C!-- 所以CDATA节中写什么符号都随意 --> \n        \u003Cvalue>\u003C![CDATA[a \u003C b]]>\u003C\u002Fvalue> \n\u003C\u002Fproperty>\n",[11314],{"type":17,"tag":293,"props":11315,"children":11316},{"__ignoreMap":7},[11317,11325,11333,11341,11349,11357,11365],{"type":17,"tag":329,"props":11318,"children":11319},{"class":331,"line":332},[11320],{"type":17,"tag":329,"props":11321,"children":11322},{},[11323],{"type":23,"value":11324},"\u003Cproperty name=\"expression\"> \n",{"type":17,"tag":329,"props":11326,"children":11327},{"class":331,"line":341},[11328],{"type":17,"tag":329,"props":11329,"children":11330},{},[11331],{"type":23,"value":11332},"\u003C!-- 解决方案二：使用CDATA节 --> \n",{"type":17,"tag":329,"props":11334,"children":11335},{"class":331,"line":350},[11336],{"type":17,"tag":329,"props":11337,"children":11338},{},[11339],{"type":23,"value":11340},"\u003C!-- CDATA中的C代表Character，是文本、字符的含义，CDATA就表示纯文本数据 --> \n",{"type":17,"tag":329,"props":11342,"children":11343},{"class":331,"line":359},[11344],{"type":17,"tag":329,"props":11345,"children":11346},{},[11347],{"type":23,"value":11348},"\u003C!-- XML解析器看到CDATA节就知道这里是纯文本，就不会当作XML标签或属性来解析 -->\n",{"type":17,"tag":329,"props":11350,"children":11351},{"class":331,"line":368},[11352],{"type":17,"tag":329,"props":11353,"children":11354},{},[11355],{"type":23,"value":11356},"\u003C!-- 所以CDATA节中写什么符号都随意 --> \n",{"type":17,"tag":329,"props":11358,"children":11359},{"class":331,"line":377},[11360],{"type":17,"tag":329,"props":11361,"children":11362},{},[11363],{"type":23,"value":11364},"        \u003Cvalue>\u003C![CDATA[a \u003C b]]>\u003C\u002Fvalue> \n",{"type":17,"tag":329,"props":11366,"children":11367},{"class":331,"line":386},[11368],{"type":17,"tag":329,"props":11369,"children":11370},{},[11371],{"type":23,"value":11372},"\u003C\u002Fproperty>\n",{"type":17,"tag":3272,"props":11374,"children":11376},{"id":11375},"_234-为类类型赋值",[11377],{"type":23,"value":11378},"2.3.4 为类类型赋值",{"type":17,"tag":57,"props":11380,"children":11381},{},[11382],{"type":17,"tag":86,"props":11383,"children":11384},{},[11385],{"type":23,"value":11386},"创建实体类：",{"type":17,"tag":319,"props":11388,"children":11390},{"className":321,"code":11389,"language":323,"meta":7,"style":7},"\u002F\u002F Student\npublic class Student {\n    private int sId;\n\n    private String sName;\n\n    private int age;\n\n    private String gender;\n\n    private double score;\n\n    private Clazz clazz;\n}\n\n\u002F\u002F Clazz\npublic class Clazz {\n    private Integer cid;\n\n    private String cname;\n}\n",[11391],{"type":17,"tag":293,"props":11392,"children":11393},{"__ignoreMap":7},[11394,11402,11410,11418,11425,11433,11440,11448,11455,11463,11470,11478,11485,11493,11500,11507,11515,11523,11531,11538,11546],{"type":17,"tag":329,"props":11395,"children":11396},{"class":331,"line":332},[11397],{"type":17,"tag":329,"props":11398,"children":11399},{},[11400],{"type":23,"value":11401},"\u002F\u002F Student\n",{"type":17,"tag":329,"props":11403,"children":11404},{"class":331,"line":341},[11405],{"type":17,"tag":329,"props":11406,"children":11407},{},[11408],{"type":23,"value":11409},"public class Student {\n",{"type":17,"tag":329,"props":11411,"children":11412},{"class":331,"line":350},[11413],{"type":17,"tag":329,"props":11414,"children":11415},{},[11416],{"type":23,"value":11417},"    private int sId;\n",{"type":17,"tag":329,"props":11419,"children":11420},{"class":331,"line":359},[11421],{"type":17,"tag":329,"props":11422,"children":11423},{"emptyLinePlaceholder":542},[11424],{"type":23,"value":545},{"type":17,"tag":329,"props":11426,"children":11427},{"class":331,"line":368},[11428],{"type":17,"tag":329,"props":11429,"children":11430},{},[11431],{"type":23,"value":11432},"    private String sName;\n",{"type":17,"tag":329,"props":11434,"children":11435},{"class":331,"line":377},[11436],{"type":17,"tag":329,"props":11437,"children":11438},{"emptyLinePlaceholder":542},[11439],{"type":23,"value":545},{"type":17,"tag":329,"props":11441,"children":11442},{"class":331,"line":386},[11443],{"type":17,"tag":329,"props":11444,"children":11445},{},[11446],{"type":23,"value":11447},"    private int age;\n",{"type":17,"tag":329,"props":11449,"children":11450},{"class":331,"line":394},[11451],{"type":17,"tag":329,"props":11452,"children":11453},{"emptyLinePlaceholder":542},[11454],{"type":23,"value":545},{"type":17,"tag":329,"props":11456,"children":11457},{"class":331,"line":403},[11458],{"type":17,"tag":329,"props":11459,"children":11460},{},[11461],{"type":23,"value":11462},"    private String gender;\n",{"type":17,"tag":329,"props":11464,"children":11465},{"class":331,"line":412},[11466],{"type":17,"tag":329,"props":11467,"children":11468},{"emptyLinePlaceholder":542},[11469],{"type":23,"value":545},{"type":17,"tag":329,"props":11471,"children":11472},{"class":331,"line":421},[11473],{"type":17,"tag":329,"props":11474,"children":11475},{},[11476],{"type":23,"value":11477},"    private double score;\n",{"type":17,"tag":329,"props":11479,"children":11480},{"class":331,"line":430},[11481],{"type":17,"tag":329,"props":11482,"children":11483},{"emptyLinePlaceholder":542},[11484],{"type":23,"value":545},{"type":17,"tag":329,"props":11486,"children":11487},{"class":331,"line":439},[11488],{"type":17,"tag":329,"props":11489,"children":11490},{},[11491],{"type":23,"value":11492},"    private Clazz clazz;\n",{"type":17,"tag":329,"props":11494,"children":11495},{"class":331,"line":447},[11496],{"type":17,"tag":329,"props":11497,"children":11498},{},[11499],{"type":23,"value":753},{"type":17,"tag":329,"props":11501,"children":11502},{"class":331,"line":456},[11503],{"type":17,"tag":329,"props":11504,"children":11505},{"emptyLinePlaceholder":542},[11506],{"type":23,"value":545},{"type":17,"tag":329,"props":11508,"children":11509},{"class":331,"line":465},[11510],{"type":17,"tag":329,"props":11511,"children":11512},{},[11513],{"type":23,"value":11514},"\u002F\u002F Clazz\n",{"type":17,"tag":329,"props":11516,"children":11517},{"class":331,"line":474},[11518],{"type":17,"tag":329,"props":11519,"children":11520},{},[11521],{"type":23,"value":11522},"public class Clazz {\n",{"type":17,"tag":329,"props":11524,"children":11525},{"class":331,"line":483},[11526],{"type":17,"tag":329,"props":11527,"children":11528},{},[11529],{"type":23,"value":11530},"    private Integer cid;\n",{"type":17,"tag":329,"props":11532,"children":11533},{"class":331,"line":667},[11534],{"type":17,"tag":329,"props":11535,"children":11536},{"emptyLinePlaceholder":542},[11537],{"type":23,"value":545},{"type":17,"tag":329,"props":11539,"children":11540},{"class":331,"line":676},[11541],{"type":17,"tag":329,"props":11542,"children":11543},{},[11544],{"type":23,"value":11545},"    private String cname;\n",{"type":17,"tag":329,"props":11547,"children":11548},{"class":331,"line":685},[11549],{"type":17,"tag":329,"props":11550,"children":11551},{},[11552],{"type":23,"value":753},{"type":17,"tag":57,"props":11554,"children":11555},{},[11556],{"type":17,"tag":86,"props":11557,"children":11558},{},[11559],{"type":23,"value":11560},"方式一：引用外部声明的bean",{"type":17,"tag":319,"props":11562,"children":11564},{"className":1376,"code":11563,"language":1378,"meta":7,"style":7},"\u003C!--为类属性赋值-->\n\u003Cbean id=\"studentThree\" class=\"com.wangkun.spring.pojo.Student\">\n    \u003Cproperty name=\"SId\" value=\"1111\"\u002F>\n    \u003Cproperty name=\"SName\" value=\"程浩\"\u002F>\n    \u003Cproperty name=\"age\" value=\"27\"\u002F>\n    \u003Cproperty name=\"gender\" value=\"男\"\u002F>\n    \u003Cproperty name=\"clazz\" ref=\"clazzOne\"\u002F>\n\u003C\u002Fbean>\n\n\u003Cbean id=\"clazzOne\" class=\"com.wangkun.spring.pojo.Clazz\">\n    \u003Cproperty name=\"cid\" value=\"1001\"\u002F>\n    \u003Cproperty name=\"cname\" value=\"年入百万班\"\u002F>\n\u003C\u002Fbean>\n",[11565],{"type":17,"tag":293,"props":11566,"children":11567},{"__ignoreMap":7},[11568,11576,11583,11591,11599,11607,11614,11622,11629,11636,11644,11652,11660],{"type":17,"tag":329,"props":11569,"children":11570},{"class":331,"line":332},[11571],{"type":17,"tag":329,"props":11572,"children":11573},{},[11574],{"type":23,"value":11575},"\u003C!--为类属性赋值-->\n",{"type":17,"tag":329,"props":11577,"children":11578},{"class":331,"line":341},[11579],{"type":17,"tag":329,"props":11580,"children":11581},{},[11582],{"type":23,"value":11127},{"type":17,"tag":329,"props":11584,"children":11585},{"class":331,"line":350},[11586],{"type":17,"tag":329,"props":11587,"children":11588},{},[11589],{"type":23,"value":11590},"    \u003Cproperty name=\"SId\" value=\"1111\"\u002F>\n",{"type":17,"tag":329,"props":11592,"children":11593},{"class":331,"line":359},[11594],{"type":17,"tag":329,"props":11595,"children":11596},{},[11597],{"type":23,"value":11598},"    \u003Cproperty name=\"SName\" value=\"程浩\"\u002F>\n",{"type":17,"tag":329,"props":11600,"children":11601},{"class":331,"line":368},[11602],{"type":17,"tag":329,"props":11603,"children":11604},{},[11605],{"type":23,"value":11606},"    \u003Cproperty name=\"age\" value=\"27\"\u002F>\n",{"type":17,"tag":329,"props":11608,"children":11609},{"class":331,"line":377},[11610],{"type":17,"tag":329,"props":11611,"children":11612},{},[11613],{"type":23,"value":11098},{"type":17,"tag":329,"props":11615,"children":11616},{"class":331,"line":386},[11617],{"type":17,"tag":329,"props":11618,"children":11619},{},[11620],{"type":23,"value":11621},"    \u003Cproperty name=\"clazz\" ref=\"clazzOne\"\u002F>\n",{"type":17,"tag":329,"props":11623,"children":11624},{"class":331,"line":394},[11625],{"type":17,"tag":329,"props":11626,"children":11627},{},[11628],{"type":23,"value":11106},{"type":17,"tag":329,"props":11630,"children":11631},{"class":331,"line":403},[11632],{"type":17,"tag":329,"props":11633,"children":11634},{"emptyLinePlaceholder":542},[11635],{"type":23,"value":545},{"type":17,"tag":329,"props":11637,"children":11638},{"class":331,"line":412},[11639],{"type":17,"tag":329,"props":11640,"children":11641},{},[11642],{"type":23,"value":11643},"\u003Cbean id=\"clazzOne\" class=\"com.wangkun.spring.pojo.Clazz\">\n",{"type":17,"tag":329,"props":11645,"children":11646},{"class":331,"line":421},[11647],{"type":17,"tag":329,"props":11648,"children":11649},{},[11650],{"type":23,"value":11651},"    \u003Cproperty name=\"cid\" value=\"1001\"\u002F>\n",{"type":17,"tag":329,"props":11653,"children":11654},{"class":331,"line":430},[11655],{"type":17,"tag":329,"props":11656,"children":11657},{},[11658],{"type":23,"value":11659},"    \u003Cproperty name=\"cname\" value=\"年入百万班\"\u002F>\n",{"type":17,"tag":329,"props":11661,"children":11662},{"class":331,"line":439},[11663],{"type":17,"tag":329,"props":11664,"children":11665},{},[11666],{"type":23,"value":11106},{"type":17,"tag":57,"props":11668,"children":11669},{},[11670],{"type":17,"tag":86,"props":11671,"children":11672},{},[11673],{"type":23,"value":11674},"方式二：内部bean",{"type":17,"tag":53,"props":11676,"children":11677},{},[11678],{"type":17,"tag":57,"props":11679,"children":11680},{},[11681],{"type":23,"value":11682},"内部bean，只能在当前bean的内部使用，无法通过ioc容器获取，所以设置内部bean的id也没有用",{"type":17,"tag":319,"props":11684,"children":11686},{"className":1376,"code":11685,"language":1378,"meta":7,"style":7},"\u003Cbean id=\"studentThree\" class=\"com.wangkun.spring.pojo.Student\">\n    \u003Cproperty name=\"SId\" value=\"1111\"\u002F>\n    \u003Cproperty name=\"SName\" value=\"程浩\"\u002F>\n    \u003Cproperty name=\"age\" value=\"27\"\u002F>\n    \u003Cproperty name=\"gender\" value=\"男\"\u002F>\n    \u003Cproperty name=\"clazz\">\n        \u003Cbean class=\"com.wangkun.spring.pojo.Clazz\">\n            \u003Cproperty name=\"cid\" value=\"1002\"\u002F>\n            \u003Cproperty name=\"cname\" value=\"键盘敲碎班\"\u002F>\n        \u003C\u002Fbean>\n    \u003C\u002Fproperty>\n\u003C\u002Fbean>\n",[11687],{"type":17,"tag":293,"props":11688,"children":11689},{"__ignoreMap":7},[11690,11697,11704,11711,11718,11725,11733,11741,11749,11757,11765,11772],{"type":17,"tag":329,"props":11691,"children":11692},{"class":331,"line":332},[11693],{"type":17,"tag":329,"props":11694,"children":11695},{},[11696],{"type":23,"value":11127},{"type":17,"tag":329,"props":11698,"children":11699},{"class":331,"line":341},[11700],{"type":17,"tag":329,"props":11701,"children":11702},{},[11703],{"type":23,"value":11590},{"type":17,"tag":329,"props":11705,"children":11706},{"class":331,"line":350},[11707],{"type":17,"tag":329,"props":11708,"children":11709},{},[11710],{"type":23,"value":11598},{"type":17,"tag":329,"props":11712,"children":11713},{"class":331,"line":359},[11714],{"type":17,"tag":329,"props":11715,"children":11716},{},[11717],{"type":23,"value":11606},{"type":17,"tag":329,"props":11719,"children":11720},{"class":331,"line":368},[11721],{"type":17,"tag":329,"props":11722,"children":11723},{},[11724],{"type":23,"value":11098},{"type":17,"tag":329,"props":11726,"children":11727},{"class":331,"line":377},[11728],{"type":17,"tag":329,"props":11729,"children":11730},{},[11731],{"type":23,"value":11732},"    \u003Cproperty name=\"clazz\">\n",{"type":17,"tag":329,"props":11734,"children":11735},{"class":331,"line":386},[11736],{"type":17,"tag":329,"props":11737,"children":11738},{},[11739],{"type":23,"value":11740},"        \u003Cbean class=\"com.wangkun.spring.pojo.Clazz\">\n",{"type":17,"tag":329,"props":11742,"children":11743},{"class":331,"line":394},[11744],{"type":17,"tag":329,"props":11745,"children":11746},{},[11747],{"type":23,"value":11748},"            \u003Cproperty name=\"cid\" value=\"1002\"\u002F>\n",{"type":17,"tag":329,"props":11750,"children":11751},{"class":331,"line":403},[11752],{"type":17,"tag":329,"props":11753,"children":11754},{},[11755],{"type":23,"value":11756},"            \u003Cproperty name=\"cname\" value=\"键盘敲碎班\"\u002F>\n",{"type":17,"tag":329,"props":11758,"children":11759},{"class":331,"line":412},[11760],{"type":17,"tag":329,"props":11761,"children":11762},{},[11763],{"type":23,"value":11764},"        \u003C\u002Fbean>\n",{"type":17,"tag":329,"props":11766,"children":11767},{"class":331,"line":421},[11768],{"type":17,"tag":329,"props":11769,"children":11770},{},[11771],{"type":23,"value":11247},{"type":17,"tag":329,"props":11773,"children":11774},{"class":331,"line":430},[11775],{"type":17,"tag":329,"props":11776,"children":11777},{},[11778],{"type":23,"value":11106},{"type":17,"tag":57,"props":11780,"children":11781},{},[11782],{"type":17,"tag":86,"props":11783,"children":11784},{},[11785],{"type":23,"value":11786},"方式三：级联",{"type":17,"tag":53,"props":11788,"children":11789},{},[11790],{"type":17,"tag":57,"props":11791,"children":11792},{},[11793],{"type":23,"value":11794},"级联的方式，要保证提前为clazz属性赋值或者实例化",{"type":17,"tag":319,"props":11796,"children":11798},{"className":321,"code":11797,"language":323,"meta":7,"style":7},"\u003Cbean id=\"studentThree\" class=\"com.wangkun.spring.pojo.Student\">\n    \u003Cproperty name=\"SId\" value=\"1111\"\u002F>\n    \u003Cproperty name=\"SName\" value=\"程浩\"\u002F>\n    \u003Cproperty name=\"age\" value=\"27\"\u002F>\n    \u003Cproperty name=\"gender\" value=\"男\"\u002F>\n    \u003Cproperty name=\"clazz\" ref=\"clazzOne\"\u002F>\n    \u003Cproperty name=\"clazz.cid\" value=\"1002\"\u002F>\n    \u003Cproperty name=\"clazz.cname\" value=\"前程无忧\"\u002F>\n\u003C\u002Fbean>\n\n\u003Cbean id=\"clazzOne\" class=\"com.wangkun.spring.pojo.Clazz\">\n    \u003Cproperty name=\"cid\" value=\"1001\"\u002F>\n    \u003Cproperty name=\"cname\" value=\"年入百万班\"\u002F>\n\u003C\u002Fbean>\n",[11799],{"type":17,"tag":293,"props":11800,"children":11801},{"__ignoreMap":7},[11802,11809,11816,11823,11830,11837,11844,11852,11860,11867,11874,11881,11888,11895],{"type":17,"tag":329,"props":11803,"children":11804},{"class":331,"line":332},[11805],{"type":17,"tag":329,"props":11806,"children":11807},{},[11808],{"type":23,"value":11127},{"type":17,"tag":329,"props":11810,"children":11811},{"class":331,"line":341},[11812],{"type":17,"tag":329,"props":11813,"children":11814},{},[11815],{"type":23,"value":11590},{"type":17,"tag":329,"props":11817,"children":11818},{"class":331,"line":350},[11819],{"type":17,"tag":329,"props":11820,"children":11821},{},[11822],{"type":23,"value":11598},{"type":17,"tag":329,"props":11824,"children":11825},{"class":331,"line":359},[11826],{"type":17,"tag":329,"props":11827,"children":11828},{},[11829],{"type":23,"value":11606},{"type":17,"tag":329,"props":11831,"children":11832},{"class":331,"line":368},[11833],{"type":17,"tag":329,"props":11834,"children":11835},{},[11836],{"type":23,"value":11098},{"type":17,"tag":329,"props":11838,"children":11839},{"class":331,"line":377},[11840],{"type":17,"tag":329,"props":11841,"children":11842},{},[11843],{"type":23,"value":11621},{"type":17,"tag":329,"props":11845,"children":11846},{"class":331,"line":386},[11847],{"type":17,"tag":329,"props":11848,"children":11849},{},[11850],{"type":23,"value":11851},"    \u003Cproperty name=\"clazz.cid\" value=\"1002\"\u002F>\n",{"type":17,"tag":329,"props":11853,"children":11854},{"class":331,"line":394},[11855],{"type":17,"tag":329,"props":11856,"children":11857},{},[11858],{"type":23,"value":11859},"    \u003Cproperty name=\"clazz.cname\" value=\"前程无忧\"\u002F>\n",{"type":17,"tag":329,"props":11861,"children":11862},{"class":331,"line":403},[11863],{"type":17,"tag":329,"props":11864,"children":11865},{},[11866],{"type":23,"value":11106},{"type":17,"tag":329,"props":11868,"children":11869},{"class":331,"line":412},[11870],{"type":17,"tag":329,"props":11871,"children":11872},{"emptyLinePlaceholder":542},[11873],{"type":23,"value":545},{"type":17,"tag":329,"props":11875,"children":11876},{"class":331,"line":421},[11877],{"type":17,"tag":329,"props":11878,"children":11879},{},[11880],{"type":23,"value":11643},{"type":17,"tag":329,"props":11882,"children":11883},{"class":331,"line":430},[11884],{"type":17,"tag":329,"props":11885,"children":11886},{},[11887],{"type":23,"value":11651},{"type":17,"tag":329,"props":11889,"children":11890},{"class":331,"line":439},[11891],{"type":17,"tag":329,"props":11892,"children":11893},{},[11894],{"type":23,"value":11659},{"type":17,"tag":329,"props":11896,"children":11897},{"class":331,"line":447},[11898],{"type":17,"tag":329,"props":11899,"children":11900},{},[11901],{"type":23,"value":11106},{"type":17,"tag":3272,"props":11903,"children":11905},{"id":11904},"_235-为数组类型赋值",[11906],{"type":23,"value":11907},"2.3.5 为数组类型赋值",{"type":17,"tag":57,"props":11909,"children":11910},{},[11911],{"type":17,"tag":86,"props":11912,"children":11913},{},[11914],{"type":23,"value":11915},"实体类：",{"type":17,"tag":319,"props":11917,"children":11919},{"className":321,"code":11918,"language":323,"meta":7,"style":7},"public class Student {\n    private int sId;\n\n    private String sName;\n\n    private int age;\n\n    private String gender;\n\n    private double score;\n\n    private Clazz clazz;\n\n    private String[] hobby;\n\n}\n",[11920],{"type":17,"tag":293,"props":11921,"children":11922},{"__ignoreMap":7},[11923,11930,11937,11944,11951,11958,11965,11972,11979,11986,11993,12000,12007,12014,12022,12029],{"type":17,"tag":329,"props":11924,"children":11925},{"class":331,"line":332},[11926],{"type":17,"tag":329,"props":11927,"children":11928},{},[11929],{"type":23,"value":11409},{"type":17,"tag":329,"props":11931,"children":11932},{"class":331,"line":341},[11933],{"type":17,"tag":329,"props":11934,"children":11935},{},[11936],{"type":23,"value":11417},{"type":17,"tag":329,"props":11938,"children":11939},{"class":331,"line":350},[11940],{"type":17,"tag":329,"props":11941,"children":11942},{"emptyLinePlaceholder":542},[11943],{"type":23,"value":545},{"type":17,"tag":329,"props":11945,"children":11946},{"class":331,"line":359},[11947],{"type":17,"tag":329,"props":11948,"children":11949},{},[11950],{"type":23,"value":11432},{"type":17,"tag":329,"props":11952,"children":11953},{"class":331,"line":368},[11954],{"type":17,"tag":329,"props":11955,"children":11956},{"emptyLinePlaceholder":542},[11957],{"type":23,"value":545},{"type":17,"tag":329,"props":11959,"children":11960},{"class":331,"line":377},[11961],{"type":17,"tag":329,"props":11962,"children":11963},{},[11964],{"type":23,"value":11447},{"type":17,"tag":329,"props":11966,"children":11967},{"class":331,"line":386},[11968],{"type":17,"tag":329,"props":11969,"children":11970},{"emptyLinePlaceholder":542},[11971],{"type":23,"value":545},{"type":17,"tag":329,"props":11973,"children":11974},{"class":331,"line":394},[11975],{"type":17,"tag":329,"props":11976,"children":11977},{},[11978],{"type":23,"value":11462},{"type":17,"tag":329,"props":11980,"children":11981},{"class":331,"line":403},[11982],{"type":17,"tag":329,"props":11983,"children":11984},{"emptyLinePlaceholder":542},[11985],{"type":23,"value":545},{"type":17,"tag":329,"props":11987,"children":11988},{"class":331,"line":412},[11989],{"type":17,"tag":329,"props":11990,"children":11991},{},[11992],{"type":23,"value":11477},{"type":17,"tag":329,"props":11994,"children":11995},{"class":331,"line":421},[11996],{"type":17,"tag":329,"props":11997,"children":11998},{"emptyLinePlaceholder":542},[11999],{"type":23,"value":545},{"type":17,"tag":329,"props":12001,"children":12002},{"class":331,"line":430},[12003],{"type":17,"tag":329,"props":12004,"children":12005},{},[12006],{"type":23,"value":11492},{"type":17,"tag":329,"props":12008,"children":12009},{"class":331,"line":439},[12010],{"type":17,"tag":329,"props":12011,"children":12012},{"emptyLinePlaceholder":542},[12013],{"type":23,"value":545},{"type":17,"tag":329,"props":12015,"children":12016},{"class":331,"line":447},[12017],{"type":17,"tag":329,"props":12018,"children":12019},{},[12020],{"type":23,"value":12021},"    private String[] hobby;\n",{"type":17,"tag":329,"props":12023,"children":12024},{"class":331,"line":456},[12025],{"type":17,"tag":329,"props":12026,"children":12027},{"emptyLinePlaceholder":542},[12028],{"type":23,"value":545},{"type":17,"tag":329,"props":12030,"children":12031},{"class":331,"line":465},[12032],{"type":17,"tag":329,"props":12033,"children":12034},{},[12035],{"type":23,"value":753},{"type":17,"tag":57,"props":12037,"children":12038},{},[12039],{"type":17,"tag":86,"props":12040,"children":12041},{},[12042],{"type":23,"value":12043},"配置bean：",{"type":17,"tag":319,"props":12045,"children":12047},{"className":1376,"code":12046,"language":1378,"meta":7,"style":7},"\u003Cbean id=\"studentThree\" class=\"com.wangkun.spring.pojo.Student\">\n    \u003Cproperty name=\"SId\" value=\"1111\"\u002F>\n    \u003Cproperty name=\"SName\" value=\"程浩\"\u002F>\n    \u003Cproperty name=\"age\" value=\"27\"\u002F>\n    \u003Cproperty name=\"gender\" value=\"男\"\u002F>\n    \u003Cproperty name=\"clazz\">\n        \u003Cbean class=\"com.wangkun.spring.pojo.Clazz\">\n            \u003Cproperty name=\"cid\" value=\"1002\"\u002F>\n            \u003Cproperty name=\"cname\" value=\"键盘敲碎班\"\u002F>\n        \u003C\u002Fbean>\n    \u003C\u002Fproperty>\n    \u003Cproperty name=\"hobby\">\n        \u003Carray>\n            \u003Cvalue>抽烟\u003C\u002Fvalue>\n            \u003Cvalue>喝酒\u003C\u002Fvalue>\n            \u003Cvalue>烫头\u003C\u002Fvalue>\n        \u003C\u002Farray>\n    \u003C\u002Fproperty>\n\u003C\u002Fbean>\n",[12048],{"type":17,"tag":293,"props":12049,"children":12050},{"__ignoreMap":7},[12051,12058,12065,12072,12079,12086,12093,12100,12107,12114,12121,12128,12136,12144,12152,12160,12168,12176,12183],{"type":17,"tag":329,"props":12052,"children":12053},{"class":331,"line":332},[12054],{"type":17,"tag":329,"props":12055,"children":12056},{},[12057],{"type":23,"value":11127},{"type":17,"tag":329,"props":12059,"children":12060},{"class":331,"line":341},[12061],{"type":17,"tag":329,"props":12062,"children":12063},{},[12064],{"type":23,"value":11590},{"type":17,"tag":329,"props":12066,"children":12067},{"class":331,"line":350},[12068],{"type":17,"tag":329,"props":12069,"children":12070},{},[12071],{"type":23,"value":11598},{"type":17,"tag":329,"props":12073,"children":12074},{"class":331,"line":359},[12075],{"type":17,"tag":329,"props":12076,"children":12077},{},[12078],{"type":23,"value":11606},{"type":17,"tag":329,"props":12080,"children":12081},{"class":331,"line":368},[12082],{"type":17,"tag":329,"props":12083,"children":12084},{},[12085],{"type":23,"value":11098},{"type":17,"tag":329,"props":12087,"children":12088},{"class":331,"line":377},[12089],{"type":17,"tag":329,"props":12090,"children":12091},{},[12092],{"type":23,"value":11732},{"type":17,"tag":329,"props":12094,"children":12095},{"class":331,"line":386},[12096],{"type":17,"tag":329,"props":12097,"children":12098},{},[12099],{"type":23,"value":11740},{"type":17,"tag":329,"props":12101,"children":12102},{"class":331,"line":394},[12103],{"type":17,"tag":329,"props":12104,"children":12105},{},[12106],{"type":23,"value":11748},{"type":17,"tag":329,"props":12108,"children":12109},{"class":331,"line":403},[12110],{"type":17,"tag":329,"props":12111,"children":12112},{},[12113],{"type":23,"value":11756},{"type":17,"tag":329,"props":12115,"children":12116},{"class":331,"line":412},[12117],{"type":17,"tag":329,"props":12118,"children":12119},{},[12120],{"type":23,"value":11764},{"type":17,"tag":329,"props":12122,"children":12123},{"class":331,"line":421},[12124],{"type":17,"tag":329,"props":12125,"children":12126},{},[12127],{"type":23,"value":11247},{"type":17,"tag":329,"props":12129,"children":12130},{"class":331,"line":430},[12131],{"type":17,"tag":329,"props":12132,"children":12133},{},[12134],{"type":23,"value":12135},"    \u003Cproperty name=\"hobby\">\n",{"type":17,"tag":329,"props":12137,"children":12138},{"class":331,"line":439},[12139],{"type":17,"tag":329,"props":12140,"children":12141},{},[12142],{"type":23,"value":12143},"        \u003Carray>\n",{"type":17,"tag":329,"props":12145,"children":12146},{"class":331,"line":447},[12147],{"type":17,"tag":329,"props":12148,"children":12149},{},[12150],{"type":23,"value":12151},"            \u003Cvalue>抽烟\u003C\u002Fvalue>\n",{"type":17,"tag":329,"props":12153,"children":12154},{"class":331,"line":456},[12155],{"type":17,"tag":329,"props":12156,"children":12157},{},[12158],{"type":23,"value":12159},"            \u003Cvalue>喝酒\u003C\u002Fvalue>\n",{"type":17,"tag":329,"props":12161,"children":12162},{"class":331,"line":465},[12163],{"type":17,"tag":329,"props":12164,"children":12165},{},[12166],{"type":23,"value":12167},"            \u003Cvalue>烫头\u003C\u002Fvalue>\n",{"type":17,"tag":329,"props":12169,"children":12170},{"class":331,"line":474},[12171],{"type":17,"tag":329,"props":12172,"children":12173},{},[12174],{"type":23,"value":12175},"        \u003C\u002Farray>\n",{"type":17,"tag":329,"props":12177,"children":12178},{"class":331,"line":483},[12179],{"type":17,"tag":329,"props":12180,"children":12181},{},[12182],{"type":23,"value":11247},{"type":17,"tag":329,"props":12184,"children":12185},{"class":331,"line":667},[12186],{"type":17,"tag":329,"props":12187,"children":12188},{},[12189],{"type":23,"value":11106},{"type":17,"tag":3272,"props":12191,"children":12193},{"id":12192},"_236-为集合类型赋值",[12194],{"type":23,"value":12195},"2.3.6 为集合类型赋值",{"type":17,"tag":57,"props":12197,"children":12198},{},[12199],{"type":17,"tag":86,"props":12200,"children":12201},{},[12202],{"type":23,"value":11915},{"type":17,"tag":319,"props":12204,"children":12206},{"className":321,"code":12205,"language":323,"meta":7,"style":7},"public class Clazz {\n    private Integer cid;\n\n    private String cname;\n\n    private List\u003CStudent> students;\n}\n",[12207],{"type":17,"tag":293,"props":12208,"children":12209},{"__ignoreMap":7},[12210,12217,12224,12231,12238,12245,12253],{"type":17,"tag":329,"props":12211,"children":12212},{"class":331,"line":332},[12213],{"type":17,"tag":329,"props":12214,"children":12215},{},[12216],{"type":23,"value":11522},{"type":17,"tag":329,"props":12218,"children":12219},{"class":331,"line":341},[12220],{"type":17,"tag":329,"props":12221,"children":12222},{},[12223],{"type":23,"value":11530},{"type":17,"tag":329,"props":12225,"children":12226},{"class":331,"line":350},[12227],{"type":17,"tag":329,"props":12228,"children":12229},{"emptyLinePlaceholder":542},[12230],{"type":23,"value":545},{"type":17,"tag":329,"props":12232,"children":12233},{"class":331,"line":359},[12234],{"type":17,"tag":329,"props":12235,"children":12236},{},[12237],{"type":23,"value":11545},{"type":17,"tag":329,"props":12239,"children":12240},{"class":331,"line":368},[12241],{"type":17,"tag":329,"props":12242,"children":12243},{"emptyLinePlaceholder":542},[12244],{"type":23,"value":545},{"type":17,"tag":329,"props":12246,"children":12247},{"class":331,"line":377},[12248],{"type":17,"tag":329,"props":12249,"children":12250},{},[12251],{"type":23,"value":12252},"    private List\u003CStudent> students;\n",{"type":17,"tag":329,"props":12254,"children":12255},{"class":331,"line":386},[12256],{"type":17,"tag":329,"props":12257,"children":12258},{},[12259],{"type":23,"value":753},{"type":17,"tag":57,"props":12261,"children":12262},{},[12263],{"type":17,"tag":86,"props":12264,"children":12265},{},[12266],{"type":23,"value":12267},"方式一：内部list标签",{"type":17,"tag":319,"props":12269,"children":12271},{"className":1376,"code":12270,"language":1378,"meta":7,"style":7},"\u003Cbean id=\"studentTwo\" class=\"com.wangkun.spring.pojo.Student\">\n    \u003Cproperty name=\"SId\" value=\"1\"\u002F>\n    \u003Cproperty name=\"SName\" value=\"张三\"\u002F>\n    \u003Cproperty name=\"age\" value=\"12\"\u002F>\n    \u003Cproperty name=\"gender\">\n        \u003Cnull\u002F>\n    \u003C\u002Fproperty>\n    \u003Cproperty name=\"score\" value=\"24.1\"\u002F>\n\u003C\u002Fbean>\n\u003Cbean id=\"clazzTwo\" class=\"com.wangkun.spring.pojo.Clazz\">\n    \u003Cproperty name=\"cid\" value=\"1003\"\u002F>\n    \u003Cproperty name=\"cname\" value=\"1003\"\u002F>\n    \u003Cproperty name=\"students\">\n        \u003Clist>\n            \u003Cref bean=\"studentOne\"\u002F>\n            \u003Cref bean=\"studentTwo\"\u002F>\n            \u003Cref bean=\"studentThree\"\u002F>\n        \u003C\u002Flist>\n    \u003C\u002Fproperty>\n\u003C\u002Fbean>\n",[12272],{"type":17,"tag":293,"props":12273,"children":12274},{"__ignoreMap":7},[12275,12282,12289,12296,12303,12310,12317,12324,12331,12338,12346,12354,12362,12370,12378,12386,12394,12402,12410,12417],{"type":17,"tag":329,"props":12276,"children":12277},{"class":331,"line":332},[12278],{"type":17,"tag":329,"props":12279,"children":12280},{},[12281],{"type":23,"value":11066},{"type":17,"tag":329,"props":12283,"children":12284},{"class":331,"line":341},[12285],{"type":17,"tag":329,"props":12286,"children":12287},{},[12288],{"type":23,"value":11074},{"type":17,"tag":329,"props":12290,"children":12291},{"class":331,"line":350},[12292],{"type":17,"tag":329,"props":12293,"children":12294},{},[12295],{"type":23,"value":11082},{"type":17,"tag":329,"props":12297,"children":12298},{"class":331,"line":359},[12299],{"type":17,"tag":329,"props":12300,"children":12301},{},[12302],{"type":23,"value":11090},{"type":17,"tag":329,"props":12304,"children":12305},{"class":331,"line":368},[12306],{"type":17,"tag":329,"props":12307,"children":12308},{},[12309],{"type":23,"value":11231},{"type":17,"tag":329,"props":12311,"children":12312},{"class":331,"line":377},[12313],{"type":17,"tag":329,"props":12314,"children":12315},{},[12316],{"type":23,"value":11239},{"type":17,"tag":329,"props":12318,"children":12319},{"class":331,"line":386},[12320],{"type":17,"tag":329,"props":12321,"children":12322},{},[12323],{"type":23,"value":11247},{"type":17,"tag":329,"props":12325,"children":12326},{"class":331,"line":394},[12327],{"type":17,"tag":329,"props":12328,"children":12329},{},[12330],{"type":23,"value":11255},{"type":17,"tag":329,"props":12332,"children":12333},{"class":331,"line":403},[12334],{"type":17,"tag":329,"props":12335,"children":12336},{},[12337],{"type":23,"value":11106},{"type":17,"tag":329,"props":12339,"children":12340},{"class":331,"line":412},[12341],{"type":17,"tag":329,"props":12342,"children":12343},{},[12344],{"type":23,"value":12345},"\u003Cbean id=\"clazzTwo\" class=\"com.wangkun.spring.pojo.Clazz\">\n",{"type":17,"tag":329,"props":12347,"children":12348},{"class":331,"line":421},[12349],{"type":17,"tag":329,"props":12350,"children":12351},{},[12352],{"type":23,"value":12353},"    \u003Cproperty name=\"cid\" value=\"1003\"\u002F>\n",{"type":17,"tag":329,"props":12355,"children":12356},{"class":331,"line":430},[12357],{"type":17,"tag":329,"props":12358,"children":12359},{},[12360],{"type":23,"value":12361},"    \u003Cproperty name=\"cname\" value=\"1003\"\u002F>\n",{"type":17,"tag":329,"props":12363,"children":12364},{"class":331,"line":439},[12365],{"type":17,"tag":329,"props":12366,"children":12367},{},[12368],{"type":23,"value":12369},"    \u003Cproperty name=\"students\">\n",{"type":17,"tag":329,"props":12371,"children":12372},{"class":331,"line":447},[12373],{"type":17,"tag":329,"props":12374,"children":12375},{},[12376],{"type":23,"value":12377},"        \u003Clist>\n",{"type":17,"tag":329,"props":12379,"children":12380},{"class":331,"line":456},[12381],{"type":17,"tag":329,"props":12382,"children":12383},{},[12384],{"type":23,"value":12385},"            \u003Cref bean=\"studentOne\"\u002F>\n",{"type":17,"tag":329,"props":12387,"children":12388},{"class":331,"line":465},[12389],{"type":17,"tag":329,"props":12390,"children":12391},{},[12392],{"type":23,"value":12393},"            \u003Cref bean=\"studentTwo\"\u002F>\n",{"type":17,"tag":329,"props":12395,"children":12396},{"class":331,"line":474},[12397],{"type":17,"tag":329,"props":12398,"children":12399},{},[12400],{"type":23,"value":12401},"            \u003Cref bean=\"studentThree\"\u002F>\n",{"type":17,"tag":329,"props":12403,"children":12404},{"class":331,"line":483},[12405],{"type":17,"tag":329,"props":12406,"children":12407},{},[12408],{"type":23,"value":12409},"        \u003C\u002Flist>\n",{"type":17,"tag":329,"props":12411,"children":12412},{"class":331,"line":667},[12413],{"type":17,"tag":329,"props":12414,"children":12415},{},[12416],{"type":23,"value":11247},{"type":17,"tag":329,"props":12418,"children":12419},{"class":331,"line":676},[12420],{"type":17,"tag":329,"props":12421,"children":12422},{},[12423],{"type":23,"value":11106},{"type":17,"tag":57,"props":12425,"children":12426},{},[12427],{"type":17,"tag":86,"props":12428,"children":12429},{},[12430],{"type":23,"value":12431},"方式二：配置集合类型的bean(util:list)",{"type":17,"tag":319,"props":12433,"children":12435},{"className":1376,"code":12434,"language":1378,"meta":7,"style":7},"\u003Cbean id=\"clazzThree\" class=\"com.wangkun.spring.pojo.Clazz\">\n    \u003Cproperty name=\"cid\" value=\"5001\"\u002F>\n    \u003Cproperty name=\"cname\" value=\"键盘敲烂班\"\u002F>\n    \u003Cproperty name=\"students\" ref=\"studentList\"\u002F>\n\u003C\u002Fbean>\n\n\u003Cutil:list id=\"studentList\">\n    \u003Cref bean=\"studentOne\"\u002F>\n    \u003Cref bean=\"studentTwo\"\u002F>\n    \u003Cref bean=\"studentThree\"\u002F>\n\u003C\u002Futil:list>\n",[12436],{"type":17,"tag":293,"props":12437,"children":12438},{"__ignoreMap":7},[12439,12447,12455,12463,12471,12478,12485,12493,12501,12509,12517],{"type":17,"tag":329,"props":12440,"children":12441},{"class":331,"line":332},[12442],{"type":17,"tag":329,"props":12443,"children":12444},{},[12445],{"type":23,"value":12446},"\u003Cbean id=\"clazzThree\" class=\"com.wangkun.spring.pojo.Clazz\">\n",{"type":17,"tag":329,"props":12448,"children":12449},{"class":331,"line":341},[12450],{"type":17,"tag":329,"props":12451,"children":12452},{},[12453],{"type":23,"value":12454},"    \u003Cproperty name=\"cid\" value=\"5001\"\u002F>\n",{"type":17,"tag":329,"props":12456,"children":12457},{"class":331,"line":350},[12458],{"type":17,"tag":329,"props":12459,"children":12460},{},[12461],{"type":23,"value":12462},"    \u003Cproperty name=\"cname\" value=\"键盘敲烂班\"\u002F>\n",{"type":17,"tag":329,"props":12464,"children":12465},{"class":331,"line":359},[12466],{"type":17,"tag":329,"props":12467,"children":12468},{},[12469],{"type":23,"value":12470},"    \u003Cproperty name=\"students\" ref=\"studentList\"\u002F>\n",{"type":17,"tag":329,"props":12472,"children":12473},{"class":331,"line":368},[12474],{"type":17,"tag":329,"props":12475,"children":12476},{},[12477],{"type":23,"value":11106},{"type":17,"tag":329,"props":12479,"children":12480},{"class":331,"line":377},[12481],{"type":17,"tag":329,"props":12482,"children":12483},{"emptyLinePlaceholder":542},[12484],{"type":23,"value":545},{"type":17,"tag":329,"props":12486,"children":12487},{"class":331,"line":386},[12488],{"type":17,"tag":329,"props":12489,"children":12490},{},[12491],{"type":23,"value":12492},"\u003Cutil:list id=\"studentList\">\n",{"type":17,"tag":329,"props":12494,"children":12495},{"class":331,"line":394},[12496],{"type":17,"tag":329,"props":12497,"children":12498},{},[12499],{"type":23,"value":12500},"    \u003Cref bean=\"studentOne\"\u002F>\n",{"type":17,"tag":329,"props":12502,"children":12503},{"class":331,"line":403},[12504],{"type":17,"tag":329,"props":12505,"children":12506},{},[12507],{"type":23,"value":12508},"    \u003Cref bean=\"studentTwo\"\u002F>\n",{"type":17,"tag":329,"props":12510,"children":12511},{"class":331,"line":412},[12512],{"type":17,"tag":329,"props":12513,"children":12514},{},[12515],{"type":23,"value":12516},"    \u003Cref bean=\"studentThree\"\u002F>\n",{"type":17,"tag":329,"props":12518,"children":12519},{"class":331,"line":421},[12520],{"type":17,"tag":329,"props":12521,"children":12522},{},[12523],{"type":23,"value":12524},"\u003C\u002Futil:list>\n",{"type":17,"tag":3272,"props":12526,"children":12528},{"id":12527},"_237-为map类型赋值",[12529],{"type":23,"value":12530},"2.3.7 为Map类型赋值",{"type":17,"tag":57,"props":12532,"children":12533},{},[12534],{"type":17,"tag":86,"props":12535,"children":12536},{},[12537],{"type":23,"value":12538},"方式一：内部map标签",{"type":17,"tag":319,"props":12540,"children":12542},{"className":1376,"code":12541,"language":1378,"meta":7,"style":7},"\u003Cbean id=\"studentThree\" class=\"com.wangkun.spring.pojo.Student\">\n    \u003Cproperty name=\"sId\" value=\"1111\"\u002F>\n    \u003Cproperty name=\"sName\" value=\"程浩\"\u002F>\n    \u003Cproperty name=\"age\" value=\"27\"\u002F>\n    \u003Cproperty name=\"gender\" value=\"男\"\u002F>\n    \u003Cproperty name=\"clazz\">\n        \u003Cbean class=\"com.wangkun.spring.pojo.Clazz\">\n            \u003Cproperty name=\"cid\" value=\"1002\"\u002F>\n            \u003Cproperty name=\"cname\" value=\"键盘敲碎班\"\u002F>\n        \u003C\u002Fbean>\n    \u003C\u002Fproperty>\n    \u003Cproperty name=\"hobby\">\n        \u003Carray>\n            \u003Cvalue>抽烟\u003C\u002Fvalue>\n            \u003Cvalue>喝酒\u003C\u002Fvalue>\n            \u003Cvalue>烫头\u003C\u002Fvalue>\n        \u003C\u002Farray>\n    \u003C\u002Fproperty>\n    \u003C!-- 通过Map标签引入teacher -->\n    \u003Cproperty name=\"teacherMap\">\n        \u003Cmap>\n            \u003Centry key=\"语文老师\" value-ref=\"teacherOne\"\u002F>\n            \u003Centry key=\"数学老师\" value-ref=\"teacherTwo\"\u002F>\n        \u003C\u002Fmap>\n    \u003C\u002Fproperty>\n\u003C\u002Fbean>\n\n\u003C!--创建teavher的bean-->\n\u003Cbean id=\"teacherOne\" class=\"com.wangkun.spring.pojo.Teacher\">\n    \u003Cproperty name=\"tid\" value=\"1001\"\u002F>\n    \u003Cproperty name=\"tname\" value=\"张三\"\u002F>\n\u003C\u002Fbean>\n\u003Cbean id=\"teacherTwo\" class=\"com.wangkun.spring.pojo.Teacher\">\n    \u003Cproperty name=\"tid\" value=\"1002\"\u002F>\n    \u003Cproperty name=\"tname\" value=\"李四\"\u002F>\n\u003C\u002Fbean>\n",[12543],{"type":17,"tag":293,"props":12544,"children":12545},{"__ignoreMap":7},[12546,12553,12561,12569,12576,12583,12590,12597,12604,12611,12618,12625,12632,12639,12646,12653,12660,12667,12674,12682,12690,12698,12706,12714,12722,12729,12736,12743,12751,12759,12767,12775,12782,12790,12798,12806],{"type":17,"tag":329,"props":12547,"children":12548},{"class":331,"line":332},[12549],{"type":17,"tag":329,"props":12550,"children":12551},{},[12552],{"type":23,"value":11127},{"type":17,"tag":329,"props":12554,"children":12555},{"class":331,"line":341},[12556],{"type":17,"tag":329,"props":12557,"children":12558},{},[12559],{"type":23,"value":12560},"    \u003Cproperty name=\"sId\" value=\"1111\"\u002F>\n",{"type":17,"tag":329,"props":12562,"children":12563},{"class":331,"line":350},[12564],{"type":17,"tag":329,"props":12565,"children":12566},{},[12567],{"type":23,"value":12568},"    \u003Cproperty name=\"sName\" value=\"程浩\"\u002F>\n",{"type":17,"tag":329,"props":12570,"children":12571},{"class":331,"line":359},[12572],{"type":17,"tag":329,"props":12573,"children":12574},{},[12575],{"type":23,"value":11606},{"type":17,"tag":329,"props":12577,"children":12578},{"class":331,"line":368},[12579],{"type":17,"tag":329,"props":12580,"children":12581},{},[12582],{"type":23,"value":11098},{"type":17,"tag":329,"props":12584,"children":12585},{"class":331,"line":377},[12586],{"type":17,"tag":329,"props":12587,"children":12588},{},[12589],{"type":23,"value":11732},{"type":17,"tag":329,"props":12591,"children":12592},{"class":331,"line":386},[12593],{"type":17,"tag":329,"props":12594,"children":12595},{},[12596],{"type":23,"value":11740},{"type":17,"tag":329,"props":12598,"children":12599},{"class":331,"line":394},[12600],{"type":17,"tag":329,"props":12601,"children":12602},{},[12603],{"type":23,"value":11748},{"type":17,"tag":329,"props":12605,"children":12606},{"class":331,"line":403},[12607],{"type":17,"tag":329,"props":12608,"children":12609},{},[12610],{"type":23,"value":11756},{"type":17,"tag":329,"props":12612,"children":12613},{"class":331,"line":412},[12614],{"type":17,"tag":329,"props":12615,"children":12616},{},[12617],{"type":23,"value":11764},{"type":17,"tag":329,"props":12619,"children":12620},{"class":331,"line":421},[12621],{"type":17,"tag":329,"props":12622,"children":12623},{},[12624],{"type":23,"value":11247},{"type":17,"tag":329,"props":12626,"children":12627},{"class":331,"line":430},[12628],{"type":17,"tag":329,"props":12629,"children":12630},{},[12631],{"type":23,"value":12135},{"type":17,"tag":329,"props":12633,"children":12634},{"class":331,"line":439},[12635],{"type":17,"tag":329,"props":12636,"children":12637},{},[12638],{"type":23,"value":12143},{"type":17,"tag":329,"props":12640,"children":12641},{"class":331,"line":447},[12642],{"type":17,"tag":329,"props":12643,"children":12644},{},[12645],{"type":23,"value":12151},{"type":17,"tag":329,"props":12647,"children":12648},{"class":331,"line":456},[12649],{"type":17,"tag":329,"props":12650,"children":12651},{},[12652],{"type":23,"value":12159},{"type":17,"tag":329,"props":12654,"children":12655},{"class":331,"line":465},[12656],{"type":17,"tag":329,"props":12657,"children":12658},{},[12659],{"type":23,"value":12167},{"type":17,"tag":329,"props":12661,"children":12662},{"class":331,"line":474},[12663],{"type":17,"tag":329,"props":12664,"children":12665},{},[12666],{"type":23,"value":12175},{"type":17,"tag":329,"props":12668,"children":12669},{"class":331,"line":483},[12670],{"type":17,"tag":329,"props":12671,"children":12672},{},[12673],{"type":23,"value":11247},{"type":17,"tag":329,"props":12675,"children":12676},{"class":331,"line":667},[12677],{"type":17,"tag":329,"props":12678,"children":12679},{},[12680],{"type":23,"value":12681},"    \u003C!-- 通过Map标签引入teacher -->\n",{"type":17,"tag":329,"props":12683,"children":12684},{"class":331,"line":676},[12685],{"type":17,"tag":329,"props":12686,"children":12687},{},[12688],{"type":23,"value":12689},"    \u003Cproperty name=\"teacherMap\">\n",{"type":17,"tag":329,"props":12691,"children":12692},{"class":331,"line":685},[12693],{"type":17,"tag":329,"props":12694,"children":12695},{},[12696],{"type":23,"value":12697},"        \u003Cmap>\n",{"type":17,"tag":329,"props":12699,"children":12700},{"class":331,"line":694},[12701],{"type":17,"tag":329,"props":12702,"children":12703},{},[12704],{"type":23,"value":12705},"            \u003Centry key=\"语文老师\" value-ref=\"teacherOne\"\u002F>\n",{"type":17,"tag":329,"props":12707,"children":12708},{"class":331,"line":1213},[12709],{"type":17,"tag":329,"props":12710,"children":12711},{},[12712],{"type":23,"value":12713},"            \u003Centry key=\"数学老师\" value-ref=\"teacherTwo\"\u002F>\n",{"type":17,"tag":329,"props":12715,"children":12716},{"class":331,"line":1222},[12717],{"type":17,"tag":329,"props":12718,"children":12719},{},[12720],{"type":23,"value":12721},"        \u003C\u002Fmap>\n",{"type":17,"tag":329,"props":12723,"children":12724},{"class":331,"line":1231},[12725],{"type":17,"tag":329,"props":12726,"children":12727},{},[12728],{"type":23,"value":11247},{"type":17,"tag":329,"props":12730,"children":12731},{"class":331,"line":1240},[12732],{"type":17,"tag":329,"props":12733,"children":12734},{},[12735],{"type":23,"value":11106},{"type":17,"tag":329,"props":12737,"children":12738},{"class":331,"line":1248},[12739],{"type":17,"tag":329,"props":12740,"children":12741},{"emptyLinePlaceholder":542},[12742],{"type":23,"value":545},{"type":17,"tag":329,"props":12744,"children":12745},{"class":331,"line":1257},[12746],{"type":17,"tag":329,"props":12747,"children":12748},{},[12749],{"type":23,"value":12750},"\u003C!--创建teavher的bean-->\n",{"type":17,"tag":329,"props":12752,"children":12753},{"class":331,"line":1266},[12754],{"type":17,"tag":329,"props":12755,"children":12756},{},[12757],{"type":23,"value":12758},"\u003Cbean id=\"teacherOne\" class=\"com.wangkun.spring.pojo.Teacher\">\n",{"type":17,"tag":329,"props":12760,"children":12761},{"class":331,"line":1275},[12762],{"type":17,"tag":329,"props":12763,"children":12764},{},[12765],{"type":23,"value":12766},"    \u003Cproperty name=\"tid\" value=\"1001\"\u002F>\n",{"type":17,"tag":329,"props":12768,"children":12769},{"class":331,"line":1284},[12770],{"type":17,"tag":329,"props":12771,"children":12772},{},[12773],{"type":23,"value":12774},"    \u003Cproperty name=\"tname\" value=\"张三\"\u002F>\n",{"type":17,"tag":329,"props":12776,"children":12777},{"class":331,"line":1292},[12778],{"type":17,"tag":329,"props":12779,"children":12780},{},[12781],{"type":23,"value":11106},{"type":17,"tag":329,"props":12783,"children":12784},{"class":331,"line":1301},[12785],{"type":17,"tag":329,"props":12786,"children":12787},{},[12788],{"type":23,"value":12789},"\u003Cbean id=\"teacherTwo\" class=\"com.wangkun.spring.pojo.Teacher\">\n",{"type":17,"tag":329,"props":12791,"children":12792},{"class":331,"line":1310},[12793],{"type":17,"tag":329,"props":12794,"children":12795},{},[12796],{"type":23,"value":12797},"    \u003Cproperty name=\"tid\" value=\"1002\"\u002F>\n",{"type":17,"tag":329,"props":12799,"children":12800},{"class":331,"line":1319},[12801],{"type":17,"tag":329,"props":12802,"children":12803},{},[12804],{"type":23,"value":12805},"    \u003Cproperty name=\"tname\" value=\"李四\"\u002F>\n",{"type":17,"tag":329,"props":12807,"children":12808},{"class":331,"line":1328},[12809],{"type":17,"tag":329,"props":12810,"children":12811},{},[12812],{"type":23,"value":11106},{"type":17,"tag":57,"props":12814,"children":12815},{},[12816],{"type":17,"tag":86,"props":12817,"children":12818},{},[12819],{"type":23,"value":12820},"方式二：配置Map类型的bean(util:map)",{"type":17,"tag":319,"props":12822,"children":12824},{"className":1376,"code":12823,"language":1378,"meta":7,"style":7},"\u003Cbean id=\"studentThree\" class=\"com.wangkun.spring.pojo.Student\">\n    \u003Cproperty name=\"sId\" value=\"1111\"\u002F>\n    \u003Cproperty name=\"sName\" value=\"程浩\"\u002F>\n    \u003Cproperty name=\"age\" value=\"27\"\u002F>\n    \u003Cproperty name=\"gender\" value=\"男\"\u002F>\n    \u003Cproperty name=\"clazz\">\n        \u003Cbean class=\"com.wangkun.spring.pojo.Clazz\">\n            \u003Cproperty name=\"cid\" value=\"1002\"\u002F>\n            \u003Cproperty name=\"cname\" value=\"键盘敲碎班\"\u002F>\n        \u003C\u002Fbean>\n    \u003C\u002Fproperty>\n    \u003Cproperty name=\"hobby\">\n        \u003Carray>\n            \u003Cvalue>抽烟\u003C\u002Fvalue>\n            \u003Cvalue>喝酒\u003C\u002Fvalue>\n            \u003Cvalue>烫头\u003C\u002Fvalue>\n        \u003C\u002Farray>\n    \u003C\u002Fproperty>\n   \u003Cproperty name=\"teacherMap\" ref=\"teacherMap\"\u002F>\n\u003C\u002Fbean>\n\n\u003Cutil:map id=\"teacherMap\">\n    \u003Centry key=\"语文老师\" value-ref=\"teacherOne\"\u002F>\n    \u003Centry key=\"数学老师\" value-ref=\"teacherTwo\"\u002F>\n\u003C\u002Futil:map>\n\n\u003Cbean id=\"teacherOne\" class=\"com.wangkun.spring.pojo.Teacher\">\n    \u003Cproperty name=\"tid\" value=\"1001\"\u002F>\n    \u003Cproperty name=\"tname\" value=\"张三\"\u002F>\n\u003C\u002Fbean>\n\n\u003Cbean id=\"teacherTwo\" class=\"com.wangkun.spring.pojo.Teacher\">\n    \u003Cproperty name=\"tid\" value=\"1002\"\u002F>\n    \u003Cproperty name=\"tname\" value=\"李四\"\u002F>\n\u003C\u002Fbean>\n",[12825],{"type":17,"tag":293,"props":12826,"children":12827},{"__ignoreMap":7},[12828,12835,12842,12849,12856,12863,12870,12877,12884,12891,12898,12905,12912,12919,12926,12933,12940,12947,12954,12962,12969,12976,12984,12992,13000,13008,13015,13022,13029,13036,13043,13050,13057,13064,13071],{"type":17,"tag":329,"props":12829,"children":12830},{"class":331,"line":332},[12831],{"type":17,"tag":329,"props":12832,"children":12833},{},[12834],{"type":23,"value":11127},{"type":17,"tag":329,"props":12836,"children":12837},{"class":331,"line":341},[12838],{"type":17,"tag":329,"props":12839,"children":12840},{},[12841],{"type":23,"value":12560},{"type":17,"tag":329,"props":12843,"children":12844},{"class":331,"line":350},[12845],{"type":17,"tag":329,"props":12846,"children":12847},{},[12848],{"type":23,"value":12568},{"type":17,"tag":329,"props":12850,"children":12851},{"class":331,"line":359},[12852],{"type":17,"tag":329,"props":12853,"children":12854},{},[12855],{"type":23,"value":11606},{"type":17,"tag":329,"props":12857,"children":12858},{"class":331,"line":368},[12859],{"type":17,"tag":329,"props":12860,"children":12861},{},[12862],{"type":23,"value":11098},{"type":17,"tag":329,"props":12864,"children":12865},{"class":331,"line":377},[12866],{"type":17,"tag":329,"props":12867,"children":12868},{},[12869],{"type":23,"value":11732},{"type":17,"tag":329,"props":12871,"children":12872},{"class":331,"line":386},[12873],{"type":17,"tag":329,"props":12874,"children":12875},{},[12876],{"type":23,"value":11740},{"type":17,"tag":329,"props":12878,"children":12879},{"class":331,"line":394},[12880],{"type":17,"tag":329,"props":12881,"children":12882},{},[12883],{"type":23,"value":11748},{"type":17,"tag":329,"props":12885,"children":12886},{"class":331,"line":403},[12887],{"type":17,"tag":329,"props":12888,"children":12889},{},[12890],{"type":23,"value":11756},{"type":17,"tag":329,"props":12892,"children":12893},{"class":331,"line":412},[12894],{"type":17,"tag":329,"props":12895,"children":12896},{},[12897],{"type":23,"value":11764},{"type":17,"tag":329,"props":12899,"children":12900},{"class":331,"line":421},[12901],{"type":17,"tag":329,"props":12902,"children":12903},{},[12904],{"type":23,"value":11247},{"type":17,"tag":329,"props":12906,"children":12907},{"class":331,"line":430},[12908],{"type":17,"tag":329,"props":12909,"children":12910},{},[12911],{"type":23,"value":12135},{"type":17,"tag":329,"props":12913,"children":12914},{"class":331,"line":439},[12915],{"type":17,"tag":329,"props":12916,"children":12917},{},[12918],{"type":23,"value":12143},{"type":17,"tag":329,"props":12920,"children":12921},{"class":331,"line":447},[12922],{"type":17,"tag":329,"props":12923,"children":12924},{},[12925],{"type":23,"value":12151},{"type":17,"tag":329,"props":12927,"children":12928},{"class":331,"line":456},[12929],{"type":17,"tag":329,"props":12930,"children":12931},{},[12932],{"type":23,"value":12159},{"type":17,"tag":329,"props":12934,"children":12935},{"class":331,"line":465},[12936],{"type":17,"tag":329,"props":12937,"children":12938},{},[12939],{"type":23,"value":12167},{"type":17,"tag":329,"props":12941,"children":12942},{"class":331,"line":474},[12943],{"type":17,"tag":329,"props":12944,"children":12945},{},[12946],{"type":23,"value":12175},{"type":17,"tag":329,"props":12948,"children":12949},{"class":331,"line":483},[12950],{"type":17,"tag":329,"props":12951,"children":12952},{},[12953],{"type":23,"value":11247},{"type":17,"tag":329,"props":12955,"children":12956},{"class":331,"line":667},[12957],{"type":17,"tag":329,"props":12958,"children":12959},{},[12960],{"type":23,"value":12961},"   \u003Cproperty name=\"teacherMap\" ref=\"teacherMap\"\u002F>\n",{"type":17,"tag":329,"props":12963,"children":12964},{"class":331,"line":676},[12965],{"type":17,"tag":329,"props":12966,"children":12967},{},[12968],{"type":23,"value":11106},{"type":17,"tag":329,"props":12970,"children":12971},{"class":331,"line":685},[12972],{"type":17,"tag":329,"props":12973,"children":12974},{"emptyLinePlaceholder":542},[12975],{"type":23,"value":545},{"type":17,"tag":329,"props":12977,"children":12978},{"class":331,"line":694},[12979],{"type":17,"tag":329,"props":12980,"children":12981},{},[12982],{"type":23,"value":12983},"\u003Cutil:map id=\"teacherMap\">\n",{"type":17,"tag":329,"props":12985,"children":12986},{"class":331,"line":1213},[12987],{"type":17,"tag":329,"props":12988,"children":12989},{},[12990],{"type":23,"value":12991},"    \u003Centry key=\"语文老师\" value-ref=\"teacherOne\"\u002F>\n",{"type":17,"tag":329,"props":12993,"children":12994},{"class":331,"line":1222},[12995],{"type":17,"tag":329,"props":12996,"children":12997},{},[12998],{"type":23,"value":12999},"    \u003Centry key=\"数学老师\" value-ref=\"teacherTwo\"\u002F>\n",{"type":17,"tag":329,"props":13001,"children":13002},{"class":331,"line":1231},[13003],{"type":17,"tag":329,"props":13004,"children":13005},{},[13006],{"type":23,"value":13007},"\u003C\u002Futil:map>\n",{"type":17,"tag":329,"props":13009,"children":13010},{"class":331,"line":1240},[13011],{"type":17,"tag":329,"props":13012,"children":13013},{"emptyLinePlaceholder":542},[13014],{"type":23,"value":545},{"type":17,"tag":329,"props":13016,"children":13017},{"class":331,"line":1248},[13018],{"type":17,"tag":329,"props":13019,"children":13020},{},[13021],{"type":23,"value":12758},{"type":17,"tag":329,"props":13023,"children":13024},{"class":331,"line":1257},[13025],{"type":17,"tag":329,"props":13026,"children":13027},{},[13028],{"type":23,"value":12766},{"type":17,"tag":329,"props":13030,"children":13031},{"class":331,"line":1266},[13032],{"type":17,"tag":329,"props":13033,"children":13034},{},[13035],{"type":23,"value":12774},{"type":17,"tag":329,"props":13037,"children":13038},{"class":331,"line":1275},[13039],{"type":17,"tag":329,"props":13040,"children":13041},{},[13042],{"type":23,"value":11106},{"type":17,"tag":329,"props":13044,"children":13045},{"class":331,"line":1284},[13046],{"type":17,"tag":329,"props":13047,"children":13048},{"emptyLinePlaceholder":542},[13049],{"type":23,"value":545},{"type":17,"tag":329,"props":13051,"children":13052},{"class":331,"line":1292},[13053],{"type":17,"tag":329,"props":13054,"children":13055},{},[13056],{"type":23,"value":12789},{"type":17,"tag":329,"props":13058,"children":13059},{"class":331,"line":1301},[13060],{"type":17,"tag":329,"props":13061,"children":13062},{},[13063],{"type":23,"value":12797},{"type":17,"tag":329,"props":13065,"children":13066},{"class":331,"line":1310},[13067],{"type":17,"tag":329,"props":13068,"children":13069},{},[13070],{"type":23,"value":12805},{"type":17,"tag":329,"props":13072,"children":13073},{"class":331,"line":1319},[13074],{"type":17,"tag":329,"props":13075,"children":13076},{},[13077],{"type":23,"value":11106},{"type":17,"tag":3272,"props":13079,"children":13081},{"id":13080},"_238-引入外部属性文件",[13082],{"type":23,"value":13083},"2.3.8 引入外部属性文件",{"type":17,"tag":53,"props":13085,"children":13086},{},[13087],{"type":17,"tag":57,"props":13088,"children":13089},{},[13090],{"type":23,"value":13091},"已druid为例",{"type":17,"tag":57,"props":13093,"children":13094},{},[13095],{"type":17,"tag":86,"props":13096,"children":13097},{},[13098],{"type":23,"value":13099},"jdbc-properties.properties：",{"type":17,"tag":319,"props":13101,"children":13105},{"className":13102,"code":13103,"language":13104,"meta":7,"style":7},"language-properties shiki shiki-themes github-dark","jdbc.driver=com.mysql.cj.jdbc.Driver\njdbc.url=jdbc:mysql:\u002F\u002Flocalhost:3306\u002Fatguigu?serverTimezone=UTC\njdbc.username=root\njdbc.password=wangkun1\n","properties",[13106],{"type":17,"tag":293,"props":13107,"children":13108},{"__ignoreMap":7},[13109,13117,13125,13133],{"type":17,"tag":329,"props":13110,"children":13111},{"class":331,"line":332},[13112],{"type":17,"tag":329,"props":13113,"children":13114},{},[13115],{"type":23,"value":13116},"jdbc.driver=com.mysql.cj.jdbc.Driver\n",{"type":17,"tag":329,"props":13118,"children":13119},{"class":331,"line":341},[13120],{"type":17,"tag":329,"props":13121,"children":13122},{},[13123],{"type":23,"value":13124},"jdbc.url=jdbc:mysql:\u002F\u002Flocalhost:3306\u002Fatguigu?serverTimezone=UTC\n",{"type":17,"tag":329,"props":13126,"children":13127},{"class":331,"line":350},[13128],{"type":17,"tag":329,"props":13129,"children":13130},{},[13131],{"type":23,"value":13132},"jdbc.username=root\n",{"type":17,"tag":329,"props":13134,"children":13135},{"class":331,"line":359},[13136],{"type":17,"tag":329,"props":13137,"children":13138},{},[13139],{"type":23,"value":13140},"jdbc.password=wangkun1\n",{"type":17,"tag":57,"props":13142,"children":13143},{},[13144],{"type":17,"tag":86,"props":13145,"children":13146},{},[13147],{"type":23,"value":13148},"spring-datasource.xml：",{"type":17,"tag":319,"props":13150,"children":13152},{"className":1376,"code":13151,"language":1378,"meta":7,"style":7},"\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\u003Cbeans xmlns=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\"\n       xmlns:xsi=\"http:\u002F\u002Fwww.w3.org\u002F2001\u002FXMLSchema-instance\"\n       xmlns:context=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fcontext\"\n       xsi:schemaLocation=\"\n                 http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\n                 http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\u002Fspring-beans.xsd\n                  http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fcontext\n                  http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fcontext\u002Fspring-context.xsd\">\n  \n    \u003C!--引入jdbc-properties.properties文件-->\n    \u003Ccontext:property-placeholder location=\"jdbc-properties.properties\"\u002F>\n\n    \u003Cbean id=\"dataSource\" class=\"com.alibaba.druid.pool.DruidDataSource\">\n        \u003Cproperty name=\"driverClassName\" value=\"${jdbc.driver}\"\u002F>\n        \u003Cproperty name=\"url\" value=\"${jdbc.url}\"\u002F>\n        \u003Cproperty name=\"username\" value=\"${jdbc.username}\"\u002F>\n        \u003Cproperty name=\"password\" value=\"${jdbc.password}\"\u002F>\n    \u003C\u002Fbean>\n\n\u003C\u002Fbeans>\n",[13153],{"type":17,"tag":293,"props":13154,"children":13155},{"__ignoreMap":7},[13156,13163,13170,13177,13185,13193,13201,13209,13217,13225,13232,13240,13248,13255,13263,13271,13279,13287,13295,13303,13310],{"type":17,"tag":329,"props":13157,"children":13158},{"class":331,"line":332},[13159],{"type":17,"tag":329,"props":13160,"children":13161},{},[13162],{"type":23,"value":7968},{"type":17,"tag":329,"props":13164,"children":13165},{"class":331,"line":341},[13166],{"type":17,"tag":329,"props":13167,"children":13168},{},[13169],{"type":23,"value":10514},{"type":17,"tag":329,"props":13171,"children":13172},{"class":331,"line":350},[13173],{"type":17,"tag":329,"props":13174,"children":13175},{},[13176],{"type":23,"value":10522},{"type":17,"tag":329,"props":13178,"children":13179},{"class":331,"line":359},[13180],{"type":17,"tag":329,"props":13181,"children":13182},{},[13183],{"type":23,"value":13184},"       xmlns:context=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fcontext\"\n",{"type":17,"tag":329,"props":13186,"children":13187},{"class":331,"line":368},[13188],{"type":17,"tag":329,"props":13189,"children":13190},{},[13191],{"type":23,"value":13192},"       xsi:schemaLocation=\"\n",{"type":17,"tag":329,"props":13194,"children":13195},{"class":331,"line":377},[13196],{"type":17,"tag":329,"props":13197,"children":13198},{},[13199],{"type":23,"value":13200},"                 http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\n",{"type":17,"tag":329,"props":13202,"children":13203},{"class":331,"line":386},[13204],{"type":17,"tag":329,"props":13205,"children":13206},{},[13207],{"type":23,"value":13208},"                 http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\u002Fspring-beans.xsd\n",{"type":17,"tag":329,"props":13210,"children":13211},{"class":331,"line":394},[13212],{"type":17,"tag":329,"props":13213,"children":13214},{},[13215],{"type":23,"value":13216},"                  http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fcontext\n",{"type":17,"tag":329,"props":13218,"children":13219},{"class":331,"line":403},[13220],{"type":17,"tag":329,"props":13221,"children":13222},{},[13223],{"type":23,"value":13224},"                  http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fcontext\u002Fspring-context.xsd\">\n",{"type":17,"tag":329,"props":13226,"children":13227},{"class":331,"line":412},[13228],{"type":17,"tag":329,"props":13229,"children":13230},{},[13231],{"type":23,"value":1602},{"type":17,"tag":329,"props":13233,"children":13234},{"class":331,"line":421},[13235],{"type":17,"tag":329,"props":13236,"children":13237},{},[13238],{"type":23,"value":13239},"    \u003C!--引入jdbc-properties.properties文件-->\n",{"type":17,"tag":329,"props":13241,"children":13242},{"class":331,"line":430},[13243],{"type":17,"tag":329,"props":13244,"children":13245},{},[13246],{"type":23,"value":13247},"    \u003Ccontext:property-placeholder location=\"jdbc-properties.properties\"\u002F>\n",{"type":17,"tag":329,"props":13249,"children":13250},{"class":331,"line":439},[13251],{"type":17,"tag":329,"props":13252,"children":13253},{"emptyLinePlaceholder":542},[13254],{"type":23,"value":545},{"type":17,"tag":329,"props":13256,"children":13257},{"class":331,"line":447},[13258],{"type":17,"tag":329,"props":13259,"children":13260},{},[13261],{"type":23,"value":13262},"    \u003Cbean id=\"dataSource\" class=\"com.alibaba.druid.pool.DruidDataSource\">\n",{"type":17,"tag":329,"props":13264,"children":13265},{"class":331,"line":456},[13266],{"type":17,"tag":329,"props":13267,"children":13268},{},[13269],{"type":23,"value":13270},"        \u003Cproperty name=\"driverClassName\" value=\"${jdbc.driver}\"\u002F>\n",{"type":17,"tag":329,"props":13272,"children":13273},{"class":331,"line":465},[13274],{"type":17,"tag":329,"props":13275,"children":13276},{},[13277],{"type":23,"value":13278},"        \u003Cproperty name=\"url\" value=\"${jdbc.url}\"\u002F>\n",{"type":17,"tag":329,"props":13280,"children":13281},{"class":331,"line":474},[13282],{"type":17,"tag":329,"props":13283,"children":13284},{},[13285],{"type":23,"value":13286},"        \u003Cproperty name=\"username\" value=\"${jdbc.username}\"\u002F>\n",{"type":17,"tag":329,"props":13288,"children":13289},{"class":331,"line":483},[13290],{"type":17,"tag":329,"props":13291,"children":13292},{},[13293],{"type":23,"value":13294},"        \u003Cproperty name=\"password\" value=\"${jdbc.password}\"\u002F>\n",{"type":17,"tag":329,"props":13296,"children":13297},{"class":331,"line":667},[13298],{"type":17,"tag":329,"props":13299,"children":13300},{},[13301],{"type":23,"value":13302},"    \u003C\u002Fbean>\n",{"type":17,"tag":329,"props":13304,"children":13305},{"class":331,"line":676},[13306],{"type":17,"tag":329,"props":13307,"children":13308},{"emptyLinePlaceholder":542},[13309],{"type":23,"value":545},{"type":17,"tag":329,"props":13311,"children":13312},{"class":331,"line":685},[13313],{"type":17,"tag":329,"props":13314,"children":13315},{},[13316],{"type":23,"value":10608},{"type":17,"tag":3272,"props":13318,"children":13320},{"id":13319},"_239-bean的作用域",[13321],{"type":23,"value":13322},"2.3.9 bean的作用域",{"type":17,"tag":53,"props":13324,"children":13325},{},[13326],{"type":17,"tag":57,"props":13327,"children":13328},{},[13329],{"type":23,"value":13330},"在Spring中可以配置bean标签的scope属性来指定bean的作用域范围",{"type":17,"tag":812,"props":13332,"children":13333},{},[13334,13355],{"type":17,"tag":816,"props":13335,"children":13336},{},[13337],{"type":17,"tag":820,"props":13338,"children":13339},{},[13340,13345,13350],{"type":17,"tag":824,"props":13341,"children":13342},{},[13343],{"type":23,"value":13344},"取值",{"type":17,"tag":824,"props":13346,"children":13347},{},[13348],{"type":23,"value":13349},"含义",{"type":17,"tag":824,"props":13351,"children":13352},{},[13353],{"type":23,"value":13354},"创建对象的时机",{"type":17,"tag":836,"props":13356,"children":13357},{},[13358,13376],{"type":17,"tag":820,"props":13359,"children":13360},{},[13361,13366,13371],{"type":17,"tag":843,"props":13362,"children":13363},{},[13364],{"type":23,"value":13365},"singleton（默认）",{"type":17,"tag":843,"props":13367,"children":13368},{},[13369],{"type":23,"value":13370},"在IOC容器中，这个bean的对象始终为单实例",{"type":17,"tag":843,"props":13372,"children":13373},{},[13374],{"type":23,"value":13375},"IOC容器初始化",{"type":17,"tag":820,"props":13377,"children":13378},{},[13379,13384,13389],{"type":17,"tag":843,"props":13380,"children":13381},{},[13382],{"type":23,"value":13383},"prototype",{"type":17,"tag":843,"props":13385,"children":13386},{},[13387],{"type":23,"value":13388},"这个bean在IOC容器中可以有多个实例",{"type":17,"tag":843,"props":13390,"children":13391},{},[13392],{"type":23,"value":13393},"获取bean时",{"type":17,"tag":57,"props":13395,"children":13396},{},[13397],{"type":17,"tag":86,"props":13398,"children":13399},{},[13400],{"type":23,"value":13401},"bean配置文件：",{"type":17,"tag":319,"props":13403,"children":13405},{"className":1376,"code":13404,"language":1378,"meta":7,"style":7},"\u003Cbean id=\"student\" class=\"com.wangkun.spring.pojo.Student\" scope=\"prototype\">\n    \u003Cproperty name=\"sName\" value=\"程浩\"\u002F>\n    \u003Cproperty name=\"age\" value=\"19\"\u002F>\n\u003C\u002Fbean>\n",[13406],{"type":17,"tag":293,"props":13407,"children":13408},{"__ignoreMap":7},[13409,13417,13424,13432],{"type":17,"tag":329,"props":13410,"children":13411},{"class":331,"line":332},[13412],{"type":17,"tag":329,"props":13413,"children":13414},{},[13415],{"type":23,"value":13416},"\u003Cbean id=\"student\" class=\"com.wangkun.spring.pojo.Student\" scope=\"prototype\">\n",{"type":17,"tag":329,"props":13418,"children":13419},{"class":331,"line":341},[13420],{"type":17,"tag":329,"props":13421,"children":13422},{},[13423],{"type":23,"value":12568},{"type":17,"tag":329,"props":13425,"children":13426},{"class":331,"line":350},[13427],{"type":17,"tag":329,"props":13428,"children":13429},{},[13430],{"type":23,"value":13431},"    \u003Cproperty name=\"age\" value=\"19\"\u002F>\n",{"type":17,"tag":329,"props":13433,"children":13434},{"class":331,"line":359},[13435],{"type":17,"tag":329,"props":13436,"children":13437},{},[13438],{"type":23,"value":11106},{"type":17,"tag":3272,"props":13440,"children":13442},{"id":13441},"_2310-bean生命周期",[13443],{"type":23,"value":13444},"2.3.10 bean生命周期",{"type":17,"tag":53,"props":13446,"children":13447},{},[13448,13471,13476,13481,13486],{"type":17,"tag":31,"props":13449,"children":13450},{},[13451,13456,13461,13466],{"type":17,"tag":35,"props":13452,"children":13453},{},[13454],{"type":23,"value":13455},"实例化： 调用空参构造",{"type":17,"tag":35,"props":13457,"children":13458},{},[13459],{"type":23,"value":13460},"依赖注入：为类组件的属性赋值",{"type":17,"tag":35,"props":13462,"children":13463},{},[13464],{"type":23,"value":13465},"初始化：在bean配置中指定类组件中的初始化方法",{"type":17,"tag":35,"props":13467,"children":13468},{},[13469],{"type":23,"value":13470},"销毁：在bean配置中指定类组件中的销毁方法（IOC容器关闭时销毁）",{"type":17,"tag":57,"props":13472,"children":13473},{},[13474],{"type":23,"value":13475},"对于Spring中的单例(Singleton)bean，它的实例化是在容器启动时进行的，也就是在应用程序启动时，Spring容器会创建并初始化所有的单例bean。这个过程中，Spring容器会扫描应用程序上下文中所有的bean定义，创建并实例化它们。",{"type":17,"tag":57,"props":13477,"children":13478},{},[13479],{"type":23,"value":13480},"当Spring容器启动时，会调用BeanFactoryPostProcessor和BeanPostProcessor，它们可以修改bean的定义和实例化过程。BeanFactoryPostProcessor用于修改bean的定义，而BeanPostProcessor则可以在bean实例化之后修改bean的属性和状态。",{"type":17,"tag":57,"props":13482,"children":13483},{},[13484],{"type":23,"value":13485},"接下来，Spring容器会对所有的单例bean进行实例化、属性注入、初始化和销毁，这些bean将会一直存在于应用程序的整个生命周期中，直到应用程序关闭。",{"type":17,"tag":57,"props":13487,"children":13488},{},[13489],{"type":23,"value":13490},"需要注意的是，对于非单例(Prototype)bean，它的实例化是在每次获取实例时进行的，也就是每次调用getBean()方法时都会创建一个新的实例。这个时候，Spring容器会对bean进行实例化、属性注入、初始化和销毁，但是每个实例的生命周期是独立的，不会影响其他实例。",{"type":17,"tag":57,"props":13492,"children":13493},{},[13494],{"type":17,"tag":86,"props":13495,"children":13496},{},[13497],{"type":23,"value":13498},"类组件：User",{"type":17,"tag":319,"props":13500,"children":13502},{"className":321,"code":13501,"language":323,"meta":7,"style":7},"package com.wangkun.spring.pojo;\n\npublic class User {\n    private Integer id;\n    private String username;\n    private String password;\n    private Integer age;\n\n    @Override\n    public String toString() {\n        return \"User{\" +\n                \"id=\" + id +\n                \", username='\" + username + '\\'' +\n                \", password='\" + password + '\\'' +\n                \", age=\" + age +\n                '}';\n    }\n\n    public Integer getId() {\n        return id;\n    }\n\n    public void setId(Integer id) {\n        System.out.println(\"生命周期2：依赖注入\");\n        this.id = id;\n    }\n\n    public String getUsername() {\n        return username;\n    }\n\n    public void setUsername(String username) {\n        this.username = username;\n    }\n\n    public String getPassword() {\n        return password;\n    }\n\n    public void setPassword(String password) {\n        this.password = password;\n    }\n\n    public Integer getAge() {\n        return age;\n    }\n\n    public void setAge(Integer age) {\n        this.age = age;\n    }\n\n    public User(Integer id, String username, String password, Integer age) {\n        this.id = id;\n        this.username = username;\n        this.password = password;\n        this.age = age;\n    }\n\n    public User() {\n        System.out.println(\"生命周期1：实例化\");\n    }\n\n    public void initMethod() {\n        System.out.println(\"生命周期3：初始化\");\n    }\n\n    public void destroyMethod() {\n        System.out.println(\"生命周期4：销毁\");\n    }\n}\n",[13503],{"type":17,"tag":293,"props":13504,"children":13505},{"__ignoreMap":7},[13506,13513,13520,13528,13536,13544,13552,13560,13567,13575,13583,13591,13599,13607,13615,13623,13631,13638,13645,13653,13661,13668,13675,13683,13691,13699,13706,13713,13721,13729,13736,13743,13751,13759,13766,13773,13781,13789,13796,13803,13811,13819,13826,13833,13841,13849,13856,13863,13871,13879,13886,13893,13901,13908,13915,13922,13929,13936,13943,13951,13959,13966,13973,13981,13989,13996,14003,14011,14019,14026],{"type":17,"tag":329,"props":13507,"children":13508},{"class":331,"line":332},[13509],{"type":17,"tag":329,"props":13510,"children":13511},{},[13512],{"type":23,"value":10408},{"type":17,"tag":329,"props":13514,"children":13515},{"class":331,"line":341},[13516],{"type":17,"tag":329,"props":13517,"children":13518},{"emptyLinePlaceholder":542},[13519],{"type":23,"value":545},{"type":17,"tag":329,"props":13521,"children":13522},{"class":331,"line":350},[13523],{"type":17,"tag":329,"props":13524,"children":13525},{},[13526],{"type":23,"value":13527},"public class User {\n",{"type":17,"tag":329,"props":13529,"children":13530},{"class":331,"line":359},[13531],{"type":17,"tag":329,"props":13532,"children":13533},{},[13534],{"type":23,"value":13535},"    private Integer id;\n",{"type":17,"tag":329,"props":13537,"children":13538},{"class":331,"line":368},[13539],{"type":17,"tag":329,"props":13540,"children":13541},{},[13542],{"type":23,"value":13543},"    private String username;\n",{"type":17,"tag":329,"props":13545,"children":13546},{"class":331,"line":377},[13547],{"type":17,"tag":329,"props":13548,"children":13549},{},[13550],{"type":23,"value":13551},"    private String password;\n",{"type":17,"tag":329,"props":13553,"children":13554},{"class":331,"line":386},[13555],{"type":17,"tag":329,"props":13556,"children":13557},{},[13558],{"type":23,"value":13559},"    private Integer age;\n",{"type":17,"tag":329,"props":13561,"children":13562},{"class":331,"line":394},[13563],{"type":17,"tag":329,"props":13564,"children":13565},{"emptyLinePlaceholder":542},[13566],{"type":23,"value":545},{"type":17,"tag":329,"props":13568,"children":13569},{"class":331,"line":403},[13570],{"type":17,"tag":329,"props":13571,"children":13572},{},[13573],{"type":23,"value":13574},"    @Override\n",{"type":17,"tag":329,"props":13576,"children":13577},{"class":331,"line":412},[13578],{"type":17,"tag":329,"props":13579,"children":13580},{},[13581],{"type":23,"value":13582},"    public String toString() {\n",{"type":17,"tag":329,"props":13584,"children":13585},{"class":331,"line":421},[13586],{"type":17,"tag":329,"props":13587,"children":13588},{},[13589],{"type":23,"value":13590},"        return \"User{\" +\n",{"type":17,"tag":329,"props":13592,"children":13593},{"class":331,"line":430},[13594],{"type":17,"tag":329,"props":13595,"children":13596},{},[13597],{"type":23,"value":13598},"                \"id=\" + id +\n",{"type":17,"tag":329,"props":13600,"children":13601},{"class":331,"line":439},[13602],{"type":17,"tag":329,"props":13603,"children":13604},{},[13605],{"type":23,"value":13606},"                \", username='\" + username + '\\'' +\n",{"type":17,"tag":329,"props":13608,"children":13609},{"class":331,"line":447},[13610],{"type":17,"tag":329,"props":13611,"children":13612},{},[13613],{"type":23,"value":13614},"                \", password='\" + password + '\\'' +\n",{"type":17,"tag":329,"props":13616,"children":13617},{"class":331,"line":456},[13618],{"type":17,"tag":329,"props":13619,"children":13620},{},[13621],{"type":23,"value":13622},"                \", age=\" + age +\n",{"type":17,"tag":329,"props":13624,"children":13625},{"class":331,"line":465},[13626],{"type":17,"tag":329,"props":13627,"children":13628},{},[13629],{"type":23,"value":13630},"                '}';\n",{"type":17,"tag":329,"props":13632,"children":13633},{"class":331,"line":474},[13634],{"type":17,"tag":329,"props":13635,"children":13636},{},[13637],{"type":23,"value":1351},{"type":17,"tag":329,"props":13639,"children":13640},{"class":331,"line":483},[13641],{"type":17,"tag":329,"props":13642,"children":13643},{"emptyLinePlaceholder":542},[13644],{"type":23,"value":545},{"type":17,"tag":329,"props":13646,"children":13647},{"class":331,"line":667},[13648],{"type":17,"tag":329,"props":13649,"children":13650},{},[13651],{"type":23,"value":13652},"    public Integer getId() {\n",{"type":17,"tag":329,"props":13654,"children":13655},{"class":331,"line":676},[13656],{"type":17,"tag":329,"props":13657,"children":13658},{},[13659],{"type":23,"value":13660},"        return id;\n",{"type":17,"tag":329,"props":13662,"children":13663},{"class":331,"line":685},[13664],{"type":17,"tag":329,"props":13665,"children":13666},{},[13667],{"type":23,"value":1351},{"type":17,"tag":329,"props":13669,"children":13670},{"class":331,"line":694},[13671],{"type":17,"tag":329,"props":13672,"children":13673},{"emptyLinePlaceholder":542},[13674],{"type":23,"value":545},{"type":17,"tag":329,"props":13676,"children":13677},{"class":331,"line":1213},[13678],{"type":17,"tag":329,"props":13679,"children":13680},{},[13681],{"type":23,"value":13682},"    public void setId(Integer id) {\n",{"type":17,"tag":329,"props":13684,"children":13685},{"class":331,"line":1222},[13686],{"type":17,"tag":329,"props":13687,"children":13688},{},[13689],{"type":23,"value":13690},"        System.out.println(\"生命周期2：依赖注入\");\n",{"type":17,"tag":329,"props":13692,"children":13693},{"class":331,"line":1231},[13694],{"type":17,"tag":329,"props":13695,"children":13696},{},[13697],{"type":23,"value":13698},"        this.id = id;\n",{"type":17,"tag":329,"props":13700,"children":13701},{"class":331,"line":1240},[13702],{"type":17,"tag":329,"props":13703,"children":13704},{},[13705],{"type":23,"value":1351},{"type":17,"tag":329,"props":13707,"children":13708},{"class":331,"line":1248},[13709],{"type":17,"tag":329,"props":13710,"children":13711},{"emptyLinePlaceholder":542},[13712],{"type":23,"value":545},{"type":17,"tag":329,"props":13714,"children":13715},{"class":331,"line":1257},[13716],{"type":17,"tag":329,"props":13717,"children":13718},{},[13719],{"type":23,"value":13720},"    public String getUsername() {\n",{"type":17,"tag":329,"props":13722,"children":13723},{"class":331,"line":1266},[13724],{"type":17,"tag":329,"props":13725,"children":13726},{},[13727],{"type":23,"value":13728},"        return username;\n",{"type":17,"tag":329,"props":13730,"children":13731},{"class":331,"line":1275},[13732],{"type":17,"tag":329,"props":13733,"children":13734},{},[13735],{"type":23,"value":1351},{"type":17,"tag":329,"props":13737,"children":13738},{"class":331,"line":1284},[13739],{"type":17,"tag":329,"props":13740,"children":13741},{"emptyLinePlaceholder":542},[13742],{"type":23,"value":545},{"type":17,"tag":329,"props":13744,"children":13745},{"class":331,"line":1292},[13746],{"type":17,"tag":329,"props":13747,"children":13748},{},[13749],{"type":23,"value":13750},"    public void setUsername(String username) {\n",{"type":17,"tag":329,"props":13752,"children":13753},{"class":331,"line":1301},[13754],{"type":17,"tag":329,"props":13755,"children":13756},{},[13757],{"type":23,"value":13758},"        this.username = username;\n",{"type":17,"tag":329,"props":13760,"children":13761},{"class":331,"line":1310},[13762],{"type":17,"tag":329,"props":13763,"children":13764},{},[13765],{"type":23,"value":1351},{"type":17,"tag":329,"props":13767,"children":13768},{"class":331,"line":1319},[13769],{"type":17,"tag":329,"props":13770,"children":13771},{"emptyLinePlaceholder":542},[13772],{"type":23,"value":545},{"type":17,"tag":329,"props":13774,"children":13775},{"class":331,"line":1328},[13776],{"type":17,"tag":329,"props":13777,"children":13778},{},[13779],{"type":23,"value":13780},"    public String getPassword() {\n",{"type":17,"tag":329,"props":13782,"children":13783},{"class":331,"line":1336},[13784],{"type":17,"tag":329,"props":13785,"children":13786},{},[13787],{"type":23,"value":13788},"        return password;\n",{"type":17,"tag":329,"props":13790,"children":13791},{"class":331,"line":1345},[13792],{"type":17,"tag":329,"props":13793,"children":13794},{},[13795],{"type":23,"value":1351},{"type":17,"tag":329,"props":13797,"children":13798},{"class":331,"line":1354},[13799],{"type":17,"tag":329,"props":13800,"children":13801},{"emptyLinePlaceholder":542},[13802],{"type":23,"value":545},{"type":17,"tag":329,"props":13804,"children":13805},{"class":331,"line":1979},[13806],{"type":17,"tag":329,"props":13807,"children":13808},{},[13809],{"type":23,"value":13810},"    public void setPassword(String password) {\n",{"type":17,"tag":329,"props":13812,"children":13813},{"class":331,"line":1988},[13814],{"type":17,"tag":329,"props":13815,"children":13816},{},[13817],{"type":23,"value":13818},"        this.password = password;\n",{"type":17,"tag":329,"props":13820,"children":13821},{"class":331,"line":1997},[13822],{"type":17,"tag":329,"props":13823,"children":13824},{},[13825],{"type":23,"value":1351},{"type":17,"tag":329,"props":13827,"children":13828},{"class":331,"line":2006},[13829],{"type":17,"tag":329,"props":13830,"children":13831},{"emptyLinePlaceholder":542},[13832],{"type":23,"value":545},{"type":17,"tag":329,"props":13834,"children":13835},{"class":331,"line":2014},[13836],{"type":17,"tag":329,"props":13837,"children":13838},{},[13839],{"type":23,"value":13840},"    public Integer getAge() {\n",{"type":17,"tag":329,"props":13842,"children":13843},{"class":331,"line":8306},[13844],{"type":17,"tag":329,"props":13845,"children":13846},{},[13847],{"type":23,"value":13848},"        return age;\n",{"type":17,"tag":329,"props":13850,"children":13851},{"class":331,"line":8315},[13852],{"type":17,"tag":329,"props":13853,"children":13854},{},[13855],{"type":23,"value":1351},{"type":17,"tag":329,"props":13857,"children":13858},{"class":331,"line":8324},[13859],{"type":17,"tag":329,"props":13860,"children":13861},{"emptyLinePlaceholder":542},[13862],{"type":23,"value":545},{"type":17,"tag":329,"props":13864,"children":13865},{"class":331,"line":8333},[13866],{"type":17,"tag":329,"props":13867,"children":13868},{},[13869],{"type":23,"value":13870},"    public void setAge(Integer age) {\n",{"type":17,"tag":329,"props":13872,"children":13873},{"class":331,"line":8342},[13874],{"type":17,"tag":329,"props":13875,"children":13876},{},[13877],{"type":23,"value":13878},"        this.age = age;\n",{"type":17,"tag":329,"props":13880,"children":13881},{"class":331,"line":8351},[13882],{"type":17,"tag":329,"props":13883,"children":13884},{},[13885],{"type":23,"value":1351},{"type":17,"tag":329,"props":13887,"children":13888},{"class":331,"line":8360},[13889],{"type":17,"tag":329,"props":13890,"children":13891},{"emptyLinePlaceholder":542},[13892],{"type":23,"value":545},{"type":17,"tag":329,"props":13894,"children":13895},{"class":331,"line":8369},[13896],{"type":17,"tag":329,"props":13897,"children":13898},{},[13899],{"type":23,"value":13900},"    public User(Integer id, String username, String password, Integer age) {\n",{"type":17,"tag":329,"props":13902,"children":13903},{"class":331,"line":8378},[13904],{"type":17,"tag":329,"props":13905,"children":13906},{},[13907],{"type":23,"value":13698},{"type":17,"tag":329,"props":13909,"children":13910},{"class":331,"line":8387},[13911],{"type":17,"tag":329,"props":13912,"children":13913},{},[13914],{"type":23,"value":13758},{"type":17,"tag":329,"props":13916,"children":13917},{"class":331,"line":8396},[13918],{"type":17,"tag":329,"props":13919,"children":13920},{},[13921],{"type":23,"value":13818},{"type":17,"tag":329,"props":13923,"children":13924},{"class":331,"line":8405},[13925],{"type":17,"tag":329,"props":13926,"children":13927},{},[13928],{"type":23,"value":13878},{"type":17,"tag":329,"props":13930,"children":13931},{"class":331,"line":8414},[13932],{"type":17,"tag":329,"props":13933,"children":13934},{},[13935],{"type":23,"value":1351},{"type":17,"tag":329,"props":13937,"children":13938},{"class":331,"line":8423},[13939],{"type":17,"tag":329,"props":13940,"children":13941},{"emptyLinePlaceholder":542},[13942],{"type":23,"value":545},{"type":17,"tag":329,"props":13944,"children":13945},{"class":331,"line":8432},[13946],{"type":17,"tag":329,"props":13947,"children":13948},{},[13949],{"type":23,"value":13950},"    public User() {\n",{"type":17,"tag":329,"props":13952,"children":13953},{"class":331,"line":8441},[13954],{"type":17,"tag":329,"props":13955,"children":13956},{},[13957],{"type":23,"value":13958},"        System.out.println(\"生命周期1：实例化\");\n",{"type":17,"tag":329,"props":13960,"children":13961},{"class":331,"line":8449},[13962],{"type":17,"tag":329,"props":13963,"children":13964},{},[13965],{"type":23,"value":1351},{"type":17,"tag":329,"props":13967,"children":13968},{"class":331,"line":8458},[13969],{"type":17,"tag":329,"props":13970,"children":13971},{"emptyLinePlaceholder":542},[13972],{"type":23,"value":545},{"type":17,"tag":329,"props":13974,"children":13975},{"class":331,"line":8467},[13976],{"type":17,"tag":329,"props":13977,"children":13978},{},[13979],{"type":23,"value":13980},"    public void initMethod() {\n",{"type":17,"tag":329,"props":13982,"children":13983},{"class":331,"line":8476},[13984],{"type":17,"tag":329,"props":13985,"children":13986},{},[13987],{"type":23,"value":13988},"        System.out.println(\"生命周期3：初始化\");\n",{"type":17,"tag":329,"props":13990,"children":13991},{"class":331,"line":8484},[13992],{"type":17,"tag":329,"props":13993,"children":13994},{},[13995],{"type":23,"value":1351},{"type":17,"tag":329,"props":13997,"children":13998},{"class":331,"line":8493},[13999],{"type":17,"tag":329,"props":14000,"children":14001},{"emptyLinePlaceholder":542},[14002],{"type":23,"value":545},{"type":17,"tag":329,"props":14004,"children":14005},{"class":331,"line":8502},[14006],{"type":17,"tag":329,"props":14007,"children":14008},{},[14009],{"type":23,"value":14010},"    public void destroyMethod() {\n",{"type":17,"tag":329,"props":14012,"children":14013},{"class":331,"line":8511},[14014],{"type":17,"tag":329,"props":14015,"children":14016},{},[14017],{"type":23,"value":14018},"        System.out.println(\"生命周期4：销毁\");\n",{"type":17,"tag":329,"props":14020,"children":14021},{"class":331,"line":8520},[14022],{"type":17,"tag":329,"props":14023,"children":14024},{},[14025],{"type":23,"value":1351},{"type":17,"tag":329,"props":14027,"children":14028},{"class":331,"line":9399},[14029],{"type":17,"tag":329,"props":14030,"children":14031},{},[14032],{"type":23,"value":753},{"type":17,"tag":57,"props":14034,"children":14035},{},[14036],{"type":17,"tag":86,"props":14037,"children":14038},{},[14039],{"type":23,"value":13401},{"type":17,"tag":319,"props":14041,"children":14043},{"className":1376,"code":14042,"language":1378,"meta":7,"style":7},"\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\u003Cbeans xmlns=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\"\n       xmlns:xsi=\"http:\u002F\u002Fwww.w3.org\u002F2001\u002FXMLSchema-instance\"\n       xsi:schemaLocation=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\u002Fspring-beans.xsd\">\n\n    \u003Cbean id=\"lifeCycle\" class=\"com.wangkun.spring.pojo.User\" init-method=\"initMethod\" destroy-method=\"destroyMethod\">\n        \u003Cproperty name=\"id\" value=\"1\"\u002F>\n        \u003Cproperty name=\"username\" value=\"王琨\"\u002F>\n        \u003Cproperty name=\"password\" value=\"1231231\"\u002F>\n        \u003Cproperty name=\"age\" value=\"23\"\u002F>\n    \u003C\u002Fbean>\n\n\u003C\u002Fbeans>\n",[14044],{"type":17,"tag":293,"props":14045,"children":14046},{"__ignoreMap":7},[14047,14054,14061,14068,14075,14082,14090,14098,14106,14114,14122,14129,14136],{"type":17,"tag":329,"props":14048,"children":14049},{"class":331,"line":332},[14050],{"type":17,"tag":329,"props":14051,"children":14052},{},[14053],{"type":23,"value":7968},{"type":17,"tag":329,"props":14055,"children":14056},{"class":331,"line":341},[14057],{"type":17,"tag":329,"props":14058,"children":14059},{},[14060],{"type":23,"value":10514},{"type":17,"tag":329,"props":14062,"children":14063},{"class":331,"line":350},[14064],{"type":17,"tag":329,"props":14065,"children":14066},{},[14067],{"type":23,"value":10522},{"type":17,"tag":329,"props":14069,"children":14070},{"class":331,"line":359},[14071],{"type":17,"tag":329,"props":14072,"children":14073},{},[14074],{"type":23,"value":10530},{"type":17,"tag":329,"props":14076,"children":14077},{"class":331,"line":368},[14078],{"type":17,"tag":329,"props":14079,"children":14080},{"emptyLinePlaceholder":542},[14081],{"type":23,"value":545},{"type":17,"tag":329,"props":14083,"children":14084},{"class":331,"line":377},[14085],{"type":17,"tag":329,"props":14086,"children":14087},{},[14088],{"type":23,"value":14089},"    \u003Cbean id=\"lifeCycle\" class=\"com.wangkun.spring.pojo.User\" init-method=\"initMethod\" destroy-method=\"destroyMethod\">\n",{"type":17,"tag":329,"props":14091,"children":14092},{"class":331,"line":386},[14093],{"type":17,"tag":329,"props":14094,"children":14095},{},[14096],{"type":23,"value":14097},"        \u003Cproperty name=\"id\" value=\"1\"\u002F>\n",{"type":17,"tag":329,"props":14099,"children":14100},{"class":331,"line":394},[14101],{"type":17,"tag":329,"props":14102,"children":14103},{},[14104],{"type":23,"value":14105},"        \u003Cproperty name=\"username\" value=\"王琨\"\u002F>\n",{"type":17,"tag":329,"props":14107,"children":14108},{"class":331,"line":403},[14109],{"type":17,"tag":329,"props":14110,"children":14111},{},[14112],{"type":23,"value":14113},"        \u003Cproperty name=\"password\" value=\"1231231\"\u002F>\n",{"type":17,"tag":329,"props":14115,"children":14116},{"class":331,"line":412},[14117],{"type":17,"tag":329,"props":14118,"children":14119},{},[14120],{"type":23,"value":14121},"        \u003Cproperty name=\"age\" value=\"23\"\u002F>\n",{"type":17,"tag":329,"props":14123,"children":14124},{"class":331,"line":421},[14125],{"type":17,"tag":329,"props":14126,"children":14127},{},[14128],{"type":23,"value":13302},{"type":17,"tag":329,"props":14130,"children":14131},{"class":331,"line":430},[14132],{"type":17,"tag":329,"props":14133,"children":14134},{"emptyLinePlaceholder":542},[14135],{"type":23,"value":545},{"type":17,"tag":329,"props":14137,"children":14138},{"class":331,"line":439},[14139],{"type":17,"tag":329,"props":14140,"children":14141},{},[14142],{"type":23,"value":10608},{"type":17,"tag":3272,"props":14144,"children":14146},{"id":14145},"_2311-factorybean",[14147],{"type":23,"value":14148},"2.3.11 FactoryBean",{"type":17,"tag":53,"props":14150,"children":14151},{},[14152,14157,14162],{"type":17,"tag":57,"props":14153,"children":14154},{},[14155],{"type":23,"value":14156},"FactoryBean是一个Spring提供的一种整合第三方框架的常用机制。",{"type":17,"tag":57,"props":14158,"children":14159},{},[14160],{"type":23,"value":14161},"和普通bean不同，配置一个FactoryBean的bean，在获取bean的时候并不是class属性配置的这个对象类，而是getObject()方法的返回值。通过这种机制，Spring可以帮我们把复杂组件创建的详细过程和繁琐细节都屏蔽起来，只把最简洁的使用界面展示给我们。",{"type":17,"tag":57,"props":14163,"children":14164},{},[14165],{"type":23,"value":14166},"将来我们整合Mybatis，Spring就是通过FactoryBean机制来帮我们创建SqlSessionFactory对象的",{"type":17,"tag":57,"props":14168,"children":14169},{},[14170],{"type":17,"tag":86,"props":14171,"children":14172},{},[14173],{"type":23,"value":14174},"创建工厂类：",{"type":17,"tag":319,"props":14176,"children":14178},{"className":321,"code":14177,"language":323,"meta":7,"style":7},"package com.wangkun.spring.factory;\n\nimport com.wangkun.spring.pojo.User;\nimport org.springframework.beans.factory.FactoryBean;\n\n\u002F*\n* FactoryBean是一个接口，需要创建一个类实现接口\n* 其中有三个方法：\n*   1. getObject(): 通过一个对象交给IOC容器管理\n*   2. GetObjectType(): 设置所提供对象的类型\n*   3. isSingleton(): 所提供的对象是否为单例\n* *\u002F\n\npublic class UserFactoryBean implements FactoryBean\u003CUser> {\n    @Override\n    public User getObject() throws Exception {\n        return new User();\n    }\n    @Override\n    public Class\u003C?> getObjectType() {\n        return User.class;\n    }\n}\n",[14179],{"type":17,"tag":293,"props":14180,"children":14181},{"__ignoreMap":7},[14182,14190,14197,14205,14213,14220,14228,14236,14244,14252,14260,14268,14276,14283,14291,14298,14306,14314,14321,14328,14336,14344,14351],{"type":17,"tag":329,"props":14183,"children":14184},{"class":331,"line":332},[14185],{"type":17,"tag":329,"props":14186,"children":14187},{},[14188],{"type":23,"value":14189},"package com.wangkun.spring.factory;\n",{"type":17,"tag":329,"props":14191,"children":14192},{"class":331,"line":341},[14193],{"type":17,"tag":329,"props":14194,"children":14195},{"emptyLinePlaceholder":542},[14196],{"type":23,"value":545},{"type":17,"tag":329,"props":14198,"children":14199},{"class":331,"line":350},[14200],{"type":17,"tag":329,"props":14201,"children":14202},{},[14203],{"type":23,"value":14204},"import com.wangkun.spring.pojo.User;\n",{"type":17,"tag":329,"props":14206,"children":14207},{"class":331,"line":359},[14208],{"type":17,"tag":329,"props":14209,"children":14210},{},[14211],{"type":23,"value":14212},"import org.springframework.beans.factory.FactoryBean;\n",{"type":17,"tag":329,"props":14214,"children":14215},{"class":331,"line":368},[14216],{"type":17,"tag":329,"props":14217,"children":14218},{"emptyLinePlaceholder":542},[14219],{"type":23,"value":545},{"type":17,"tag":329,"props":14221,"children":14222},{"class":331,"line":377},[14223],{"type":17,"tag":329,"props":14224,"children":14225},{},[14226],{"type":23,"value":14227},"\u002F*\n",{"type":17,"tag":329,"props":14229,"children":14230},{"class":331,"line":386},[14231],{"type":17,"tag":329,"props":14232,"children":14233},{},[14234],{"type":23,"value":14235},"* FactoryBean是一个接口，需要创建一个类实现接口\n",{"type":17,"tag":329,"props":14237,"children":14238},{"class":331,"line":394},[14239],{"type":17,"tag":329,"props":14240,"children":14241},{},[14242],{"type":23,"value":14243},"* 其中有三个方法：\n",{"type":17,"tag":329,"props":14245,"children":14246},{"class":331,"line":403},[14247],{"type":17,"tag":329,"props":14248,"children":14249},{},[14250],{"type":23,"value":14251},"*   1. getObject(): 通过一个对象交给IOC容器管理\n",{"type":17,"tag":329,"props":14253,"children":14254},{"class":331,"line":412},[14255],{"type":17,"tag":329,"props":14256,"children":14257},{},[14258],{"type":23,"value":14259},"*   2. GetObjectType(): 设置所提供对象的类型\n",{"type":17,"tag":329,"props":14261,"children":14262},{"class":331,"line":421},[14263],{"type":17,"tag":329,"props":14264,"children":14265},{},[14266],{"type":23,"value":14267},"*   3. isSingleton(): 所提供的对象是否为单例\n",{"type":17,"tag":329,"props":14269,"children":14270},{"class":331,"line":430},[14271],{"type":17,"tag":329,"props":14272,"children":14273},{},[14274],{"type":23,"value":14275},"* *\u002F\n",{"type":17,"tag":329,"props":14277,"children":14278},{"class":331,"line":439},[14279],{"type":17,"tag":329,"props":14280,"children":14281},{"emptyLinePlaceholder":542},[14282],{"type":23,"value":545},{"type":17,"tag":329,"props":14284,"children":14285},{"class":331,"line":447},[14286],{"type":17,"tag":329,"props":14287,"children":14288},{},[14289],{"type":23,"value":14290},"public class UserFactoryBean implements FactoryBean\u003CUser> {\n",{"type":17,"tag":329,"props":14292,"children":14293},{"class":331,"line":456},[14294],{"type":17,"tag":329,"props":14295,"children":14296},{},[14297],{"type":23,"value":13574},{"type":17,"tag":329,"props":14299,"children":14300},{"class":331,"line":465},[14301],{"type":17,"tag":329,"props":14302,"children":14303},{},[14304],{"type":23,"value":14305},"    public User getObject() throws Exception {\n",{"type":17,"tag":329,"props":14307,"children":14308},{"class":331,"line":474},[14309],{"type":17,"tag":329,"props":14310,"children":14311},{},[14312],{"type":23,"value":14313},"        return new User();\n",{"type":17,"tag":329,"props":14315,"children":14316},{"class":331,"line":483},[14317],{"type":17,"tag":329,"props":14318,"children":14319},{},[14320],{"type":23,"value":1351},{"type":17,"tag":329,"props":14322,"children":14323},{"class":331,"line":667},[14324],{"type":17,"tag":329,"props":14325,"children":14326},{},[14327],{"type":23,"value":13574},{"type":17,"tag":329,"props":14329,"children":14330},{"class":331,"line":676},[14331],{"type":17,"tag":329,"props":14332,"children":14333},{},[14334],{"type":23,"value":14335},"    public Class\u003C?> getObjectType() {\n",{"type":17,"tag":329,"props":14337,"children":14338},{"class":331,"line":685},[14339],{"type":17,"tag":329,"props":14340,"children":14341},{},[14342],{"type":23,"value":14343},"        return User.class;\n",{"type":17,"tag":329,"props":14345,"children":14346},{"class":331,"line":694},[14347],{"type":17,"tag":329,"props":14348,"children":14349},{},[14350],{"type":23,"value":1351},{"type":17,"tag":329,"props":14352,"children":14353},{"class":331,"line":1213},[14354],{"type":17,"tag":329,"props":14355,"children":14356},{},[14357],{"type":23,"value":753},{"type":17,"tag":57,"props":14359,"children":14360},{},[14361],{"type":17,"tag":86,"props":14362,"children":14363},{},[14364],{"type":23,"value":14365},"bean配置：",{"type":17,"tag":319,"props":14367,"children":14369},{"className":1376,"code":14368,"language":1378,"meta":7,"style":7},"\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\u003Cbeans xmlns=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\"\n       xmlns:xsi=\"http:\u002F\u002Fwww.w3.org\u002F2001\u002FXMLSchema-instance\"\n       xsi:schemaLocation=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\u002Fspring-beans.xsd\">\n\n    \u003Cbean id=\"userFactory\" class=\"com.wangkun.spring.factory.UserFactoryBean\"\u002F>\n\n\u003C\u002Fbeans>\n",[14370],{"type":17,"tag":293,"props":14371,"children":14372},{"__ignoreMap":7},[14373,14380,14387,14394,14401,14408,14416,14423],{"type":17,"tag":329,"props":14374,"children":14375},{"class":331,"line":332},[14376],{"type":17,"tag":329,"props":14377,"children":14378},{},[14379],{"type":23,"value":7968},{"type":17,"tag":329,"props":14381,"children":14382},{"class":331,"line":341},[14383],{"type":17,"tag":329,"props":14384,"children":14385},{},[14386],{"type":23,"value":10514},{"type":17,"tag":329,"props":14388,"children":14389},{"class":331,"line":350},[14390],{"type":17,"tag":329,"props":14391,"children":14392},{},[14393],{"type":23,"value":10522},{"type":17,"tag":329,"props":14395,"children":14396},{"class":331,"line":359},[14397],{"type":17,"tag":329,"props":14398,"children":14399},{},[14400],{"type":23,"value":10530},{"type":17,"tag":329,"props":14402,"children":14403},{"class":331,"line":368},[14404],{"type":17,"tag":329,"props":14405,"children":14406},{"emptyLinePlaceholder":542},[14407],{"type":23,"value":545},{"type":17,"tag":329,"props":14409,"children":14410},{"class":331,"line":377},[14411],{"type":17,"tag":329,"props":14412,"children":14413},{},[14414],{"type":23,"value":14415},"    \u003Cbean id=\"userFactory\" class=\"com.wangkun.spring.factory.UserFactoryBean\"\u002F>\n",{"type":17,"tag":329,"props":14417,"children":14418},{"class":331,"line":386},[14419],{"type":17,"tag":329,"props":14420,"children":14421},{"emptyLinePlaceholder":542},[14422],{"type":23,"value":545},{"type":17,"tag":329,"props":14424,"children":14425},{"class":331,"line":394},[14426],{"type":17,"tag":329,"props":14427,"children":14428},{},[14429],{"type":23,"value":10608},{"type":17,"tag":57,"props":14431,"children":14432},{},[14433],{"type":17,"tag":86,"props":14434,"children":14435},{},[14436],{"type":23,"value":14437},"测试类：使用，与打印结果",{"type":17,"tag":319,"props":14439,"children":14441},{"className":321,"code":14440,"language":323,"meta":7,"style":7},"@Test\npublic void testFactory() {\n\n    ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext(\"spring-factory.xml\");\n\n    User bean = ioc.getBean(User.class);\n    System.out.println(bean);\n\n}\n\n\u002F\u002F 打印结果，只有生命周期第一步，因为没有进行依赖注入，\n\u002F\u002F 生命周期1：实例化\n\u002F\u002F User{id=null, username='null', password='null', age=null}\n",[14442],{"type":17,"tag":293,"props":14443,"children":14444},{"__ignoreMap":7},[14445,14452,14460,14467,14475,14482,14490,14497,14504,14511,14518,14526,14534],{"type":17,"tag":329,"props":14446,"children":14447},{"class":331,"line":332},[14448],{"type":17,"tag":329,"props":14449,"children":14450},{},[14451],{"type":23,"value":2307},{"type":17,"tag":329,"props":14453,"children":14454},{"class":331,"line":341},[14455],{"type":17,"tag":329,"props":14456,"children":14457},{},[14458],{"type":23,"value":14459},"public void testFactory() {\n",{"type":17,"tag":329,"props":14461,"children":14462},{"class":331,"line":350},[14463],{"type":17,"tag":329,"props":14464,"children":14465},{"emptyLinePlaceholder":542},[14466],{"type":23,"value":545},{"type":17,"tag":329,"props":14468,"children":14469},{"class":331,"line":359},[14470],{"type":17,"tag":329,"props":14471,"children":14472},{},[14473],{"type":23,"value":14474},"    ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext(\"spring-factory.xml\");\n",{"type":17,"tag":329,"props":14476,"children":14477},{"class":331,"line":368},[14478],{"type":17,"tag":329,"props":14479,"children":14480},{"emptyLinePlaceholder":542},[14481],{"type":23,"value":545},{"type":17,"tag":329,"props":14483,"children":14484},{"class":331,"line":377},[14485],{"type":17,"tag":329,"props":14486,"children":14487},{},[14488],{"type":23,"value":14489},"    User bean = ioc.getBean(User.class);\n",{"type":17,"tag":329,"props":14491,"children":14492},{"class":331,"line":386},[14493],{"type":17,"tag":329,"props":14494,"children":14495},{},[14496],{"type":23,"value":10890},{"type":17,"tag":329,"props":14498,"children":14499},{"class":331,"line":394},[14500],{"type":17,"tag":329,"props":14501,"children":14502},{"emptyLinePlaceholder":542},[14503],{"type":23,"value":545},{"type":17,"tag":329,"props":14505,"children":14506},{"class":331,"line":403},[14507],{"type":17,"tag":329,"props":14508,"children":14509},{},[14510],{"type":23,"value":753},{"type":17,"tag":329,"props":14512,"children":14513},{"class":331,"line":412},[14514],{"type":17,"tag":329,"props":14515,"children":14516},{"emptyLinePlaceholder":542},[14517],{"type":23,"value":545},{"type":17,"tag":329,"props":14519,"children":14520},{"class":331,"line":421},[14521],{"type":17,"tag":329,"props":14522,"children":14523},{},[14524],{"type":23,"value":14525},"\u002F\u002F 打印结果，只有生命周期第一步，因为没有进行依赖注入，\n",{"type":17,"tag":329,"props":14527,"children":14528},{"class":331,"line":430},[14529],{"type":17,"tag":329,"props":14530,"children":14531},{},[14532],{"type":23,"value":14533},"\u002F\u002F 生命周期1：实例化\n",{"type":17,"tag":329,"props":14535,"children":14536},{"class":331,"line":439},[14537],{"type":17,"tag":329,"props":14538,"children":14539},{},[14540],{"type":23,"value":14541},"\u002F\u002F User{id=null, username='null', password='null', age=null}\n",{"type":17,"tag":3272,"props":14543,"children":14545},{"id":14544},"_2312-基于xml的自动装配",[14546],{"type":23,"value":14547},"2.3.12 基于xml的自动装配",{"type":17,"tag":53,"props":14549,"children":14550},{},[14551,14556,14561,14566],{"type":17,"tag":57,"props":14552,"children":14553},{},[14554],{"type":23,"value":14555},"根据指定的策略，在IOC容器匹配某一个bean，自动为指定的bean中所依赖的类类型或者接口类型属性赋值",{"type":17,"tag":57,"props":14557,"children":14558},{},[14559],{"type":23,"value":14560},"可以通过bean标签中的autowire属性设置自定装配策略",{"type":17,"tag":57,"props":14562,"children":14563},{},[14564],{"type":23,"value":14565},"可选值：",{"type":17,"tag":31,"props":14567,"children":14568},{},[14569,14574],{"type":17,"tag":35,"props":14570,"children":14571},{},[14572],{"type":23,"value":14573},"no、default：不装配",{"type":17,"tag":35,"props":14575,"children":14576},{},[14577],{"type":23,"value":14578},"bytype：根据要赋值的属性的类型，在IOC容器中匹配某个bean，为属性赋值",{"type":17,"tag":57,"props":14580,"children":14581},{},[14582],{"type":17,"tag":86,"props":14583,"children":14584},{},[14585],{"type":23,"value":14586},"byType",{"type":17,"tag":319,"props":14588,"children":14590},{"className":1376,"code":14589,"language":1378,"meta":7,"style":7},"\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\u003Cbeans xmlns=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\"\n       xmlns:xsi=\"http:\u002F\u002Fwww.w3.org\u002F2001\u002FXMLSchema-instance\"\n       xsi:schemaLocation=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\u002Fspring-beans.xsd\">\n\n\n    \u003Cbean id=\"userController\" class=\"com.wangkun.spring.controller.UserController\" autowire=\"byType\">\n\u003C!--        \u003Cproperty name=\"userService\" ref=\"userService\"\u002F>-->\n    \u003C\u002Fbean>\n\n    \u003Cbean class=\"com.wangkun.spring.service.impl.UserServiceImpl\" id=\"userService\" autowire=\"byType\">\n\u003C!--        \u003Cproperty name=\"userDao\" ref=\"userDao\"\u002F>-->\n    \u003C\u002Fbean>\n\n    \u003Cbean class=\"com.wangkun.spring.dao.impl.UserDaoImpl\" id=\"userDao\">\n    \u003C\u002Fbean>\n\u003C\u002Fbeans>\n",[14591],{"type":17,"tag":293,"props":14592,"children":14593},{"__ignoreMap":7},[14594,14601,14608,14615,14622,14629,14636,14644,14652,14659,14666,14674,14682,14689,14696,14704,14711],{"type":17,"tag":329,"props":14595,"children":14596},{"class":331,"line":332},[14597],{"type":17,"tag":329,"props":14598,"children":14599},{},[14600],{"type":23,"value":7968},{"type":17,"tag":329,"props":14602,"children":14603},{"class":331,"line":341},[14604],{"type":17,"tag":329,"props":14605,"children":14606},{},[14607],{"type":23,"value":10514},{"type":17,"tag":329,"props":14609,"children":14610},{"class":331,"line":350},[14611],{"type":17,"tag":329,"props":14612,"children":14613},{},[14614],{"type":23,"value":10522},{"type":17,"tag":329,"props":14616,"children":14617},{"class":331,"line":359},[14618],{"type":17,"tag":329,"props":14619,"children":14620},{},[14621],{"type":23,"value":10530},{"type":17,"tag":329,"props":14623,"children":14624},{"class":331,"line":368},[14625],{"type":17,"tag":329,"props":14626,"children":14627},{"emptyLinePlaceholder":542},[14628],{"type":23,"value":545},{"type":17,"tag":329,"props":14630,"children":14631},{"class":331,"line":377},[14632],{"type":17,"tag":329,"props":14633,"children":14634},{"emptyLinePlaceholder":542},[14635],{"type":23,"value":545},{"type":17,"tag":329,"props":14637,"children":14638},{"class":331,"line":386},[14639],{"type":17,"tag":329,"props":14640,"children":14641},{},[14642],{"type":23,"value":14643},"    \u003Cbean id=\"userController\" class=\"com.wangkun.spring.controller.UserController\" autowire=\"byType\">\n",{"type":17,"tag":329,"props":14645,"children":14646},{"class":331,"line":394},[14647],{"type":17,"tag":329,"props":14648,"children":14649},{},[14650],{"type":23,"value":14651},"\u003C!--        \u003Cproperty name=\"userService\" ref=\"userService\"\u002F>-->\n",{"type":17,"tag":329,"props":14653,"children":14654},{"class":331,"line":403},[14655],{"type":17,"tag":329,"props":14656,"children":14657},{},[14658],{"type":23,"value":13302},{"type":17,"tag":329,"props":14660,"children":14661},{"class":331,"line":412},[14662],{"type":17,"tag":329,"props":14663,"children":14664},{"emptyLinePlaceholder":542},[14665],{"type":23,"value":545},{"type":17,"tag":329,"props":14667,"children":14668},{"class":331,"line":421},[14669],{"type":17,"tag":329,"props":14670,"children":14671},{},[14672],{"type":23,"value":14673},"    \u003Cbean class=\"com.wangkun.spring.service.impl.UserServiceImpl\" id=\"userService\" autowire=\"byType\">\n",{"type":17,"tag":329,"props":14675,"children":14676},{"class":331,"line":430},[14677],{"type":17,"tag":329,"props":14678,"children":14679},{},[14680],{"type":23,"value":14681},"\u003C!--        \u003Cproperty name=\"userDao\" ref=\"userDao\"\u002F>-->\n",{"type":17,"tag":329,"props":14683,"children":14684},{"class":331,"line":439},[14685],{"type":17,"tag":329,"props":14686,"children":14687},{},[14688],{"type":23,"value":13302},{"type":17,"tag":329,"props":14690,"children":14691},{"class":331,"line":447},[14692],{"type":17,"tag":329,"props":14693,"children":14694},{"emptyLinePlaceholder":542},[14695],{"type":23,"value":545},{"type":17,"tag":329,"props":14697,"children":14698},{"class":331,"line":456},[14699],{"type":17,"tag":329,"props":14700,"children":14701},{},[14702],{"type":23,"value":14703},"    \u003Cbean class=\"com.wangkun.spring.dao.impl.UserDaoImpl\" id=\"userDao\">\n",{"type":17,"tag":329,"props":14705,"children":14706},{"class":331,"line":465},[14707],{"type":17,"tag":329,"props":14708,"children":14709},{},[14710],{"type":23,"value":13302},{"type":17,"tag":329,"props":14712,"children":14713},{"class":331,"line":474},[14714],{"type":17,"tag":329,"props":14715,"children":14716},{},[14717],{"type":23,"value":10608},{"type":17,"tag":4624,"props":14719,"children":14721},{"id":14720},"byname",[14722],{"type":17,"tag":86,"props":14723,"children":14724},{},[14725],{"type":23,"value":14726},"byName",{"type":17,"tag":319,"props":14728,"children":14730},{"className":1376,"code":14729,"language":1378,"meta":7,"style":7},"\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\u003Cbeans xmlns=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\"\n       xmlns:xsi=\"http:\u002F\u002Fwww.w3.org\u002F2001\u002FXMLSchema-instance\"\n       xsi:schemaLocation=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\u002Fspring-beans.xsd\">\n\n\n    \u003Cbean id=\"userController\" class=\"com.wangkun.spring.controller.UserController\" autowire=\"byName\">\n\u003C!--        \u003Cproperty name=\"userService\" ref=\"userService\"\u002F>-->\n    \u003C\u002Fbean>\n\n    \u003Cbean class=\"com.wangkun.spring.service.impl.UserServiceImpl\" id=\"userService\" autowire=\"byName\">\n\u003C!--        \u003Cproperty name=\"userDao\" ref=\"userDao\"\u002F>-->\n    \u003C\u002Fbean>\n\n    \u003Cbean class=\"com.wangkun.spring.dao.impl.UserDaoImpl\" id=\"userDao\">\n    \u003C\u002Fbean>\n\u003C\u002Fbeans>\n",[14731],{"type":17,"tag":293,"props":14732,"children":14733},{"__ignoreMap":7},[14734,14741,14748,14755,14762,14769,14776,14784,14791,14798,14805,14813,14820,14827,14834,14841,14848],{"type":17,"tag":329,"props":14735,"children":14736},{"class":331,"line":332},[14737],{"type":17,"tag":329,"props":14738,"children":14739},{},[14740],{"type":23,"value":7968},{"type":17,"tag":329,"props":14742,"children":14743},{"class":331,"line":341},[14744],{"type":17,"tag":329,"props":14745,"children":14746},{},[14747],{"type":23,"value":10514},{"type":17,"tag":329,"props":14749,"children":14750},{"class":331,"line":350},[14751],{"type":17,"tag":329,"props":14752,"children":14753},{},[14754],{"type":23,"value":10522},{"type":17,"tag":329,"props":14756,"children":14757},{"class":331,"line":359},[14758],{"type":17,"tag":329,"props":14759,"children":14760},{},[14761],{"type":23,"value":10530},{"type":17,"tag":329,"props":14763,"children":14764},{"class":331,"line":368},[14765],{"type":17,"tag":329,"props":14766,"children":14767},{"emptyLinePlaceholder":542},[14768],{"type":23,"value":545},{"type":17,"tag":329,"props":14770,"children":14771},{"class":331,"line":377},[14772],{"type":17,"tag":329,"props":14773,"children":14774},{"emptyLinePlaceholder":542},[14775],{"type":23,"value":545},{"type":17,"tag":329,"props":14777,"children":14778},{"class":331,"line":386},[14779],{"type":17,"tag":329,"props":14780,"children":14781},{},[14782],{"type":23,"value":14783},"    \u003Cbean id=\"userController\" class=\"com.wangkun.spring.controller.UserController\" autowire=\"byName\">\n",{"type":17,"tag":329,"props":14785,"children":14786},{"class":331,"line":394},[14787],{"type":17,"tag":329,"props":14788,"children":14789},{},[14790],{"type":23,"value":14651},{"type":17,"tag":329,"props":14792,"children":14793},{"class":331,"line":403},[14794],{"type":17,"tag":329,"props":14795,"children":14796},{},[14797],{"type":23,"value":13302},{"type":17,"tag":329,"props":14799,"children":14800},{"class":331,"line":412},[14801],{"type":17,"tag":329,"props":14802,"children":14803},{"emptyLinePlaceholder":542},[14804],{"type":23,"value":545},{"type":17,"tag":329,"props":14806,"children":14807},{"class":331,"line":421},[14808],{"type":17,"tag":329,"props":14809,"children":14810},{},[14811],{"type":23,"value":14812},"    \u003Cbean class=\"com.wangkun.spring.service.impl.UserServiceImpl\" id=\"userService\" autowire=\"byName\">\n",{"type":17,"tag":329,"props":14814,"children":14815},{"class":331,"line":430},[14816],{"type":17,"tag":329,"props":14817,"children":14818},{},[14819],{"type":23,"value":14681},{"type":17,"tag":329,"props":14821,"children":14822},{"class":331,"line":439},[14823],{"type":17,"tag":329,"props":14824,"children":14825},{},[14826],{"type":23,"value":13302},{"type":17,"tag":329,"props":14828,"children":14829},{"class":331,"line":447},[14830],{"type":17,"tag":329,"props":14831,"children":14832},{"emptyLinePlaceholder":542},[14833],{"type":23,"value":545},{"type":17,"tag":329,"props":14835,"children":14836},{"class":331,"line":456},[14837],{"type":17,"tag":329,"props":14838,"children":14839},{},[14840],{"type":23,"value":14703},{"type":17,"tag":329,"props":14842,"children":14843},{"class":331,"line":465},[14844],{"type":17,"tag":329,"props":14845,"children":14846},{},[14847],{"type":23,"value":13302},{"type":17,"tag":329,"props":14849,"children":14850},{"class":331,"line":474},[14851],{"type":17,"tag":329,"props":14852,"children":14853},{},[14854],{"type":23,"value":10608},{"type":17,"tag":57,"props":14856,"children":14857},{},[14858],{"type":23,"value":14859},"**总结：**当类型匹配的bean有多个时，此时可以使用byName实现自动装配",{"type":17,"tag":74,"props":14861,"children":14863},{"id":14862},"_24-基于注解管理bean",[14864],{"type":23,"value":14865},"2.4 基于注解管理bean",{"type":17,"tag":53,"props":14867,"children":14868},{},[14869,14874],{"type":17,"tag":57,"props":14870,"children":14871},{},[14872],{"type":23,"value":14873},"常用的注解：",{"type":17,"tag":31,"props":14875,"children":14876},{},[14877,14882,14887,14892],{"type":17,"tag":35,"props":14878,"children":14879},{},[14880],{"type":23,"value":14881},"@Component：将类标识为普通组件",{"type":17,"tag":35,"props":14883,"children":14884},{},[14885],{"type":23,"value":14886},"@Controller：将类标识为控制层组件",{"type":17,"tag":35,"props":14888,"children":14889},{},[14890],{"type":23,"value":14891},"@Service：将类标识为业务层组件",{"type":17,"tag":35,"props":14893,"children":14894},{},[14895],{"type":23,"value":14896},"@Repository：将类标识为持久层组件",{"type":17,"tag":3272,"props":14898,"children":14900},{"id":14899},"_241-扫描组件",[14901,14903],{"type":23,"value":14902},"2.4.1 ",{"type":17,"tag":86,"props":14904,"children":14905},{},[14906],{"type":23,"value":14907},"扫描组件：",{"type":17,"tag":245,"props":14909,"children":14910},{},[14911],{"type":17,"tag":35,"props":14912,"children":14913},{},[14914],{"type":23,"value":14915},"情况一：最基本的扫描方式",{"type":17,"tag":319,"props":14917,"children":14919},{"className":1376,"code":14918,"language":1378,"meta":7,"style":7},"\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\u003Cbeans xmlns=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\"\n       xmlns:xsi=\"http:\u002F\u002Fwww.w3.org\u002F2001\u002FXMLSchema-instance\"\n       xmlns:context=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fcontext\"\n       xsi:schemaLocation=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\n       http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\u002Fspring-beans.xsd\n       http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fcontext\n       https:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fcontext\u002Fspring-context.xsd\"\n>\n\n    \u003Ccontext:component-scan base-package=\"com.wangkun.spring\"\u002F>\n    \n\u003C\u002Fbeans>\n",[14920],{"type":17,"tag":293,"props":14921,"children":14922},{"__ignoreMap":7},[14923,14930,14937,14944,14951,14959,14967,14975,14983,14991,14998,15006,15014],{"type":17,"tag":329,"props":14924,"children":14925},{"class":331,"line":332},[14926],{"type":17,"tag":329,"props":14927,"children":14928},{},[14929],{"type":23,"value":7968},{"type":17,"tag":329,"props":14931,"children":14932},{"class":331,"line":341},[14933],{"type":17,"tag":329,"props":14934,"children":14935},{},[14936],{"type":23,"value":10514},{"type":17,"tag":329,"props":14938,"children":14939},{"class":331,"line":350},[14940],{"type":17,"tag":329,"props":14941,"children":14942},{},[14943],{"type":23,"value":10522},{"type":17,"tag":329,"props":14945,"children":14946},{"class":331,"line":359},[14947],{"type":17,"tag":329,"props":14948,"children":14949},{},[14950],{"type":23,"value":13184},{"type":17,"tag":329,"props":14952,"children":14953},{"class":331,"line":368},[14954],{"type":17,"tag":329,"props":14955,"children":14956},{},[14957],{"type":23,"value":14958},"       xsi:schemaLocation=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\n",{"type":17,"tag":329,"props":14960,"children":14961},{"class":331,"line":377},[14962],{"type":17,"tag":329,"props":14963,"children":14964},{},[14965],{"type":23,"value":14966},"       http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\u002Fspring-beans.xsd\n",{"type":17,"tag":329,"props":14968,"children":14969},{"class":331,"line":386},[14970],{"type":17,"tag":329,"props":14971,"children":14972},{},[14973],{"type":23,"value":14974},"       http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fcontext\n",{"type":17,"tag":329,"props":14976,"children":14977},{"class":331,"line":394},[14978],{"type":17,"tag":329,"props":14979,"children":14980},{},[14981],{"type":23,"value":14982},"       https:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fcontext\u002Fspring-context.xsd\"\n",{"type":17,"tag":329,"props":14984,"children":14985},{"class":331,"line":403},[14986],{"type":17,"tag":329,"props":14987,"children":14988},{},[14989],{"type":23,"value":14990},">\n",{"type":17,"tag":329,"props":14992,"children":14993},{"class":331,"line":412},[14994],{"type":17,"tag":329,"props":14995,"children":14996},{"emptyLinePlaceholder":542},[14997],{"type":23,"value":545},{"type":17,"tag":329,"props":14999,"children":15000},{"class":331,"line":421},[15001],{"type":17,"tag":329,"props":15002,"children":15003},{},[15004],{"type":23,"value":15005},"    \u003Ccontext:component-scan base-package=\"com.wangkun.spring\"\u002F>\n",{"type":17,"tag":329,"props":15007,"children":15008},{"class":331,"line":430},[15009],{"type":17,"tag":329,"props":15010,"children":15011},{},[15012],{"type":23,"value":15013},"    \n",{"type":17,"tag":329,"props":15015,"children":15016},{"class":331,"line":439},[15017],{"type":17,"tag":329,"props":15018,"children":15019},{},[15020],{"type":23,"value":10608},{"type":17,"tag":245,"props":15022,"children":15023},{"start":341},[15024],{"type":17,"tag":35,"props":15025,"children":15026},{},[15027],{"type":23,"value":15028},"情况二：指定要配出的组件",{"type":17,"tag":53,"props":15030,"children":15031},{},[15032,15037],{"type":17,"tag":57,"props":15033,"children":15034},{},[15035],{"type":23,"value":15036},"type：",{"type":17,"tag":31,"props":15038,"children":15039},{},[15040,15051],{"type":17,"tag":35,"props":15041,"children":15042},{},[15043,15049],{"type":17,"tag":293,"props":15044,"children":15046},{"className":15045},[],[15047],{"type":23,"value":15048},"annotation",{"type":23,"value":15050},"：根据注解排除，expression中设置要排除的注解的全类名",{"type":17,"tag":35,"props":15052,"children":15053},{},[15054,15060],{"type":17,"tag":293,"props":15055,"children":15057},{"className":15056},[],[15058],{"type":23,"value":15059},"assignable",{"type":23,"value":15061},"：根据类型排除，expression中设置要排除的类型的全类名",{"type":17,"tag":245,"props":15063,"children":15064},{"start":350},[15065],{"type":17,"tag":35,"props":15066,"children":15067},{},[15068],{"type":23,"value":15069},"情况三：指定要扫描的组件",{"type":17,"tag":53,"props":15071,"children":15072},{},[15073,15078,15083,15088,15092],{"type":17,"tag":57,"props":15074,"children":15075},{},[15076],{"type":23,"value":15077},"context:include-filter标签：指定在原有扫描规则的基础上追加的规则",{"type":17,"tag":57,"props":15079,"children":15080},{},[15081],{"type":23,"value":15082},"use-default-filters属性：取值false表示关闭默认扫描规则",{"type":17,"tag":57,"props":15084,"children":15085},{},[15086],{"type":23,"value":15087},"此时必须设置use-default-filters=\"false\"，因为默认规则即扫描指定包下所有类",{"type":17,"tag":57,"props":15089,"children":15090},{},[15091],{"type":23,"value":15036},{"type":17,"tag":31,"props":15093,"children":15094},{},[15095,15105],{"type":17,"tag":35,"props":15096,"children":15097},{},[15098,15103],{"type":17,"tag":293,"props":15099,"children":15101},{"className":15100},[],[15102],{"type":23,"value":15048},{"type":23,"value":15104},"：根据注解扫描，expression中设置要扫描的注解的全类名",{"type":17,"tag":35,"props":15106,"children":15107},{},[15108,15113],{"type":17,"tag":293,"props":15109,"children":15111},{"className":15110},[],[15112],{"type":23,"value":15059},{"type":23,"value":15114},"：根据类型扫描，expression中设置要扫描的类型的全类名",{"type":17,"tag":3272,"props":15116,"children":15118},{"id":15117},"_242-自定义组件bean的id",[15119],{"type":23,"value":15120},"2.4.2 自定义组件bean的id",{"type":17,"tag":53,"props":15122,"children":15123},{},[15124],{"type":17,"tag":57,"props":15125,"children":15126},{},[15127,15129,15134],{"type":23,"value":15128},"基于注解的管理的bean默认id就是",{"type":17,"tag":86,"props":15130,"children":15131},{},[15132],{"type":23,"value":15133},"首字母小写的类名",{"type":23,"value":15135},"，我们可以通过注解中的value属性自定义id",{"type":17,"tag":319,"props":15137,"children":15139},{"className":321,"code":15138,"language":323,"meta":7,"style":7},"@Controller(\"controller\")\npublic class UserController {\n  \n}\n\n\u002F\u002F 测试\nClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext(\"applicationContext.xml\");\n\n\u002F\u002F 默认id\nObject controller1 = ioc.getBean(\"userController\");\n\u002F\u002F 自定义id\nObject controller2 = ioc.getBean(\"controller\");\nSystem.out.println(controller);\n",[15140],{"type":17,"tag":293,"props":15141,"children":15142},{"__ignoreMap":7},[15143,15151,15159,15166,15173,15180,15188,15196,15203,15211,15219,15227,15235],{"type":17,"tag":329,"props":15144,"children":15145},{"class":331,"line":332},[15146],{"type":17,"tag":329,"props":15147,"children":15148},{},[15149],{"type":23,"value":15150},"@Controller(\"controller\")\n",{"type":17,"tag":329,"props":15152,"children":15153},{"class":331,"line":341},[15154],{"type":17,"tag":329,"props":15155,"children":15156},{},[15157],{"type":23,"value":15158},"public class UserController {\n",{"type":17,"tag":329,"props":15160,"children":15161},{"class":331,"line":350},[15162],{"type":17,"tag":329,"props":15163,"children":15164},{},[15165],{"type":23,"value":1602},{"type":17,"tag":329,"props":15167,"children":15168},{"class":331,"line":359},[15169],{"type":17,"tag":329,"props":15170,"children":15171},{},[15172],{"type":23,"value":753},{"type":17,"tag":329,"props":15174,"children":15175},{"class":331,"line":368},[15176],{"type":17,"tag":329,"props":15177,"children":15178},{"emptyLinePlaceholder":542},[15179],{"type":23,"value":545},{"type":17,"tag":329,"props":15181,"children":15182},{"class":331,"line":377},[15183],{"type":17,"tag":329,"props":15184,"children":15185},{},[15186],{"type":23,"value":15187},"\u002F\u002F 测试\n",{"type":17,"tag":329,"props":15189,"children":15190},{"class":331,"line":386},[15191],{"type":17,"tag":329,"props":15192,"children":15193},{},[15194],{"type":23,"value":15195},"ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext(\"applicationContext.xml\");\n",{"type":17,"tag":329,"props":15197,"children":15198},{"class":331,"line":394},[15199],{"type":17,"tag":329,"props":15200,"children":15201},{"emptyLinePlaceholder":542},[15202],{"type":23,"value":545},{"type":17,"tag":329,"props":15204,"children":15205},{"class":331,"line":403},[15206],{"type":17,"tag":329,"props":15207,"children":15208},{},[15209],{"type":23,"value":15210},"\u002F\u002F 默认id\n",{"type":17,"tag":329,"props":15212,"children":15213},{"class":331,"line":412},[15214],{"type":17,"tag":329,"props":15215,"children":15216},{},[15217],{"type":23,"value":15218},"Object controller1 = ioc.getBean(\"userController\");\n",{"type":17,"tag":329,"props":15220,"children":15221},{"class":331,"line":421},[15222],{"type":17,"tag":329,"props":15223,"children":15224},{},[15225],{"type":23,"value":15226},"\u002F\u002F 自定义id\n",{"type":17,"tag":329,"props":15228,"children":15229},{"class":331,"line":430},[15230],{"type":17,"tag":329,"props":15231,"children":15232},{},[15233],{"type":23,"value":15234},"Object controller2 = ioc.getBean(\"controller\");\n",{"type":17,"tag":329,"props":15236,"children":15237},{"class":331,"line":439},[15238],{"type":17,"tag":329,"props":15239,"children":15240},{},[15241],{"type":23,"value":15242},"System.out.println(controller);\n",{"type":17,"tag":3272,"props":15244,"children":15246},{"id":15245},"_243-基于注解的自动装配",[15247],{"type":23,"value":15248},"2.4.3 基于注解的自动装配",{"type":17,"tag":53,"props":15250,"children":15251},{},[15252,15260,15278,15286,15317],{"type":17,"tag":57,"props":15253,"children":15254},{},[15255],{"type":17,"tag":86,"props":15256,"children":15257},{},[15258],{"type":23,"value":15259},"@Autowired注解能够标识的位置",{"type":17,"tag":31,"props":15261,"children":15262},{},[15263,15268,15273],{"type":17,"tag":35,"props":15264,"children":15265},{},[15266],{"type":23,"value":15267},"标识在成员变量上，此时不需要设置成员变量的set方法",{"type":17,"tag":35,"props":15269,"children":15270},{},[15271],{"type":23,"value":15272},"标识在set方法上",{"type":17,"tag":35,"props":15274,"children":15275},{},[15276],{"type":23,"value":15277},"标识在为当前成员变量赋值的有参构造上",{"type":17,"tag":57,"props":15279,"children":15280},{},[15281],{"type":17,"tag":86,"props":15282,"children":15283},{},[15284],{"type":23,"value":15285},"@Autowired注解原理",{"type":17,"tag":31,"props":15287,"children":15288},{},[15289,15294,15299,15304],{"type":17,"tag":35,"props":15290,"children":15291},{},[15292],{"type":23,"value":15293},"默认通过byType的方式，在IOC容器中通过类型匹配某个bean为属性赋值",{"type":17,"tag":35,"props":15295,"children":15296},{},[15297],{"type":23,"value":15298},"若有多了类型匹配的bean，此时会自动转换为byName的方式实现自动装备的效果，将要赋值的属性的属性名作为bean的id匹配某个bean为属性赋值",{"type":17,"tag":35,"props":15300,"children":15301},{},[15302],{"type":23,"value":15303},"若byType与byName的方式都无法实现自动装配，即IOC容器中有多个类型匹配的bean，且这些bean的id和要赋值的属性的属性名都一致，会抛出异常",{"type":17,"tag":35,"props":15305,"children":15306},{},[15307,15309,15315],{"type":23,"value":15308},"此时可以再要赋值的属性上，添加一个注解",{"type":17,"tag":293,"props":15310,"children":15312},{"className":15311},[],[15313],{"type":23,"value":15314},"@Qualifier",{"type":23,"value":15316},"，通过该注解的value属性，指定某个bean的id，将这个bean为属性赋值",{"type":17,"tag":57,"props":15318,"children":15319},{},[15320],{"type":23,"value":15321},"@Autowired中有属性required，默认值为true，因此在自动装配无法找到相应的bean时，会装配失败可以将属性required的值设置为true，则表示能装就装，装不上就不装，此时自动装配的属性为默认，但是实际开发时，基本上所有需要装配组件的地方都是必须装配的，用不上这个属性。",{"type":17,"tag":319,"props":15323,"children":15325},{"className":321,"code":15324,"language":323,"meta":7,"style":7},"@Controller\npublic class UserController {\n\n    @Autowired\n    private UserService userService;\n\n    public void saveUser() {\n      \n        userService.saveUser();\n      \n    }\n}\n",[15326],{"type":17,"tag":293,"props":15327,"children":15328},{"__ignoreMap":7},[15329,15337,15344,15351,15359,15367,15374,15382,15390,15398,15405,15412],{"type":17,"tag":329,"props":15330,"children":15331},{"class":331,"line":332},[15332],{"type":17,"tag":329,"props":15333,"children":15334},{},[15335],{"type":23,"value":15336},"@Controller\n",{"type":17,"tag":329,"props":15338,"children":15339},{"class":331,"line":341},[15340],{"type":17,"tag":329,"props":15341,"children":15342},{},[15343],{"type":23,"value":15158},{"type":17,"tag":329,"props":15345,"children":15346},{"class":331,"line":350},[15347],{"type":17,"tag":329,"props":15348,"children":15349},{"emptyLinePlaceholder":542},[15350],{"type":23,"value":545},{"type":17,"tag":329,"props":15352,"children":15353},{"class":331,"line":359},[15354],{"type":17,"tag":329,"props":15355,"children":15356},{},[15357],{"type":23,"value":15358},"    @Autowired\n",{"type":17,"tag":329,"props":15360,"children":15361},{"class":331,"line":368},[15362],{"type":17,"tag":329,"props":15363,"children":15364},{},[15365],{"type":23,"value":15366},"    private UserService userService;\n",{"type":17,"tag":329,"props":15368,"children":15369},{"class":331,"line":377},[15370],{"type":17,"tag":329,"props":15371,"children":15372},{"emptyLinePlaceholder":542},[15373],{"type":23,"value":545},{"type":17,"tag":329,"props":15375,"children":15376},{"class":331,"line":386},[15377],{"type":17,"tag":329,"props":15378,"children":15379},{},[15380],{"type":23,"value":15381},"    public void saveUser() {\n",{"type":17,"tag":329,"props":15383,"children":15384},{"class":331,"line":394},[15385],{"type":17,"tag":329,"props":15386,"children":15387},{},[15388],{"type":23,"value":15389},"      \n",{"type":17,"tag":329,"props":15391,"children":15392},{"class":331,"line":403},[15393],{"type":17,"tag":329,"props":15394,"children":15395},{},[15396],{"type":23,"value":15397},"        userService.saveUser();\n",{"type":17,"tag":329,"props":15399,"children":15400},{"class":331,"line":412},[15401],{"type":17,"tag":329,"props":15402,"children":15403},{},[15404],{"type":23,"value":15389},{"type":17,"tag":329,"props":15406,"children":15407},{"class":331,"line":421},[15408],{"type":17,"tag":329,"props":15409,"children":15410},{},[15411],{"type":23,"value":1351},{"type":17,"tag":329,"props":15413,"children":15414},{"class":331,"line":430},[15415],{"type":17,"tag":329,"props":15416,"children":15417},{},[15418],{"type":23,"value":753},{"type":17,"tag":25,"props":15420,"children":15422},{"id":15421},"_3-aop",[15423],{"type":23,"value":15424},"3. AOP",{"type":17,"tag":74,"props":15426,"children":15428},{"id":15427},"_31-aop概念及相关术语",[15429],{"type":23,"value":15430},"3.1 AOP概念及相关术语",{"type":17,"tag":53,"props":15432,"children":15433},{},[15434,15439],{"type":17,"tag":57,"props":15435,"children":15436},{},[15437],{"type":23,"value":15438},"AOP（Aspect Oriented Programming）是一种设计思想，是软件设计领域中的面向切面编程，它是面向对象编程的一种补充和完善，它以通过预编译方式和运行期动态代理方式实现在不修改源代码的情况下给程序动态统一添加额外功能的一种技术。",{"type":17,"tag":57,"props":15440,"children":15441},{},[15442],{"type":23,"value":15443},"我们需要做的事：创建切面，创建通知，通过切入点表达式，把通知作用在连接点",{"type":17,"tag":3272,"props":15445,"children":15447},{"id":15446},"_311-相关术语",[15448],{"type":23,"value":15449},"3.1.1 相关术语",{"type":17,"tag":31,"props":15451,"children":15452},{},[15453,15469,15559,15564,15569,15574],{"type":17,"tag":35,"props":15454,"children":15455},{},[15456,15461],{"type":17,"tag":86,"props":15457,"children":15458},{},[15459],{"type":23,"value":15460},"横切关注点：",{"type":17,"tag":31,"props":15462,"children":15463},{},[15464],{"type":17,"tag":35,"props":15465,"children":15466},{},[15467],{"type":23,"value":15468},"从每个方法中抽取出来的同一类非核心业务。在同一个项目中，我们可以使用多个横切关注点对相关方法进行多个不同方面的增强。这个概不是语法层面天然存在的，而是根据附加功能逻辑上的需要：有十个附加功能，就有十个横切关注点。（如上述案例的日志功能）",{"type":17,"tag":35,"props":15470,"children":15471},{},[15472,15477,15479],{"type":17,"tag":86,"props":15473,"children":15474},{},[15475],{"type":23,"value":15476},"通知",{"type":23,"value":15478},"：每一个横切关注点上要做的事情都需要写一个方法来实现，这样的方法就叫通知方法。（通知就是添加功能的方法，就是代理后的方法）\n",{"type":17,"tag":31,"props":15480,"children":15481},{},[15482,15494,15513,15530,15547],{"type":17,"tag":35,"props":15483,"children":15484},{},[15485,15487,15492],{"type":23,"value":15486},"前置通知：在被代理的目标方法",{"type":17,"tag":86,"props":15488,"children":15489},{},[15490],{"type":23,"value":15491},"前",{"type":23,"value":15493},"执行",{"type":17,"tag":35,"props":15495,"children":15496},{},[15497,15499,15504,15506,15511],{"type":23,"value":15498},"返回通知：在被代理的目标方法",{"type":17,"tag":86,"props":15500,"children":15501},{},[15502],{"type":23,"value":15503},"成功结束",{"type":23,"value":15505},"后执行（",{"type":17,"tag":86,"props":15507,"children":15508},{},[15509],{"type":23,"value":15510},"寿终正寝",{"type":23,"value":15512},"）",{"type":17,"tag":35,"props":15514,"children":15515},{},[15516,15518,15523,15524,15529],{"type":23,"value":15517},"异常通知：在被代理的目标方法",{"type":17,"tag":86,"props":15519,"children":15520},{},[15521],{"type":23,"value":15522},"异常结束",{"type":23,"value":15505},{"type":17,"tag":86,"props":15525,"children":15526},{},[15527],{"type":23,"value":15528},"死于非命",{"type":23,"value":15512},{"type":17,"tag":35,"props":15531,"children":15532},{},[15533,15535,15540,15541,15546],{"type":23,"value":15534},"后置通知：在被代理的目标方法",{"type":17,"tag":86,"props":15536,"children":15537},{},[15538],{"type":23,"value":15539},"最终结束",{"type":23,"value":15505},{"type":17,"tag":86,"props":15542,"children":15543},{},[15544],{"type":23,"value":15545},"盖棺定论",{"type":23,"value":15512},{"type":17,"tag":35,"props":15548,"children":15549},{},[15550,15552,15557],{"type":23,"value":15551},"环绕通知：使用try...catch...finally结构围绕",{"type":17,"tag":86,"props":15553,"children":15554},{},[15555],{"type":23,"value":15556},"整个",{"type":23,"value":15558},"被代理的目标方法，包括上面四种通知对应的所有位置（相当于上述的「参数是。。。结果是。。。」）",{"type":17,"tag":35,"props":15560,"children":15561},{},[15562],{"type":23,"value":15563},"**目标：**被代理的目标对象。",{"type":17,"tag":35,"props":15565,"children":15566},{},[15567],{"type":23,"value":15568},"**代理：**向目标对象应用通知之后创建的代理对象。",{"type":17,"tag":35,"props":15570,"children":15571},{},[15572],{"type":23,"value":15573},"**连接点：**这也是一个纯逻辑概念，不是语法定义的。把方法排成一排，每一个横切位置看成x轴方向，把方法从上到下执行的顺序看成y轴，x轴和y轴的交叉点就是连接点。（连接点就是目标方法）",{"type":17,"tag":35,"props":15575,"children":15576},{},[15577],{"type":23,"value":15578},"**切入点：**定位连接点的方式。每个类的方法中都包含多个连接点，所以连接点是类中客观存在的事物（从逻辑上来说）。如果把连接点看作数据中的记录，那么切入点就是查询记录的 SQL 语句。Spring 的 AOP 技术可以通过切入点定位到特定的连接点。切点通过 org.springframework.aop.Pointcut 接口进行描述，它使用类和方法作为连接点的查询条件。（就是通知上面的注解）",{"type":17,"tag":3272,"props":15580,"children":15582},{"id":15581},"_312-作用",[15583],{"type":23,"value":15584},"3.1.2 作用",{"type":17,"tag":31,"props":15586,"children":15587},{},[15588,15600],{"type":17,"tag":35,"props":15589,"children":15590},{},[15591,15593,15598],{"type":23,"value":15592},"简化代码：把方法中固定位置的重复的代码",{"type":17,"tag":86,"props":15594,"children":15595},{},[15596],{"type":23,"value":15597},"抽取",{"type":23,"value":15599},"出来，让被抽取的方法更专注于自己的核心功能，提高内聚性。",{"type":17,"tag":35,"props":15601,"children":15602},{},[15603,15605,15610],{"type":23,"value":15604},"代码增强：把特定的功能封装到切面类中，看哪里有需要，就往上套，被",{"type":17,"tag":86,"props":15606,"children":15607},{},[15608],{"type":23,"value":15609},"套用",{"type":23,"value":15611},"了切面逻辑的方法就被切面给增强了。",{"type":17,"tag":74,"props":15613,"children":15615},{"id":15614},"_32基于注解的aop",[15616],{"type":23,"value":15617},"3.2基于注解的AOP",{"type":17,"tag":3272,"props":15619,"children":15621},{"id":15620},"_321-步骤",[15622],{"type":23,"value":15623},"3.2.1 步骤",{"type":17,"tag":53,"props":15625,"children":15626},{},[15627],{"type":17,"tag":31,"props":15628,"children":15629},{},[15630,15635,15640],{"type":17,"tag":35,"props":15631,"children":15632},{},[15633],{"type":23,"value":15634},"将目标对象和切面交给IOC容器管理（注解+扫描）",{"type":17,"tag":35,"props":15636,"children":15637},{},[15638],{"type":23,"value":15639},"开启AspectJ的自动代理，为目标对象自动生成代理",{"type":17,"tag":35,"props":15641,"children":15642},{},[15643],{"type":23,"value":15644},"将切面类通过注解@Aspect标识",{"type":17,"tag":245,"props":15646,"children":15647},{},[15648],{"type":17,"tag":35,"props":15649,"children":15650},{},[15651,15655],{"type":17,"tag":86,"props":15652,"children":15653},{},[15654],{"type":23,"value":9540},{"type":23,"value":15656},"：",{"type":17,"tag":319,"props":15658,"children":15660},{"className":1376,"code":15659,"language":1378,"meta":7,"style":7},"\u003Cdependencies>\n    \u003C!-- 基于Maven依赖传递性，导入spring-context依赖即可导入当前所需所有jar包 -->\n    \u003Cdependency>\n        \u003CgroupId>org.springframework\u003C\u002FgroupId>\n        \u003CartifactId>spring-context\u003C\u002FartifactId>\n        \u003Cversion>5.3.1\u003C\u002Fversion>\n    \u003C\u002Fdependency>\n    \u003C!-- junit测试 -->\n    \u003Cdependency>\n        \u003CgroupId>junit\u003C\u002FgroupId>\n        \u003CartifactId>junit\u003C\u002FartifactId>\n        \u003Cversion>4.12\u003C\u002Fversion>\n        \u003Cscope>test\u003C\u002Fscope>\n    \u003C\u002Fdependency>\n\n    \u003C!-- spring-aspects会帮我们传递过来aspectjweaver -->\n    \u003Cdependency>\n        \u003CgroupId>org.springframework\u003C\u002FgroupId>\n        \u003CartifactId>spring-aspects\u003C\u002FartifactId>\n        \u003Cversion>5.3.1\u003C\u002Fversion>\n    \u003C\u002Fdependency>\n\u003C\u002Fdependencies>\n",[15661],{"type":17,"tag":293,"props":15662,"children":15663},{"__ignoreMap":7},[15664,15671,15678,15685,15692,15699,15706,15713,15720,15727,15734,15741,15748,15755,15762,15769,15777,15784,15791,15799,15806,15813],{"type":17,"tag":329,"props":15665,"children":15666},{"class":331,"line":332},[15667],{"type":17,"tag":329,"props":15668,"children":15669},{},[15670],{"type":23,"value":10282},{"type":17,"tag":329,"props":15672,"children":15673},{"class":331,"line":341},[15674],{"type":17,"tag":329,"props":15675,"children":15676},{},[15677],{"type":23,"value":10290},{"type":17,"tag":329,"props":15679,"children":15680},{"class":331,"line":350},[15681],{"type":17,"tag":329,"props":15682,"children":15683},{},[15684],{"type":23,"value":347},{"type":17,"tag":329,"props":15686,"children":15687},{"class":331,"line":359},[15688],{"type":17,"tag":329,"props":15689,"children":15690},{},[15691],{"type":23,"value":10305},{"type":17,"tag":329,"props":15693,"children":15694},{"class":331,"line":368},[15695],{"type":17,"tag":329,"props":15696,"children":15697},{},[15698],{"type":23,"value":10313},{"type":17,"tag":329,"props":15700,"children":15701},{"class":331,"line":377},[15702],{"type":17,"tag":329,"props":15703,"children":15704},{},[15705],{"type":23,"value":10321},{"type":17,"tag":329,"props":15707,"children":15708},{"class":331,"line":386},[15709],{"type":17,"tag":329,"props":15710,"children":15711},{},[15712],{"type":23,"value":480},{"type":17,"tag":329,"props":15714,"children":15715},{"class":331,"line":394},[15716],{"type":17,"tag":329,"props":15717,"children":15718},{},[15719],{"type":23,"value":10336},{"type":17,"tag":329,"props":15721,"children":15722},{"class":331,"line":403},[15723],{"type":17,"tag":329,"props":15724,"children":15725},{},[15726],{"type":23,"value":347},{"type":17,"tag":329,"props":15728,"children":15729},{"class":331,"line":412},[15730],{"type":17,"tag":329,"props":15731,"children":15732},{},[15733],{"type":23,"value":400},{"type":17,"tag":329,"props":15735,"children":15736},{"class":331,"line":421},[15737],{"type":17,"tag":329,"props":15738,"children":15739},{},[15740],{"type":23,"value":409},{"type":17,"tag":329,"props":15742,"children":15743},{"class":331,"line":430},[15744],{"type":17,"tag":329,"props":15745,"children":15746},{},[15747],{"type":23,"value":418},{"type":17,"tag":329,"props":15749,"children":15750},{"class":331,"line":439},[15751],{"type":17,"tag":329,"props":15752,"children":15753},{},[15754],{"type":23,"value":427},{"type":17,"tag":329,"props":15756,"children":15757},{"class":331,"line":447},[15758],{"type":17,"tag":329,"props":15759,"children":15760},{},[15761],{"type":23,"value":480},{"type":17,"tag":329,"props":15763,"children":15764},{"class":331,"line":456},[15765],{"type":17,"tag":329,"props":15766,"children":15767},{"emptyLinePlaceholder":542},[15768],{"type":23,"value":545},{"type":17,"tag":329,"props":15770,"children":15771},{"class":331,"line":465},[15772],{"type":17,"tag":329,"props":15773,"children":15774},{},[15775],{"type":23,"value":15776},"    \u003C!-- spring-aspects会帮我们传递过来aspectjweaver -->\n",{"type":17,"tag":329,"props":15778,"children":15779},{"class":331,"line":474},[15780],{"type":17,"tag":329,"props":15781,"children":15782},{},[15783],{"type":23,"value":347},{"type":17,"tag":329,"props":15785,"children":15786},{"class":331,"line":483},[15787],{"type":17,"tag":329,"props":15788,"children":15789},{},[15790],{"type":23,"value":10305},{"type":17,"tag":329,"props":15792,"children":15793},{"class":331,"line":667},[15794],{"type":17,"tag":329,"props":15795,"children":15796},{},[15797],{"type":23,"value":15798},"        \u003CartifactId>spring-aspects\u003C\u002FartifactId>\n",{"type":17,"tag":329,"props":15800,"children":15801},{"class":331,"line":676},[15802],{"type":17,"tag":329,"props":15803,"children":15804},{},[15805],{"type":23,"value":10321},{"type":17,"tag":329,"props":15807,"children":15808},{"class":331,"line":685},[15809],{"type":17,"tag":329,"props":15810,"children":15811},{},[15812],{"type":23,"value":480},{"type":17,"tag":329,"props":15814,"children":15815},{"class":331,"line":694},[15816],{"type":17,"tag":329,"props":15817,"children":15818},{},[15819],{"type":23,"value":489},{"type":17,"tag":245,"props":15821,"children":15822},{"start":341},[15823],{"type":17,"tag":35,"props":15824,"children":15825},{},[15826,15831,15834],{"type":17,"tag":86,"props":15827,"children":15828},{},[15829],{"type":23,"value":15830},"准备被代理的目标资源",{"type":17,"tag":10032,"props":15832,"children":15833},{},[],{"type":17,"tag":86,"props":15835,"children":15836},{},[15837],{"type":23,"value":15838},"接口：",{"type":17,"tag":319,"props":15840,"children":15842},{"className":321,"code":15841,"language":323,"meta":7,"style":7},"package com.wangkun.spring.aop.annotation;\n\npublic interface Calculator {\n    int add(int i, int j);\n\n    int sub(int i, int j);\n\n    int mul(int i, int j);\n\n    int div(int i, int j);\n}\n",[15843],{"type":17,"tag":293,"props":15844,"children":15845},{"__ignoreMap":7},[15846,15854,15861,15869,15877,15884,15892,15899,15907,15914,15922],{"type":17,"tag":329,"props":15847,"children":15848},{"class":331,"line":332},[15849],{"type":17,"tag":329,"props":15850,"children":15851},{},[15852],{"type":23,"value":15853},"package com.wangkun.spring.aop.annotation;\n",{"type":17,"tag":329,"props":15855,"children":15856},{"class":331,"line":341},[15857],{"type":17,"tag":329,"props":15858,"children":15859},{"emptyLinePlaceholder":542},[15860],{"type":23,"value":545},{"type":17,"tag":329,"props":15862,"children":15863},{"class":331,"line":350},[15864],{"type":17,"tag":329,"props":15865,"children":15866},{},[15867],{"type":23,"value":15868},"public interface Calculator {\n",{"type":17,"tag":329,"props":15870,"children":15871},{"class":331,"line":359},[15872],{"type":17,"tag":329,"props":15873,"children":15874},{},[15875],{"type":23,"value":15876},"    int add(int i, int j);\n",{"type":17,"tag":329,"props":15878,"children":15879},{"class":331,"line":368},[15880],{"type":17,"tag":329,"props":15881,"children":15882},{"emptyLinePlaceholder":542},[15883],{"type":23,"value":545},{"type":17,"tag":329,"props":15885,"children":15886},{"class":331,"line":377},[15887],{"type":17,"tag":329,"props":15888,"children":15889},{},[15890],{"type":23,"value":15891},"    int sub(int i, int j);\n",{"type":17,"tag":329,"props":15893,"children":15894},{"class":331,"line":386},[15895],{"type":17,"tag":329,"props":15896,"children":15897},{"emptyLinePlaceholder":542},[15898],{"type":23,"value":545},{"type":17,"tag":329,"props":15900,"children":15901},{"class":331,"line":394},[15902],{"type":17,"tag":329,"props":15903,"children":15904},{},[15905],{"type":23,"value":15906},"    int mul(int i, int j);\n",{"type":17,"tag":329,"props":15908,"children":15909},{"class":331,"line":403},[15910],{"type":17,"tag":329,"props":15911,"children":15912},{"emptyLinePlaceholder":542},[15913],{"type":23,"value":545},{"type":17,"tag":329,"props":15915,"children":15916},{"class":331,"line":412},[15917],{"type":17,"tag":329,"props":15918,"children":15919},{},[15920],{"type":23,"value":15921},"    int div(int i, int j);\n",{"type":17,"tag":329,"props":15923,"children":15924},{"class":331,"line":421},[15925],{"type":17,"tag":329,"props":15926,"children":15927},{},[15928],{"type":23,"value":753},{"type":17,"tag":57,"props":15930,"children":15931},{},[15932],{"type":17,"tag":86,"props":15933,"children":15934},{},[15935],{"type":23,"value":15936},"实现类：",{"type":17,"tag":245,"props":15938,"children":15939},{"start":350},[15940],{"type":17,"tag":35,"props":15941,"children":15942},{},[15943],{"type":17,"tag":86,"props":15944,"children":15945},{},[15946],{"type":23,"value":15947},"创建切面类并配置",{"type":17,"tag":319,"props":15949,"children":15951},{"className":321,"code":15950,"language":323,"meta":7,"style":7},"package com.wangkun.spring.aop.annotation;\n\nimport org.aspectj.lang.JoinPoint;\nimport org.aspectj.lang.annotation.After;\nimport org.aspectj.lang.annotation.AfterReturning;\nimport org.aspectj.lang.annotation.Aspect;\nimport org.aspectj.lang.annotation.Before;\nimport org.springframework.stereotype.Component;\n\nimport java.util.Arrays;\n\n@Component\n@Aspect\npublic class LoggerAspect {\n\n    \u002F**\n     * \n     * @param joinPoint\n     *\u002F\n    @Before(\"execution(* com.wangkun.spring.aop.annotation.CalculatorImpl.*(..))\")\n    public void beforeMethod(JoinPoint joinPoint) {\n        \u002F\u002F 获取连接点的方法名（签名信息）\n        String methodName = joinPoint.getSignature().getName();\n        \u002F\u002F 获取参数\n        String args = Arrays.toString(joinPoint.getArgs());\n\n        \u002F\u002F 添加前置通知\n        System.out.println(\"Logger===> 前置通知，方法名\" + methodName + \"参数\" + args);\n    }\n}\n",[15952],{"type":17,"tag":293,"props":15953,"children":15954},{"__ignoreMap":7},[15955,15962,15969,15977,15985,15993,16001,16009,16017,16024,16032,16039,16047,16055,16063,16070,16077,16085,16093,16100,16108,16116,16124,16132,16140,16148,16155,16163,16171,16178],{"type":17,"tag":329,"props":15956,"children":15957},{"class":331,"line":332},[15958],{"type":17,"tag":329,"props":15959,"children":15960},{},[15961],{"type":23,"value":15853},{"type":17,"tag":329,"props":15963,"children":15964},{"class":331,"line":341},[15965],{"type":17,"tag":329,"props":15966,"children":15967},{"emptyLinePlaceholder":542},[15968],{"type":23,"value":545},{"type":17,"tag":329,"props":15970,"children":15971},{"class":331,"line":350},[15972],{"type":17,"tag":329,"props":15973,"children":15974},{},[15975],{"type":23,"value":15976},"import org.aspectj.lang.JoinPoint;\n",{"type":17,"tag":329,"props":15978,"children":15979},{"class":331,"line":359},[15980],{"type":17,"tag":329,"props":15981,"children":15982},{},[15983],{"type":23,"value":15984},"import org.aspectj.lang.annotation.After;\n",{"type":17,"tag":329,"props":15986,"children":15987},{"class":331,"line":368},[15988],{"type":17,"tag":329,"props":15989,"children":15990},{},[15991],{"type":23,"value":15992},"import org.aspectj.lang.annotation.AfterReturning;\n",{"type":17,"tag":329,"props":15994,"children":15995},{"class":331,"line":377},[15996],{"type":17,"tag":329,"props":15997,"children":15998},{},[15999],{"type":23,"value":16000},"import org.aspectj.lang.annotation.Aspect;\n",{"type":17,"tag":329,"props":16002,"children":16003},{"class":331,"line":386},[16004],{"type":17,"tag":329,"props":16005,"children":16006},{},[16007],{"type":23,"value":16008},"import org.aspectj.lang.annotation.Before;\n",{"type":17,"tag":329,"props":16010,"children":16011},{"class":331,"line":394},[16012],{"type":17,"tag":329,"props":16013,"children":16014},{},[16015],{"type":23,"value":16016},"import org.springframework.stereotype.Component;\n",{"type":17,"tag":329,"props":16018,"children":16019},{"class":331,"line":403},[16020],{"type":17,"tag":329,"props":16021,"children":16022},{"emptyLinePlaceholder":542},[16023],{"type":23,"value":545},{"type":17,"tag":329,"props":16025,"children":16026},{"class":331,"line":412},[16027],{"type":17,"tag":329,"props":16028,"children":16029},{},[16030],{"type":23,"value":16031},"import java.util.Arrays;\n",{"type":17,"tag":329,"props":16033,"children":16034},{"class":331,"line":421},[16035],{"type":17,"tag":329,"props":16036,"children":16037},{"emptyLinePlaceholder":542},[16038],{"type":23,"value":545},{"type":17,"tag":329,"props":16040,"children":16041},{"class":331,"line":430},[16042],{"type":17,"tag":329,"props":16043,"children":16044},{},[16045],{"type":23,"value":16046},"@Component\n",{"type":17,"tag":329,"props":16048,"children":16049},{"class":331,"line":439},[16050],{"type":17,"tag":329,"props":16051,"children":16052},{},[16053],{"type":23,"value":16054},"@Aspect\n",{"type":17,"tag":329,"props":16056,"children":16057},{"class":331,"line":447},[16058],{"type":17,"tag":329,"props":16059,"children":16060},{},[16061],{"type":23,"value":16062},"public class LoggerAspect {\n",{"type":17,"tag":329,"props":16064,"children":16065},{"class":331,"line":456},[16066],{"type":17,"tag":329,"props":16067,"children":16068},{"emptyLinePlaceholder":542},[16069],{"type":23,"value":545},{"type":17,"tag":329,"props":16071,"children":16072},{"class":331,"line":465},[16073],{"type":17,"tag":329,"props":16074,"children":16075},{},[16076],{"type":23,"value":8968},{"type":17,"tag":329,"props":16078,"children":16079},{"class":331,"line":474},[16080],{"type":17,"tag":329,"props":16081,"children":16082},{},[16083],{"type":23,"value":16084},"     * \n",{"type":17,"tag":329,"props":16086,"children":16087},{"class":331,"line":483},[16088],{"type":17,"tag":329,"props":16089,"children":16090},{},[16091],{"type":23,"value":16092},"     * @param joinPoint\n",{"type":17,"tag":329,"props":16094,"children":16095},{"class":331,"line":667},[16096],{"type":17,"tag":329,"props":16097,"children":16098},{},[16099],{"type":23,"value":8984},{"type":17,"tag":329,"props":16101,"children":16102},{"class":331,"line":676},[16103],{"type":17,"tag":329,"props":16104,"children":16105},{},[16106],{"type":23,"value":16107},"    @Before(\"execution(* com.wangkun.spring.aop.annotation.CalculatorImpl.*(..))\")\n",{"type":17,"tag":329,"props":16109,"children":16110},{"class":331,"line":685},[16111],{"type":17,"tag":329,"props":16112,"children":16113},{},[16114],{"type":23,"value":16115},"    public void beforeMethod(JoinPoint joinPoint) {\n",{"type":17,"tag":329,"props":16117,"children":16118},{"class":331,"line":694},[16119],{"type":17,"tag":329,"props":16120,"children":16121},{},[16122],{"type":23,"value":16123},"        \u002F\u002F 获取连接点的方法名（签名信息）\n",{"type":17,"tag":329,"props":16125,"children":16126},{"class":331,"line":1213},[16127],{"type":17,"tag":329,"props":16128,"children":16129},{},[16130],{"type":23,"value":16131},"        String methodName = joinPoint.getSignature().getName();\n",{"type":17,"tag":329,"props":16133,"children":16134},{"class":331,"line":1222},[16135],{"type":17,"tag":329,"props":16136,"children":16137},{},[16138],{"type":23,"value":16139},"        \u002F\u002F 获取参数\n",{"type":17,"tag":329,"props":16141,"children":16142},{"class":331,"line":1231},[16143],{"type":17,"tag":329,"props":16144,"children":16145},{},[16146],{"type":23,"value":16147},"        String args = Arrays.toString(joinPoint.getArgs());\n",{"type":17,"tag":329,"props":16149,"children":16150},{"class":331,"line":1240},[16151],{"type":17,"tag":329,"props":16152,"children":16153},{"emptyLinePlaceholder":542},[16154],{"type":23,"value":545},{"type":17,"tag":329,"props":16156,"children":16157},{"class":331,"line":1248},[16158],{"type":17,"tag":329,"props":16159,"children":16160},{},[16161],{"type":23,"value":16162},"        \u002F\u002F 添加前置通知\n",{"type":17,"tag":329,"props":16164,"children":16165},{"class":331,"line":1257},[16166],{"type":17,"tag":329,"props":16167,"children":16168},{},[16169],{"type":23,"value":16170},"        System.out.println(\"Logger===> 前置通知，方法名\" + methodName + \"参数\" + args);\n",{"type":17,"tag":329,"props":16172,"children":16173},{"class":331,"line":1266},[16174],{"type":17,"tag":329,"props":16175,"children":16176},{},[16177],{"type":23,"value":1351},{"type":17,"tag":329,"props":16179,"children":16180},{"class":331,"line":1275},[16181],{"type":17,"tag":329,"props":16182,"children":16183},{},[16184],{"type":23,"value":753},{"type":17,"tag":245,"props":16186,"children":16187},{"start":359},[16188],{"type":17,"tag":35,"props":16189,"children":16190},{},[16191],{"type":17,"tag":86,"props":16192,"children":16193},{},[16194],{"type":23,"value":12043},{"type":17,"tag":319,"props":16196,"children":16198},{"className":1376,"code":16197,"language":1378,"meta":7,"style":7},"\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\u003Cbeans xmlns=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\"\n       xmlns:xsi=\"http:\u002F\u002Fwww.w3.org\u002F2001\u002FXMLSchema-instance\"\n       xmlns:context=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fcontext\"\n       xmlns:aop=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Faop\"\n       xsi:schemaLocation=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\u002Fspring-beans.xsd http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fcontext https:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fcontext\u002Fspring-context.xsd http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Faop https:\u002F\u002Fwww.springframework.org\u002Fschema\u002Faop\u002Fspring-aop.xsd\">\n\n    \u003Ccontext:component-scan base-package=\"com.wangkun.spring.aop.annotation\"\u002F>\n\n    \u003C!--开区基于注解的AOP-->\n    \u003Caop:aspectj-autoproxy\u002F>\n\n\u003C\u002Fbeans>\n",[16199],{"type":17,"tag":293,"props":16200,"children":16201},{"__ignoreMap":7},[16202,16209,16216,16223,16230,16238,16246,16253,16261,16268,16276,16284,16291],{"type":17,"tag":329,"props":16203,"children":16204},{"class":331,"line":332},[16205],{"type":17,"tag":329,"props":16206,"children":16207},{},[16208],{"type":23,"value":7968},{"type":17,"tag":329,"props":16210,"children":16211},{"class":331,"line":341},[16212],{"type":17,"tag":329,"props":16213,"children":16214},{},[16215],{"type":23,"value":10514},{"type":17,"tag":329,"props":16217,"children":16218},{"class":331,"line":350},[16219],{"type":17,"tag":329,"props":16220,"children":16221},{},[16222],{"type":23,"value":10522},{"type":17,"tag":329,"props":16224,"children":16225},{"class":331,"line":359},[16226],{"type":17,"tag":329,"props":16227,"children":16228},{},[16229],{"type":23,"value":13184},{"type":17,"tag":329,"props":16231,"children":16232},{"class":331,"line":368},[16233],{"type":17,"tag":329,"props":16234,"children":16235},{},[16236],{"type":23,"value":16237},"       xmlns:aop=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Faop\"\n",{"type":17,"tag":329,"props":16239,"children":16240},{"class":331,"line":377},[16241],{"type":17,"tag":329,"props":16242,"children":16243},{},[16244],{"type":23,"value":16245},"       xsi:schemaLocation=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\u002Fspring-beans.xsd http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fcontext https:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fcontext\u002Fspring-context.xsd http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Faop https:\u002F\u002Fwww.springframework.org\u002Fschema\u002Faop\u002Fspring-aop.xsd\">\n",{"type":17,"tag":329,"props":16247,"children":16248},{"class":331,"line":386},[16249],{"type":17,"tag":329,"props":16250,"children":16251},{"emptyLinePlaceholder":542},[16252],{"type":23,"value":545},{"type":17,"tag":329,"props":16254,"children":16255},{"class":331,"line":394},[16256],{"type":17,"tag":329,"props":16257,"children":16258},{},[16259],{"type":23,"value":16260},"    \u003Ccontext:component-scan base-package=\"com.wangkun.spring.aop.annotation\"\u002F>\n",{"type":17,"tag":329,"props":16262,"children":16263},{"class":331,"line":403},[16264],{"type":17,"tag":329,"props":16265,"children":16266},{"emptyLinePlaceholder":542},[16267],{"type":23,"value":545},{"type":17,"tag":329,"props":16269,"children":16270},{"class":331,"line":412},[16271],{"type":17,"tag":329,"props":16272,"children":16273},{},[16274],{"type":23,"value":16275},"    \u003C!--开区基于注解的AOP-->\n",{"type":17,"tag":329,"props":16277,"children":16278},{"class":331,"line":421},[16279],{"type":17,"tag":329,"props":16280,"children":16281},{},[16282],{"type":23,"value":16283},"    \u003Caop:aspectj-autoproxy\u002F>\n",{"type":17,"tag":329,"props":16285,"children":16286},{"class":331,"line":430},[16287],{"type":17,"tag":329,"props":16288,"children":16289},{"emptyLinePlaceholder":542},[16290],{"type":23,"value":545},{"type":17,"tag":329,"props":16292,"children":16293},{"class":331,"line":439},[16294],{"type":17,"tag":329,"props":16295,"children":16296},{},[16297],{"type":23,"value":10608},{"type":17,"tag":3272,"props":16299,"children":16301},{"id":16300},"_322-重用切入点表达式",[16302],{"type":23,"value":16303},"3.2.2 重用切入点表达式",{"type":17,"tag":31,"props":16305,"children":16306},{},[16307],{"type":17,"tag":35,"props":16308,"children":16309},{},[16310],{"type":17,"tag":86,"props":16311,"children":16312},{},[16313],{"type":23,"value":16314},"声明：",{"type":17,"tag":319,"props":16316,"children":16318},{"className":321,"code":16317,"language":323,"meta":7,"style":7},"@Pointcut(\"execution(* com.wangkun.spring.aop.annotation.CalculatorImpl.*(..))\")\npublic void pointCut() {}\n",[16319],{"type":17,"tag":293,"props":16320,"children":16321},{"__ignoreMap":7},[16322,16330],{"type":17,"tag":329,"props":16323,"children":16324},{"class":331,"line":332},[16325],{"type":17,"tag":329,"props":16326,"children":16327},{},[16328],{"type":23,"value":16329},"@Pointcut(\"execution(* com.wangkun.spring.aop.annotation.CalculatorImpl.*(..))\")\n",{"type":17,"tag":329,"props":16331,"children":16332},{"class":331,"line":341},[16333],{"type":17,"tag":329,"props":16334,"children":16335},{},[16336],{"type":23,"value":16337},"public void pointCut() {}\n",{"type":17,"tag":31,"props":16339,"children":16340},{},[16341],{"type":17,"tag":35,"props":16342,"children":16343},{},[16344],{"type":17,"tag":86,"props":16345,"children":16346},{},[16347],{"type":23,"value":16348},"在同一切面使用：",{"type":17,"tag":319,"props":16350,"children":16352},{"className":321,"code":16351,"language":323,"meta":7,"style":7},"@Before(\"pointcut()\")\npublic void beforeMethod(JoinPoint joinPoint) {\n    \u002F\u002F 获取连接点的方法名（签名信息）\n    String methodName = joinPoint.getSignature().getName();\n    \u002F\u002F 获取参数\n    String args = Arrays.toString(joinPoint.getArgs());\n\n    \u002F\u002F 添加前置通知\n    System.out.println(\"Logger===> 前置通知，方法名\" + methodName + \"参数\" + args);\n}\n",[16353],{"type":17,"tag":293,"props":16354,"children":16355},{"__ignoreMap":7},[16356,16364,16372,16380,16388,16396,16404,16411,16419,16427],{"type":17,"tag":329,"props":16357,"children":16358},{"class":331,"line":332},[16359],{"type":17,"tag":329,"props":16360,"children":16361},{},[16362],{"type":23,"value":16363},"@Before(\"pointcut()\")\n",{"type":17,"tag":329,"props":16365,"children":16366},{"class":331,"line":341},[16367],{"type":17,"tag":329,"props":16368,"children":16369},{},[16370],{"type":23,"value":16371},"public void beforeMethod(JoinPoint joinPoint) {\n",{"type":17,"tag":329,"props":16373,"children":16374},{"class":331,"line":350},[16375],{"type":17,"tag":329,"props":16376,"children":16377},{},[16378],{"type":23,"value":16379},"    \u002F\u002F 获取连接点的方法名（签名信息）\n",{"type":17,"tag":329,"props":16381,"children":16382},{"class":331,"line":359},[16383],{"type":17,"tag":329,"props":16384,"children":16385},{},[16386],{"type":23,"value":16387},"    String methodName = joinPoint.getSignature().getName();\n",{"type":17,"tag":329,"props":16389,"children":16390},{"class":331,"line":368},[16391],{"type":17,"tag":329,"props":16392,"children":16393},{},[16394],{"type":23,"value":16395},"    \u002F\u002F 获取参数\n",{"type":17,"tag":329,"props":16397,"children":16398},{"class":331,"line":377},[16399],{"type":17,"tag":329,"props":16400,"children":16401},{},[16402],{"type":23,"value":16403},"    String args = Arrays.toString(joinPoint.getArgs());\n",{"type":17,"tag":329,"props":16405,"children":16406},{"class":331,"line":386},[16407],{"type":17,"tag":329,"props":16408,"children":16409},{"emptyLinePlaceholder":542},[16410],{"type":23,"value":545},{"type":17,"tag":329,"props":16412,"children":16413},{"class":331,"line":394},[16414],{"type":17,"tag":329,"props":16415,"children":16416},{},[16417],{"type":23,"value":16418},"    \u002F\u002F 添加前置通知\n",{"type":17,"tag":329,"props":16420,"children":16421},{"class":331,"line":403},[16422],{"type":17,"tag":329,"props":16423,"children":16424},{},[16425],{"type":23,"value":16426},"    System.out.println(\"Logger===> 前置通知，方法名\" + methodName + \"参数\" + args);\n",{"type":17,"tag":329,"props":16428,"children":16429},{"class":331,"line":412},[16430],{"type":17,"tag":329,"props":16431,"children":16432},{},[16433],{"type":23,"value":753},{"type":17,"tag":31,"props":16435,"children":16436},{},[16437],{"type":17,"tag":35,"props":16438,"children":16439},{},[16440],{"type":23,"value":16441},"在不同切面使用",{"type":17,"tag":319,"props":16443,"children":16445},{"className":321,"code":16444,"language":323,"meta":7,"style":7},"@Before(\"com.atguigu.aop.CommonPointCut.pointCut()\")\npublic void beforeMethod(JoinPoint joinPoint) {\n    String methodName = joinPoint.getSignature().getName();\n    String args = Arrays.toString(joinPoint.getArgs());\n    System.out.println(\"Logger-->前置通知，方法名：\" + methodName + \"，参数：\" + args);\n}\n",[16446],{"type":17,"tag":293,"props":16447,"children":16448},{"__ignoreMap":7},[16449,16457,16464,16471,16478,16486],{"type":17,"tag":329,"props":16450,"children":16451},{"class":331,"line":332},[16452],{"type":17,"tag":329,"props":16453,"children":16454},{},[16455],{"type":23,"value":16456},"@Before(\"com.atguigu.aop.CommonPointCut.pointCut()\")\n",{"type":17,"tag":329,"props":16458,"children":16459},{"class":331,"line":341},[16460],{"type":17,"tag":329,"props":16461,"children":16462},{},[16463],{"type":23,"value":16371},{"type":17,"tag":329,"props":16465,"children":16466},{"class":331,"line":350},[16467],{"type":17,"tag":329,"props":16468,"children":16469},{},[16470],{"type":23,"value":16387},{"type":17,"tag":329,"props":16472,"children":16473},{"class":331,"line":359},[16474],{"type":17,"tag":329,"props":16475,"children":16476},{},[16477],{"type":23,"value":16403},{"type":17,"tag":329,"props":16479,"children":16480},{"class":331,"line":368},[16481],{"type":17,"tag":329,"props":16482,"children":16483},{},[16484],{"type":23,"value":16485},"    System.out.println(\"Logger-->前置通知，方法名：\" + methodName + \"，参数：\" + args);\n",{"type":17,"tag":329,"props":16487,"children":16488},{"class":331,"line":377},[16489],{"type":17,"tag":329,"props":16490,"children":16491},{},[16492],{"type":23,"value":753},{"type":17,"tag":3272,"props":16494,"children":16496},{"id":16495},"_323-获取通知的相关信息",[16497],{"type":23,"value":16498},"3.2.3 获取通知的相关信息",{"type":17,"tag":53,"props":16500,"children":16501},{},[16502,16507],{"type":17,"tag":57,"props":16503,"children":16504},{},[16505],{"type":23,"value":16506},"通知的执行机制与try catch一样",{"type":17,"tag":31,"props":16508,"children":16509},{},[16510,16523,16536,16549],{"type":17,"tag":35,"props":16511,"children":16512},{},[16513,16515,16521],{"type":23,"value":16514},"前置通知：",{"type":17,"tag":293,"props":16516,"children":16518},{"className":16517},[],[16519],{"type":23,"value":16520},"@Before",{"type":23,"value":16522},"目标方法执行前执行\t====\ttry",{"type":17,"tag":35,"props":16524,"children":16525},{},[16526,16528,16534],{"type":23,"value":16527},"返回通知：",{"type":17,"tag":293,"props":16529,"children":16531},{"className":16530},[],[16532],{"type":23,"value":16533},"@AfterReturning",{"type":23,"value":16535},"目标方法返回结果之后执行\t====\ttry",{"type":17,"tag":35,"props":16537,"children":16538},{},[16539,16541,16547],{"type":23,"value":16540},"异常通知：",{"type":17,"tag":293,"props":16542,"children":16544},{"className":16543},[],[16545],{"type":23,"value":16546},"@AfterThrowing",{"type":23,"value":16548},"目标方法报错后执行\t====\tcatch",{"type":17,"tag":35,"props":16550,"children":16551},{},[16552,16554,16560],{"type":23,"value":16553},"后置通知：",{"type":17,"tag":293,"props":16555,"children":16557},{"className":16556},[],[16558],{"type":23,"value":16559},"@After",{"type":23,"value":16561},"目标方法执行完毕后执行\t====\tfinally",{"type":17,"tag":319,"props":16563,"children":16565},{"className":321,"code":16564,"language":323,"meta":7,"style":7},"package com.wangkun.spring.aop.annotation;\n\nimport org.aspectj.lang.JoinPoint;\nimport org.aspectj.lang.ProceedingJoinPoint;\nimport org.aspectj.lang.annotation.*;\nimport org.springframework.stereotype.Component;\n\nimport java.util.Arrays;\n\n@Component\n@Aspect\npublic class LoggerAspect {\n    @Pointcut(\"execution(* com.wangkun.spring.aop.annotation.CalculatorImpl.*(..))\")\n    public void pointCut() {\n    }\n\n    \u002F**\n     * 前置通知\n     *\n     * @param joinPoint\n     *\u002F\n    @Before(\"pointCut()\")\n    public void beforeMethod(JoinPoint joinPoint) {\n        \u002F\u002F 获取连接点的方法名（签名信息）\n        String methodName = joinPoint.getSignature().getName();\n        \u002F\u002F 获取参数\n        String args = Arrays.toString(joinPoint.getArgs());\n\n        \u002F\u002F 添加前置通知\n        System.out.println(\"Logger===> 前置通知，方法名：\" + methodName + \"参数：\" + args);\n    }\n\n    \u002F**\n     * 返回通知\n     *\n     * @param joinPoint\n     * @param result\n     *\u002F\n    @AfterReturning(value = \"pointCut()\", returning = \"result\")\n    public void afterReturningMethod(JoinPoint joinPoint, Object result) {\n        \u002F\u002F 获取方法（签名信息）\n        String methodName = joinPoint.getSignature().getName();\n\n        \u002F\u002F 添加后置通知\n        System.out.println(\"Logger===> 后置结果通知，方法名：\" + methodName + \"结果：\" + result);\n    }\n\n    \u002F**\n     * 异常通知\n     *\n     * @param joinPoint\n     * @param error\n     *\u002F\n    @AfterThrowing(value = \"pointCut()\", throwing = \"error\")\n    public void throwingMethod(JoinPoint joinPoint, Exception error) {\n        String methodName = joinPoint.getSignature().getName();\n\n        System.out.println(\"Logger===> 报错通知，方法名：\" + methodName + \"报错：\" + error);\n    }\n\n    \u002F**\n     * 后置通知\n     *\n     * @param joinPoint\n     *\u002F\n    @After(\"pointCut()\")\n    public void afterMethod(JoinPoint joinPoint) {\n        String methodName = joinPoint.getSignature().getName();\n\n        System.out.println(\"Logger===> 后置通知，方法名：\" + methodName + \" 执行结束\");\n    }\n\n\n    \u002F**\n     * 环绕通知\n     *\n     * @param joinPoint\n     * @return\n     *\u002F\n    @Around(\"pointCut()\")\n    public Object aroundMethod(ProceedingJoinPoint joinPoint) {\n\n        Object proceed = null;\n        try {\n            System.out.println(\"环绕通知 ==== 前置通知\");\n            proceed = joinPoint.proceed();\n            System.out.println(\"环绕通知 ==== 返回通知\");\n        } catch (Throwable e) {\n            System.out.println(\"环绕通知 ==== 异常通知\");\n            throw new RuntimeException(e);\n        } finally {\n            System.out.println(\"环绕通知 ==== 后置通知\");\n        }\n\n        return proceed;\n    }\n}\n",[16566],{"type":17,"tag":293,"props":16567,"children":16568},{"__ignoreMap":7},[16569,16576,16583,16590,16598,16606,16613,16620,16627,16634,16641,16648,16655,16663,16671,16678,16685,16692,16700,16708,16715,16722,16730,16737,16744,16751,16758,16765,16772,16779,16787,16794,16801,16808,16816,16823,16830,16838,16845,16853,16861,16869,16876,16883,16891,16899,16906,16913,16920,16928,16935,16942,16950,16957,16965,16973,16980,16987,16995,17002,17009,17016,17024,17031,17038,17045,17053,17061,17068,17075,17083,17090,17097,17104,17111,17119,17127,17135,17144,17152,17161,17170,17178,17187,17196,17205,17214,17223,17232,17241,17250,17259,17268,17276,17284,17293,17301],{"type":17,"tag":329,"props":16570,"children":16571},{"class":331,"line":332},[16572],{"type":17,"tag":329,"props":16573,"children":16574},{},[16575],{"type":23,"value":15853},{"type":17,"tag":329,"props":16577,"children":16578},{"class":331,"line":341},[16579],{"type":17,"tag":329,"props":16580,"children":16581},{"emptyLinePlaceholder":542},[16582],{"type":23,"value":545},{"type":17,"tag":329,"props":16584,"children":16585},{"class":331,"line":350},[16586],{"type":17,"tag":329,"props":16587,"children":16588},{},[16589],{"type":23,"value":15976},{"type":17,"tag":329,"props":16591,"children":16592},{"class":331,"line":359},[16593],{"type":17,"tag":329,"props":16594,"children":16595},{},[16596],{"type":23,"value":16597},"import org.aspectj.lang.ProceedingJoinPoint;\n",{"type":17,"tag":329,"props":16599,"children":16600},{"class":331,"line":368},[16601],{"type":17,"tag":329,"props":16602,"children":16603},{},[16604],{"type":23,"value":16605},"import org.aspectj.lang.annotation.*;\n",{"type":17,"tag":329,"props":16607,"children":16608},{"class":331,"line":377},[16609],{"type":17,"tag":329,"props":16610,"children":16611},{},[16612],{"type":23,"value":16016},{"type":17,"tag":329,"props":16614,"children":16615},{"class":331,"line":386},[16616],{"type":17,"tag":329,"props":16617,"children":16618},{"emptyLinePlaceholder":542},[16619],{"type":23,"value":545},{"type":17,"tag":329,"props":16621,"children":16622},{"class":331,"line":394},[16623],{"type":17,"tag":329,"props":16624,"children":16625},{},[16626],{"type":23,"value":16031},{"type":17,"tag":329,"props":16628,"children":16629},{"class":331,"line":403},[16630],{"type":17,"tag":329,"props":16631,"children":16632},{"emptyLinePlaceholder":542},[16633],{"type":23,"value":545},{"type":17,"tag":329,"props":16635,"children":16636},{"class":331,"line":412},[16637],{"type":17,"tag":329,"props":16638,"children":16639},{},[16640],{"type":23,"value":16046},{"type":17,"tag":329,"props":16642,"children":16643},{"class":331,"line":421},[16644],{"type":17,"tag":329,"props":16645,"children":16646},{},[16647],{"type":23,"value":16054},{"type":17,"tag":329,"props":16649,"children":16650},{"class":331,"line":430},[16651],{"type":17,"tag":329,"props":16652,"children":16653},{},[16654],{"type":23,"value":16062},{"type":17,"tag":329,"props":16656,"children":16657},{"class":331,"line":439},[16658],{"type":17,"tag":329,"props":16659,"children":16660},{},[16661],{"type":23,"value":16662},"    @Pointcut(\"execution(* com.wangkun.spring.aop.annotation.CalculatorImpl.*(..))\")\n",{"type":17,"tag":329,"props":16664,"children":16665},{"class":331,"line":447},[16666],{"type":17,"tag":329,"props":16667,"children":16668},{},[16669],{"type":23,"value":16670},"    public void pointCut() {\n",{"type":17,"tag":329,"props":16672,"children":16673},{"class":331,"line":456},[16674],{"type":17,"tag":329,"props":16675,"children":16676},{},[16677],{"type":23,"value":1351},{"type":17,"tag":329,"props":16679,"children":16680},{"class":331,"line":465},[16681],{"type":17,"tag":329,"props":16682,"children":16683},{"emptyLinePlaceholder":542},[16684],{"type":23,"value":545},{"type":17,"tag":329,"props":16686,"children":16687},{"class":331,"line":474},[16688],{"type":17,"tag":329,"props":16689,"children":16690},{},[16691],{"type":23,"value":8968},{"type":17,"tag":329,"props":16693,"children":16694},{"class":331,"line":483},[16695],{"type":17,"tag":329,"props":16696,"children":16697},{},[16698],{"type":23,"value":16699},"     * 前置通知\n",{"type":17,"tag":329,"props":16701,"children":16702},{"class":331,"line":667},[16703],{"type":17,"tag":329,"props":16704,"children":16705},{},[16706],{"type":23,"value":16707},"     *\n",{"type":17,"tag":329,"props":16709,"children":16710},{"class":331,"line":676},[16711],{"type":17,"tag":329,"props":16712,"children":16713},{},[16714],{"type":23,"value":16092},{"type":17,"tag":329,"props":16716,"children":16717},{"class":331,"line":685},[16718],{"type":17,"tag":329,"props":16719,"children":16720},{},[16721],{"type":23,"value":8984},{"type":17,"tag":329,"props":16723,"children":16724},{"class":331,"line":694},[16725],{"type":17,"tag":329,"props":16726,"children":16727},{},[16728],{"type":23,"value":16729},"    @Before(\"pointCut()\")\n",{"type":17,"tag":329,"props":16731,"children":16732},{"class":331,"line":1213},[16733],{"type":17,"tag":329,"props":16734,"children":16735},{},[16736],{"type":23,"value":16115},{"type":17,"tag":329,"props":16738,"children":16739},{"class":331,"line":1222},[16740],{"type":17,"tag":329,"props":16741,"children":16742},{},[16743],{"type":23,"value":16123},{"type":17,"tag":329,"props":16745,"children":16746},{"class":331,"line":1231},[16747],{"type":17,"tag":329,"props":16748,"children":16749},{},[16750],{"type":23,"value":16131},{"type":17,"tag":329,"props":16752,"children":16753},{"class":331,"line":1240},[16754],{"type":17,"tag":329,"props":16755,"children":16756},{},[16757],{"type":23,"value":16139},{"type":17,"tag":329,"props":16759,"children":16760},{"class":331,"line":1248},[16761],{"type":17,"tag":329,"props":16762,"children":16763},{},[16764],{"type":23,"value":16147},{"type":17,"tag":329,"props":16766,"children":16767},{"class":331,"line":1257},[16768],{"type":17,"tag":329,"props":16769,"children":16770},{"emptyLinePlaceholder":542},[16771],{"type":23,"value":545},{"type":17,"tag":329,"props":16773,"children":16774},{"class":331,"line":1266},[16775],{"type":17,"tag":329,"props":16776,"children":16777},{},[16778],{"type":23,"value":16162},{"type":17,"tag":329,"props":16780,"children":16781},{"class":331,"line":1275},[16782],{"type":17,"tag":329,"props":16783,"children":16784},{},[16785],{"type":23,"value":16786},"        System.out.println(\"Logger===> 前置通知，方法名：\" + methodName + \"参数：\" + args);\n",{"type":17,"tag":329,"props":16788,"children":16789},{"class":331,"line":1284},[16790],{"type":17,"tag":329,"props":16791,"children":16792},{},[16793],{"type":23,"value":1351},{"type":17,"tag":329,"props":16795,"children":16796},{"class":331,"line":1292},[16797],{"type":17,"tag":329,"props":16798,"children":16799},{"emptyLinePlaceholder":542},[16800],{"type":23,"value":545},{"type":17,"tag":329,"props":16802,"children":16803},{"class":331,"line":1301},[16804],{"type":17,"tag":329,"props":16805,"children":16806},{},[16807],{"type":23,"value":8968},{"type":17,"tag":329,"props":16809,"children":16810},{"class":331,"line":1310},[16811],{"type":17,"tag":329,"props":16812,"children":16813},{},[16814],{"type":23,"value":16815},"     * 返回通知\n",{"type":17,"tag":329,"props":16817,"children":16818},{"class":331,"line":1319},[16819],{"type":17,"tag":329,"props":16820,"children":16821},{},[16822],{"type":23,"value":16707},{"type":17,"tag":329,"props":16824,"children":16825},{"class":331,"line":1328},[16826],{"type":17,"tag":329,"props":16827,"children":16828},{},[16829],{"type":23,"value":16092},{"type":17,"tag":329,"props":16831,"children":16832},{"class":331,"line":1336},[16833],{"type":17,"tag":329,"props":16834,"children":16835},{},[16836],{"type":23,"value":16837},"     * @param result\n",{"type":17,"tag":329,"props":16839,"children":16840},{"class":331,"line":1345},[16841],{"type":17,"tag":329,"props":16842,"children":16843},{},[16844],{"type":23,"value":8984},{"type":17,"tag":329,"props":16846,"children":16847},{"class":331,"line":1354},[16848],{"type":17,"tag":329,"props":16849,"children":16850},{},[16851],{"type":23,"value":16852},"    @AfterReturning(value = \"pointCut()\", returning = \"result\")\n",{"type":17,"tag":329,"props":16854,"children":16855},{"class":331,"line":1979},[16856],{"type":17,"tag":329,"props":16857,"children":16858},{},[16859],{"type":23,"value":16860},"    public void afterReturningMethod(JoinPoint joinPoint, Object result) {\n",{"type":17,"tag":329,"props":16862,"children":16863},{"class":331,"line":1988},[16864],{"type":17,"tag":329,"props":16865,"children":16866},{},[16867],{"type":23,"value":16868},"        \u002F\u002F 获取方法（签名信息）\n",{"type":17,"tag":329,"props":16870,"children":16871},{"class":331,"line":1997},[16872],{"type":17,"tag":329,"props":16873,"children":16874},{},[16875],{"type":23,"value":16131},{"type":17,"tag":329,"props":16877,"children":16878},{"class":331,"line":2006},[16879],{"type":17,"tag":329,"props":16880,"children":16881},{"emptyLinePlaceholder":542},[16882],{"type":23,"value":545},{"type":17,"tag":329,"props":16884,"children":16885},{"class":331,"line":2014},[16886],{"type":17,"tag":329,"props":16887,"children":16888},{},[16889],{"type":23,"value":16890},"        \u002F\u002F 添加后置通知\n",{"type":17,"tag":329,"props":16892,"children":16893},{"class":331,"line":8306},[16894],{"type":17,"tag":329,"props":16895,"children":16896},{},[16897],{"type":23,"value":16898},"        System.out.println(\"Logger===> 后置结果通知，方法名：\" + methodName + \"结果：\" + result);\n",{"type":17,"tag":329,"props":16900,"children":16901},{"class":331,"line":8315},[16902],{"type":17,"tag":329,"props":16903,"children":16904},{},[16905],{"type":23,"value":1351},{"type":17,"tag":329,"props":16907,"children":16908},{"class":331,"line":8324},[16909],{"type":17,"tag":329,"props":16910,"children":16911},{"emptyLinePlaceholder":542},[16912],{"type":23,"value":545},{"type":17,"tag":329,"props":16914,"children":16915},{"class":331,"line":8333},[16916],{"type":17,"tag":329,"props":16917,"children":16918},{},[16919],{"type":23,"value":8968},{"type":17,"tag":329,"props":16921,"children":16922},{"class":331,"line":8342},[16923],{"type":17,"tag":329,"props":16924,"children":16925},{},[16926],{"type":23,"value":16927},"     * 异常通知\n",{"type":17,"tag":329,"props":16929,"children":16930},{"class":331,"line":8351},[16931],{"type":17,"tag":329,"props":16932,"children":16933},{},[16934],{"type":23,"value":16707},{"type":17,"tag":329,"props":16936,"children":16937},{"class":331,"line":8360},[16938],{"type":17,"tag":329,"props":16939,"children":16940},{},[16941],{"type":23,"value":16092},{"type":17,"tag":329,"props":16943,"children":16944},{"class":331,"line":8369},[16945],{"type":17,"tag":329,"props":16946,"children":16947},{},[16948],{"type":23,"value":16949},"     * @param error\n",{"type":17,"tag":329,"props":16951,"children":16952},{"class":331,"line":8378},[16953],{"type":17,"tag":329,"props":16954,"children":16955},{},[16956],{"type":23,"value":8984},{"type":17,"tag":329,"props":16958,"children":16959},{"class":331,"line":8387},[16960],{"type":17,"tag":329,"props":16961,"children":16962},{},[16963],{"type":23,"value":16964},"    @AfterThrowing(value = \"pointCut()\", throwing = \"error\")\n",{"type":17,"tag":329,"props":16966,"children":16967},{"class":331,"line":8396},[16968],{"type":17,"tag":329,"props":16969,"children":16970},{},[16971],{"type":23,"value":16972},"    public void throwingMethod(JoinPoint joinPoint, Exception error) {\n",{"type":17,"tag":329,"props":16974,"children":16975},{"class":331,"line":8405},[16976],{"type":17,"tag":329,"props":16977,"children":16978},{},[16979],{"type":23,"value":16131},{"type":17,"tag":329,"props":16981,"children":16982},{"class":331,"line":8414},[16983],{"type":17,"tag":329,"props":16984,"children":16985},{"emptyLinePlaceholder":542},[16986],{"type":23,"value":545},{"type":17,"tag":329,"props":16988,"children":16989},{"class":331,"line":8423},[16990],{"type":17,"tag":329,"props":16991,"children":16992},{},[16993],{"type":23,"value":16994},"        System.out.println(\"Logger===> 报错通知，方法名：\" + methodName + \"报错：\" + error);\n",{"type":17,"tag":329,"props":16996,"children":16997},{"class":331,"line":8432},[16998],{"type":17,"tag":329,"props":16999,"children":17000},{},[17001],{"type":23,"value":1351},{"type":17,"tag":329,"props":17003,"children":17004},{"class":331,"line":8441},[17005],{"type":17,"tag":329,"props":17006,"children":17007},{"emptyLinePlaceholder":542},[17008],{"type":23,"value":545},{"type":17,"tag":329,"props":17010,"children":17011},{"class":331,"line":8449},[17012],{"type":17,"tag":329,"props":17013,"children":17014},{},[17015],{"type":23,"value":8968},{"type":17,"tag":329,"props":17017,"children":17018},{"class":331,"line":8458},[17019],{"type":17,"tag":329,"props":17020,"children":17021},{},[17022],{"type":23,"value":17023},"     * 后置通知\n",{"type":17,"tag":329,"props":17025,"children":17026},{"class":331,"line":8467},[17027],{"type":17,"tag":329,"props":17028,"children":17029},{},[17030],{"type":23,"value":16707},{"type":17,"tag":329,"props":17032,"children":17033},{"class":331,"line":8476},[17034],{"type":17,"tag":329,"props":17035,"children":17036},{},[17037],{"type":23,"value":16092},{"type":17,"tag":329,"props":17039,"children":17040},{"class":331,"line":8484},[17041],{"type":17,"tag":329,"props":17042,"children":17043},{},[17044],{"type":23,"value":8984},{"type":17,"tag":329,"props":17046,"children":17047},{"class":331,"line":8493},[17048],{"type":17,"tag":329,"props":17049,"children":17050},{},[17051],{"type":23,"value":17052},"    @After(\"pointCut()\")\n",{"type":17,"tag":329,"props":17054,"children":17055},{"class":331,"line":8502},[17056],{"type":17,"tag":329,"props":17057,"children":17058},{},[17059],{"type":23,"value":17060},"    public void afterMethod(JoinPoint joinPoint) {\n",{"type":17,"tag":329,"props":17062,"children":17063},{"class":331,"line":8511},[17064],{"type":17,"tag":329,"props":17065,"children":17066},{},[17067],{"type":23,"value":16131},{"type":17,"tag":329,"props":17069,"children":17070},{"class":331,"line":8520},[17071],{"type":17,"tag":329,"props":17072,"children":17073},{"emptyLinePlaceholder":542},[17074],{"type":23,"value":545},{"type":17,"tag":329,"props":17076,"children":17077},{"class":331,"line":9399},[17078],{"type":17,"tag":329,"props":17079,"children":17080},{},[17081],{"type":23,"value":17082},"        System.out.println(\"Logger===> 后置通知，方法名：\" + methodName + \" 执行结束\");\n",{"type":17,"tag":329,"props":17084,"children":17085},{"class":331,"line":9408},[17086],{"type":17,"tag":329,"props":17087,"children":17088},{},[17089],{"type":23,"value":1351},{"type":17,"tag":329,"props":17091,"children":17092},{"class":331,"line":9417},[17093],{"type":17,"tag":329,"props":17094,"children":17095},{"emptyLinePlaceholder":542},[17096],{"type":23,"value":545},{"type":17,"tag":329,"props":17098,"children":17099},{"class":331,"line":9425},[17100],{"type":17,"tag":329,"props":17101,"children":17102},{"emptyLinePlaceholder":542},[17103],{"type":23,"value":545},{"type":17,"tag":329,"props":17105,"children":17106},{"class":331,"line":9433},[17107],{"type":17,"tag":329,"props":17108,"children":17109},{},[17110],{"type":23,"value":8968},{"type":17,"tag":329,"props":17112,"children":17113},{"class":331,"line":9441},[17114],{"type":17,"tag":329,"props":17115,"children":17116},{},[17117],{"type":23,"value":17118},"     * 环绕通知\n",{"type":17,"tag":329,"props":17120,"children":17122},{"class":331,"line":17121},76,[17123],{"type":17,"tag":329,"props":17124,"children":17125},{},[17126],{"type":23,"value":16707},{"type":17,"tag":329,"props":17128,"children":17130},{"class":331,"line":17129},77,[17131],{"type":17,"tag":329,"props":17132,"children":17133},{},[17134],{"type":23,"value":16092},{"type":17,"tag":329,"props":17136,"children":17138},{"class":331,"line":17137},78,[17139],{"type":17,"tag":329,"props":17140,"children":17141},{},[17142],{"type":23,"value":17143},"     * @return\n",{"type":17,"tag":329,"props":17145,"children":17147},{"class":331,"line":17146},79,[17148],{"type":17,"tag":329,"props":17149,"children":17150},{},[17151],{"type":23,"value":8984},{"type":17,"tag":329,"props":17153,"children":17155},{"class":331,"line":17154},80,[17156],{"type":17,"tag":329,"props":17157,"children":17158},{},[17159],{"type":23,"value":17160},"    @Around(\"pointCut()\")\n",{"type":17,"tag":329,"props":17162,"children":17164},{"class":331,"line":17163},81,[17165],{"type":17,"tag":329,"props":17166,"children":17167},{},[17168],{"type":23,"value":17169},"    public Object aroundMethod(ProceedingJoinPoint joinPoint) {\n",{"type":17,"tag":329,"props":17171,"children":17173},{"class":331,"line":17172},82,[17174],{"type":17,"tag":329,"props":17175,"children":17176},{"emptyLinePlaceholder":542},[17177],{"type":23,"value":545},{"type":17,"tag":329,"props":17179,"children":17181},{"class":331,"line":17180},83,[17182],{"type":17,"tag":329,"props":17183,"children":17184},{},[17185],{"type":23,"value":17186},"        Object proceed = null;\n",{"type":17,"tag":329,"props":17188,"children":17190},{"class":331,"line":17189},84,[17191],{"type":17,"tag":329,"props":17192,"children":17193},{},[17194],{"type":23,"value":17195},"        try {\n",{"type":17,"tag":329,"props":17197,"children":17199},{"class":331,"line":17198},85,[17200],{"type":17,"tag":329,"props":17201,"children":17202},{},[17203],{"type":23,"value":17204},"            System.out.println(\"环绕通知 ==== 前置通知\");\n",{"type":17,"tag":329,"props":17206,"children":17208},{"class":331,"line":17207},86,[17209],{"type":17,"tag":329,"props":17210,"children":17211},{},[17212],{"type":23,"value":17213},"            proceed = joinPoint.proceed();\n",{"type":17,"tag":329,"props":17215,"children":17217},{"class":331,"line":17216},87,[17218],{"type":17,"tag":329,"props":17219,"children":17220},{},[17221],{"type":23,"value":17222},"            System.out.println(\"环绕通知 ==== 返回通知\");\n",{"type":17,"tag":329,"props":17224,"children":17226},{"class":331,"line":17225},88,[17227],{"type":17,"tag":329,"props":17228,"children":17229},{},[17230],{"type":23,"value":17231},"        } catch (Throwable e) {\n",{"type":17,"tag":329,"props":17233,"children":17235},{"class":331,"line":17234},89,[17236],{"type":17,"tag":329,"props":17237,"children":17238},{},[17239],{"type":23,"value":17240},"            System.out.println(\"环绕通知 ==== 异常通知\");\n",{"type":17,"tag":329,"props":17242,"children":17244},{"class":331,"line":17243},90,[17245],{"type":17,"tag":329,"props":17246,"children":17247},{},[17248],{"type":23,"value":17249},"            throw new RuntimeException(e);\n",{"type":17,"tag":329,"props":17251,"children":17253},{"class":331,"line":17252},91,[17254],{"type":17,"tag":329,"props":17255,"children":17256},{},[17257],{"type":23,"value":17258},"        } finally {\n",{"type":17,"tag":329,"props":17260,"children":17262},{"class":331,"line":17261},92,[17263],{"type":17,"tag":329,"props":17264,"children":17265},{},[17266],{"type":23,"value":17267},"            System.out.println(\"环绕通知 ==== 后置通知\");\n",{"type":17,"tag":329,"props":17269,"children":17271},{"class":331,"line":17270},93,[17272],{"type":17,"tag":329,"props":17273,"children":17274},{},[17275],{"type":23,"value":9150},{"type":17,"tag":329,"props":17277,"children":17279},{"class":331,"line":17278},94,[17280],{"type":17,"tag":329,"props":17281,"children":17282},{"emptyLinePlaceholder":542},[17283],{"type":23,"value":545},{"type":17,"tag":329,"props":17285,"children":17287},{"class":331,"line":17286},95,[17288],{"type":17,"tag":329,"props":17289,"children":17290},{},[17291],{"type":23,"value":17292},"        return proceed;\n",{"type":17,"tag":329,"props":17294,"children":17296},{"class":331,"line":17295},96,[17297],{"type":17,"tag":329,"props":17298,"children":17299},{},[17300],{"type":23,"value":1351},{"type":17,"tag":329,"props":17302,"children":17304},{"class":331,"line":17303},97,[17305],{"type":17,"tag":329,"props":17306,"children":17307},{},[17308],{"type":23,"value":753},{"type":17,"tag":3272,"props":17310,"children":17312},{"id":17311},"_324-切面优先级",[17313],{"type":23,"value":17314},"3.2.4 切面优先级",{"type":17,"tag":53,"props":17316,"children":17317},{},[17318,17323],{"type":17,"tag":57,"props":17319,"children":17320},{},[17321],{"type":23,"value":17322},"可以通过@Other注解的value属性设置优先级，默认是Integer的最大值",{"type":17,"tag":57,"props":17324,"children":17325},{},[17326],{"type":23,"value":17327},"@Order注解的value属性值越小，优先级越高",{"type":17,"tag":319,"props":17329,"children":17331},{"className":321,"code":17330,"language":323,"meta":7,"style":7},"package com.wangkun.spring.aop.annotation;\n\nimport org.aspectj.lang.annotation.Aspect;\nimport org.aspectj.lang.annotation.Before;\nimport org.springframework.core.annotation.Order;\nimport org.springframework.stereotype.Component;\n\n@Component\n@Aspect\n@Order(1)\npublic class ValidateAspect {\n\n    @Before(\"com.wangkun.spring.aop.annotation.LoggerAspect.pointCut()\")\n    public void afterMethod() {\n\n        System.out.println(\"ValidateAspect ===  前置通知\");\n\n    }\n\n\n}\n",[17332],{"type":17,"tag":293,"props":17333,"children":17334},{"__ignoreMap":7},[17335,17342,17349,17356,17363,17371,17378,17385,17392,17399,17407,17415,17422,17430,17438,17445,17453,17460,17467,17474,17481],{"type":17,"tag":329,"props":17336,"children":17337},{"class":331,"line":332},[17338],{"type":17,"tag":329,"props":17339,"children":17340},{},[17341],{"type":23,"value":15853},{"type":17,"tag":329,"props":17343,"children":17344},{"class":331,"line":341},[17345],{"type":17,"tag":329,"props":17346,"children":17347},{"emptyLinePlaceholder":542},[17348],{"type":23,"value":545},{"type":17,"tag":329,"props":17350,"children":17351},{"class":331,"line":350},[17352],{"type":17,"tag":329,"props":17353,"children":17354},{},[17355],{"type":23,"value":16000},{"type":17,"tag":329,"props":17357,"children":17358},{"class":331,"line":359},[17359],{"type":17,"tag":329,"props":17360,"children":17361},{},[17362],{"type":23,"value":16008},{"type":17,"tag":329,"props":17364,"children":17365},{"class":331,"line":368},[17366],{"type":17,"tag":329,"props":17367,"children":17368},{},[17369],{"type":23,"value":17370},"import org.springframework.core.annotation.Order;\n",{"type":17,"tag":329,"props":17372,"children":17373},{"class":331,"line":377},[17374],{"type":17,"tag":329,"props":17375,"children":17376},{},[17377],{"type":23,"value":16016},{"type":17,"tag":329,"props":17379,"children":17380},{"class":331,"line":386},[17381],{"type":17,"tag":329,"props":17382,"children":17383},{"emptyLinePlaceholder":542},[17384],{"type":23,"value":545},{"type":17,"tag":329,"props":17386,"children":17387},{"class":331,"line":394},[17388],{"type":17,"tag":329,"props":17389,"children":17390},{},[17391],{"type":23,"value":16046},{"type":17,"tag":329,"props":17393,"children":17394},{"class":331,"line":403},[17395],{"type":17,"tag":329,"props":17396,"children":17397},{},[17398],{"type":23,"value":16054},{"type":17,"tag":329,"props":17400,"children":17401},{"class":331,"line":412},[17402],{"type":17,"tag":329,"props":17403,"children":17404},{},[17405],{"type":23,"value":17406},"@Order(1)\n",{"type":17,"tag":329,"props":17408,"children":17409},{"class":331,"line":421},[17410],{"type":17,"tag":329,"props":17411,"children":17412},{},[17413],{"type":23,"value":17414},"public class ValidateAspect {\n",{"type":17,"tag":329,"props":17416,"children":17417},{"class":331,"line":430},[17418],{"type":17,"tag":329,"props":17419,"children":17420},{"emptyLinePlaceholder":542},[17421],{"type":23,"value":545},{"type":17,"tag":329,"props":17423,"children":17424},{"class":331,"line":439},[17425],{"type":17,"tag":329,"props":17426,"children":17427},{},[17428],{"type":23,"value":17429},"    @Before(\"com.wangkun.spring.aop.annotation.LoggerAspect.pointCut()\")\n",{"type":17,"tag":329,"props":17431,"children":17432},{"class":331,"line":447},[17433],{"type":17,"tag":329,"props":17434,"children":17435},{},[17436],{"type":23,"value":17437},"    public void afterMethod() {\n",{"type":17,"tag":329,"props":17439,"children":17440},{"class":331,"line":456},[17441],{"type":17,"tag":329,"props":17442,"children":17443},{"emptyLinePlaceholder":542},[17444],{"type":23,"value":545},{"type":17,"tag":329,"props":17446,"children":17447},{"class":331,"line":465},[17448],{"type":17,"tag":329,"props":17449,"children":17450},{},[17451],{"type":23,"value":17452},"        System.out.println(\"ValidateAspect ===  前置通知\");\n",{"type":17,"tag":329,"props":17454,"children":17455},{"class":331,"line":474},[17456],{"type":17,"tag":329,"props":17457,"children":17458},{"emptyLinePlaceholder":542},[17459],{"type":23,"value":545},{"type":17,"tag":329,"props":17461,"children":17462},{"class":331,"line":483},[17463],{"type":17,"tag":329,"props":17464,"children":17465},{},[17466],{"type":23,"value":1351},{"type":17,"tag":329,"props":17468,"children":17469},{"class":331,"line":667},[17470],{"type":17,"tag":329,"props":17471,"children":17472},{"emptyLinePlaceholder":542},[17473],{"type":23,"value":545},{"type":17,"tag":329,"props":17475,"children":17476},{"class":331,"line":676},[17477],{"type":17,"tag":329,"props":17478,"children":17479},{"emptyLinePlaceholder":542},[17480],{"type":23,"value":545},{"type":17,"tag":329,"props":17482,"children":17483},{"class":331,"line":685},[17484],{"type":17,"tag":329,"props":17485,"children":17486},{},[17487],{"type":23,"value":753},{"type":17,"tag":74,"props":17489,"children":17491},{"id":17490},"_33-基于xml的aop",[17492],{"type":23,"value":17493},"3.3 基于xml的AOP",{"type":17,"tag":57,"props":17495,"children":17496},{},[17497],{"type":23,"value":17498},"略。。。。",{"type":17,"tag":25,"props":17500,"children":17502},{"id":17501},"_4-声明式事务",[17503],{"type":23,"value":17504},"4. 声明式事务",{"type":17,"tag":74,"props":17506,"children":17508},{"id":17507},"_41-jdbctemplate",[17509],{"type":23,"value":17510},"4.1 jdbcTemplate",{"type":17,"tag":3272,"props":17512,"children":17514},{"id":17513},"_411-简介",[17515],{"type":23,"value":17516},"4.1.1 简介",{"type":17,"tag":57,"props":17518,"children":17519},{},[17520],{"type":23,"value":17521},"Spring 框架对 JDBC 进行封装，使用 JdbcTemplate 方便实现对数据库操作",{"type":17,"tag":3272,"props":17523,"children":17525},{"id":17524},"_412准备工作",[17526],{"type":23,"value":17527},"4.1.2准备工作",{"type":17,"tag":245,"props":17529,"children":17530},{},[17531],{"type":17,"tag":35,"props":17532,"children":17533},{},[17534],{"type":23,"value":1373},{"type":17,"tag":319,"props":17536,"children":17538},{"className":1376,"code":17537,"language":1378,"meta":7,"style":7},"\u003Cdependencies>\n    \u003C!-- 基于Maven依赖传递性，导入spring-context依赖即可导入当前所需所有jar包 -->\n    \u003Cdependency>\n        \u003CgroupId>org.springframework\u003C\u002FgroupId>\n        \u003CartifactId>spring-context\u003C\u002FartifactId>\n        \u003Cversion>5.3.1\u003C\u002Fversion>\n    \u003C\u002Fdependency>\n    \u003C!-- Spring 持久化层支持jar包 --> \u003C!-- Spring 在执行持久化层操作、与持久化层技术进行整合过程中，需要使用orm、jdbc、tx三个 jar包 --> \u003C!-- 导入 orm 包就可以通过 Maven 的依赖传递性把其他两个也导入 -->\n    \u003Cdependency>\n        \u003CgroupId>org.springframework\u003C\u002FgroupId>\n        \u003CartifactId>spring-orm\u003C\u002FartifactId>\n        \u003Cversion>5.3.1\u003C\u002Fversion>\n    \u003C\u002Fdependency>\n    \u003C!-- Spring 测试相关 -->\n    \u003Cdependency>\n        \u003CgroupId>org.springframework\u003C\u002FgroupId>\n        \u003CartifactId>spring-test\u003C\u002FartifactId>\n        \u003Cversion>5.3.1\u003C\u002Fversion>\n    \u003C\u002Fdependency>\n    \u003C!-- junit测试 -->\n    \u003Cdependency>\n        \u003CgroupId>junit\u003C\u002FgroupId>\n        \u003CartifactId>junit\u003C\u002FartifactId>\n        \u003Cversion>4.12\u003C\u002Fversion>\n        \u003Cscope>test\u003C\u002Fscope>\n    \u003C\u002Fdependency>\n    \u003C!-- MySQL驱动 -->\n    \u003Cdependency>\n        \u003CgroupId>mysql\u003C\u002FgroupId>\n        \u003CartifactId>mysql-connector-java\u003C\u002FartifactId>\n        \u003Cversion>8.0.16\u003C\u002Fversion>\n    \u003C\u002Fdependency>\n    \u003C!-- 数据源 -->\n    \u003Cdependency>\n        \u003CgroupId>com.alibaba\u003C\u002FgroupId>\n        \u003CartifactId>druid\u003C\u002FartifactId>\n        \u003Cversion>1.0.31\u003C\u002Fversion>\n    \u003C\u002Fdependency>\n\u003C\u002Fdependencies>\n",[17539],{"type":17,"tag":293,"props":17540,"children":17541},{"__ignoreMap":7},[17542,17549,17556,17563,17570,17577,17584,17591,17599,17606,17613,17621,17628,17635,17643,17650,17657,17665,17672,17679,17686,17693,17700,17707,17714,17721,17728,17736,17743,17750,17757,17764,17771,17779,17786,17794,17802,17810,17817],{"type":17,"tag":329,"props":17543,"children":17544},{"class":331,"line":332},[17545],{"type":17,"tag":329,"props":17546,"children":17547},{},[17548],{"type":23,"value":10282},{"type":17,"tag":329,"props":17550,"children":17551},{"class":331,"line":341},[17552],{"type":17,"tag":329,"props":17553,"children":17554},{},[17555],{"type":23,"value":10290},{"type":17,"tag":329,"props":17557,"children":17558},{"class":331,"line":350},[17559],{"type":17,"tag":329,"props":17560,"children":17561},{},[17562],{"type":23,"value":347},{"type":17,"tag":329,"props":17564,"children":17565},{"class":331,"line":359},[17566],{"type":17,"tag":329,"props":17567,"children":17568},{},[17569],{"type":23,"value":10305},{"type":17,"tag":329,"props":17571,"children":17572},{"class":331,"line":368},[17573],{"type":17,"tag":329,"props":17574,"children":17575},{},[17576],{"type":23,"value":10313},{"type":17,"tag":329,"props":17578,"children":17579},{"class":331,"line":377},[17580],{"type":17,"tag":329,"props":17581,"children":17582},{},[17583],{"type":23,"value":10321},{"type":17,"tag":329,"props":17585,"children":17586},{"class":331,"line":386},[17587],{"type":17,"tag":329,"props":17588,"children":17589},{},[17590],{"type":23,"value":480},{"type":17,"tag":329,"props":17592,"children":17593},{"class":331,"line":394},[17594],{"type":17,"tag":329,"props":17595,"children":17596},{},[17597],{"type":23,"value":17598},"    \u003C!-- Spring 持久化层支持jar包 --> \u003C!-- Spring 在执行持久化层操作、与持久化层技术进行整合过程中，需要使用orm、jdbc、tx三个 jar包 --> \u003C!-- 导入 orm 包就可以通过 Maven 的依赖传递性把其他两个也导入 -->\n",{"type":17,"tag":329,"props":17600,"children":17601},{"class":331,"line":403},[17602],{"type":17,"tag":329,"props":17603,"children":17604},{},[17605],{"type":23,"value":347},{"type":17,"tag":329,"props":17607,"children":17608},{"class":331,"line":412},[17609],{"type":17,"tag":329,"props":17610,"children":17611},{},[17612],{"type":23,"value":10305},{"type":17,"tag":329,"props":17614,"children":17615},{"class":331,"line":421},[17616],{"type":17,"tag":329,"props":17617,"children":17618},{},[17619],{"type":23,"value":17620},"        \u003CartifactId>spring-orm\u003C\u002FartifactId>\n",{"type":17,"tag":329,"props":17622,"children":17623},{"class":331,"line":430},[17624],{"type":17,"tag":329,"props":17625,"children":17626},{},[17627],{"type":23,"value":10321},{"type":17,"tag":329,"props":17629,"children":17630},{"class":331,"line":439},[17631],{"type":17,"tag":329,"props":17632,"children":17633},{},[17634],{"type":23,"value":480},{"type":17,"tag":329,"props":17636,"children":17637},{"class":331,"line":447},[17638],{"type":17,"tag":329,"props":17639,"children":17640},{},[17641],{"type":23,"value":17642},"    \u003C!-- Spring 测试相关 -->\n",{"type":17,"tag":329,"props":17644,"children":17645},{"class":331,"line":456},[17646],{"type":17,"tag":329,"props":17647,"children":17648},{},[17649],{"type":23,"value":347},{"type":17,"tag":329,"props":17651,"children":17652},{"class":331,"line":465},[17653],{"type":17,"tag":329,"props":17654,"children":17655},{},[17656],{"type":23,"value":10305},{"type":17,"tag":329,"props":17658,"children":17659},{"class":331,"line":474},[17660],{"type":17,"tag":329,"props":17661,"children":17662},{},[17663],{"type":23,"value":17664},"        \u003CartifactId>spring-test\u003C\u002FartifactId>\n",{"type":17,"tag":329,"props":17666,"children":17667},{"class":331,"line":483},[17668],{"type":17,"tag":329,"props":17669,"children":17670},{},[17671],{"type":23,"value":10321},{"type":17,"tag":329,"props":17673,"children":17674},{"class":331,"line":667},[17675],{"type":17,"tag":329,"props":17676,"children":17677},{},[17678],{"type":23,"value":480},{"type":17,"tag":329,"props":17680,"children":17681},{"class":331,"line":676},[17682],{"type":17,"tag":329,"props":17683,"children":17684},{},[17685],{"type":23,"value":10336},{"type":17,"tag":329,"props":17687,"children":17688},{"class":331,"line":685},[17689],{"type":17,"tag":329,"props":17690,"children":17691},{},[17692],{"type":23,"value":347},{"type":17,"tag":329,"props":17694,"children":17695},{"class":331,"line":694},[17696],{"type":17,"tag":329,"props":17697,"children":17698},{},[17699],{"type":23,"value":400},{"type":17,"tag":329,"props":17701,"children":17702},{"class":331,"line":1213},[17703],{"type":17,"tag":329,"props":17704,"children":17705},{},[17706],{"type":23,"value":409},{"type":17,"tag":329,"props":17708,"children":17709},{"class":331,"line":1222},[17710],{"type":17,"tag":329,"props":17711,"children":17712},{},[17713],{"type":23,"value":418},{"type":17,"tag":329,"props":17715,"children":17716},{"class":331,"line":1231},[17717],{"type":17,"tag":329,"props":17718,"children":17719},{},[17720],{"type":23,"value":427},{"type":17,"tag":329,"props":17722,"children":17723},{"class":331,"line":1240},[17724],{"type":17,"tag":329,"props":17725,"children":17726},{},[17727],{"type":23,"value":480},{"type":17,"tag":329,"props":17729,"children":17730},{"class":331,"line":1248},[17731],{"type":17,"tag":329,"props":17732,"children":17733},{},[17734],{"type":23,"value":17735},"    \u003C!-- MySQL驱动 -->\n",{"type":17,"tag":329,"props":17737,"children":17738},{"class":331,"line":1257},[17739],{"type":17,"tag":329,"props":17740,"children":17741},{},[17742],{"type":23,"value":347},{"type":17,"tag":329,"props":17744,"children":17745},{"class":331,"line":1266},[17746],{"type":17,"tag":329,"props":17747,"children":17748},{},[17749],{"type":23,"value":453},{"type":17,"tag":329,"props":17751,"children":17752},{"class":331,"line":1275},[17753],{"type":17,"tag":329,"props":17754,"children":17755},{},[17756],{"type":23,"value":462},{"type":17,"tag":329,"props":17758,"children":17759},{"class":331,"line":1284},[17760],{"type":17,"tag":329,"props":17761,"children":17762},{},[17763],{"type":23,"value":471},{"type":17,"tag":329,"props":17765,"children":17766},{"class":331,"line":1292},[17767],{"type":17,"tag":329,"props":17768,"children":17769},{},[17770],{"type":23,"value":480},{"type":17,"tag":329,"props":17772,"children":17773},{"class":331,"line":1301},[17774],{"type":17,"tag":329,"props":17775,"children":17776},{},[17777],{"type":23,"value":17778},"    \u003C!-- 数据源 -->\n",{"type":17,"tag":329,"props":17780,"children":17781},{"class":331,"line":1310},[17782],{"type":17,"tag":329,"props":17783,"children":17784},{},[17785],{"type":23,"value":347},{"type":17,"tag":329,"props":17787,"children":17788},{"class":331,"line":1319},[17789],{"type":17,"tag":329,"props":17790,"children":17791},{},[17792],{"type":23,"value":17793},"        \u003CgroupId>com.alibaba\u003C\u002FgroupId>\n",{"type":17,"tag":329,"props":17795,"children":17796},{"class":331,"line":1328},[17797],{"type":17,"tag":329,"props":17798,"children":17799},{},[17800],{"type":23,"value":17801},"        \u003CartifactId>druid\u003C\u002FartifactId>\n",{"type":17,"tag":329,"props":17803,"children":17804},{"class":331,"line":1336},[17805],{"type":17,"tag":329,"props":17806,"children":17807},{},[17808],{"type":23,"value":17809},"        \u003Cversion>1.0.31\u003C\u002Fversion>\n",{"type":17,"tag":329,"props":17811,"children":17812},{"class":331,"line":1345},[17813],{"type":17,"tag":329,"props":17814,"children":17815},{},[17816],{"type":23,"value":480},{"type":17,"tag":329,"props":17818,"children":17819},{"class":331,"line":1354},[17820],{"type":17,"tag":329,"props":17821,"children":17822},{},[17823],{"type":23,"value":489},{"type":17,"tag":245,"props":17825,"children":17826},{"start":341},[17827],{"type":17,"tag":35,"props":17828,"children":17829},{},[17830,17832],{"type":23,"value":17831},"创建",{"type":17,"tag":293,"props":17833,"children":17835},{"className":17834},[],[17836],{"type":23,"value":17837},"jdbc.properties",{"type":17,"tag":319,"props":17839,"children":17840},{"className":13102,"code":13103,"language":13104,"meta":7,"style":7},[17841],{"type":17,"tag":293,"props":17842,"children":17843},{"__ignoreMap":7},[17844,17851,17858,17865],{"type":17,"tag":329,"props":17845,"children":17846},{"class":331,"line":332},[17847],{"type":17,"tag":329,"props":17848,"children":17849},{},[17850],{"type":23,"value":13116},{"type":17,"tag":329,"props":17852,"children":17853},{"class":331,"line":341},[17854],{"type":17,"tag":329,"props":17855,"children":17856},{},[17857],{"type":23,"value":13124},{"type":17,"tag":329,"props":17859,"children":17860},{"class":331,"line":350},[17861],{"type":17,"tag":329,"props":17862,"children":17863},{},[17864],{"type":23,"value":13132},{"type":17,"tag":329,"props":17866,"children":17867},{"class":331,"line":359},[17868],{"type":17,"tag":329,"props":17869,"children":17870},{},[17871],{"type":23,"value":13140},{"type":17,"tag":245,"props":17873,"children":17874},{"start":350},[17875],{"type":17,"tag":35,"props":17876,"children":17877},{},[17878],{"type":23,"value":17879},"配置spring配置文件",{"type":17,"tag":319,"props":17881,"children":17883},{"className":1376,"code":17882,"language":1378,"meta":7,"style":7},"\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\u003Cbeans xmlns=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\"\n       xmlns:xsi=\"http:\u002F\u002Fwww.w3.org\u002F2001\u002FXMLSchema-instance\"\n       xmlns:context=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fcontext\"\n       xsi:schemaLocation=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\u002Fspring-beans.xsd http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fcontext https:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fcontext\u002Fspring-context.xsd\">\n\n    \u003Ccontext:property-placeholder location=\"jdbc-properties.properties\"\u002F>\n\n    \u003Cbean id=\"dataSource\" class=\"com.alibaba.druid.pool.DruidDataSource\">\n        \u003Cproperty name=\"driverClassName\" value=\"${jdbc.driver}\"\u002F>\n        \u003Cproperty name=\"url\" value=\"${jdbc.url}\"\u002F>\n        \u003Cproperty name=\"username\" value=\"${jdbc.username}\"\u002F>\n        \u003Cproperty name=\"password\" value=\"${jdbc.password}\"\u002F>\n    \u003C\u002Fbean>\n\n    \u003Cbean class=\"org.springframework.jdbc.core.JdbcTemplate\">\n        \u003Cproperty name=\"dataSource\" ref=\"dataSource\"\u002F>\n    \u003C\u002Fbean>\n\n\u003C\u002Fbeans>\n",[17884],{"type":17,"tag":293,"props":17885,"children":17886},{"__ignoreMap":7},[17887,17894,17901,17908,17915,17923,17930,17937,17944,17951,17958,17965,17972,17979,17986,17993,18001,18009,18016,18023],{"type":17,"tag":329,"props":17888,"children":17889},{"class":331,"line":332},[17890],{"type":17,"tag":329,"props":17891,"children":17892},{},[17893],{"type":23,"value":7968},{"type":17,"tag":329,"props":17895,"children":17896},{"class":331,"line":341},[17897],{"type":17,"tag":329,"props":17898,"children":17899},{},[17900],{"type":23,"value":10514},{"type":17,"tag":329,"props":17902,"children":17903},{"class":331,"line":350},[17904],{"type":17,"tag":329,"props":17905,"children":17906},{},[17907],{"type":23,"value":10522},{"type":17,"tag":329,"props":17909,"children":17910},{"class":331,"line":359},[17911],{"type":17,"tag":329,"props":17912,"children":17913},{},[17914],{"type":23,"value":13184},{"type":17,"tag":329,"props":17916,"children":17917},{"class":331,"line":368},[17918],{"type":17,"tag":329,"props":17919,"children":17920},{},[17921],{"type":23,"value":17922},"       xsi:schemaLocation=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\u002Fspring-beans.xsd http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fcontext https:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fcontext\u002Fspring-context.xsd\">\n",{"type":17,"tag":329,"props":17924,"children":17925},{"class":331,"line":377},[17926],{"type":17,"tag":329,"props":17927,"children":17928},{"emptyLinePlaceholder":542},[17929],{"type":23,"value":545},{"type":17,"tag":329,"props":17931,"children":17932},{"class":331,"line":386},[17933],{"type":17,"tag":329,"props":17934,"children":17935},{},[17936],{"type":23,"value":13247},{"type":17,"tag":329,"props":17938,"children":17939},{"class":331,"line":394},[17940],{"type":17,"tag":329,"props":17941,"children":17942},{"emptyLinePlaceholder":542},[17943],{"type":23,"value":545},{"type":17,"tag":329,"props":17945,"children":17946},{"class":331,"line":403},[17947],{"type":17,"tag":329,"props":17948,"children":17949},{},[17950],{"type":23,"value":13262},{"type":17,"tag":329,"props":17952,"children":17953},{"class":331,"line":412},[17954],{"type":17,"tag":329,"props":17955,"children":17956},{},[17957],{"type":23,"value":13270},{"type":17,"tag":329,"props":17959,"children":17960},{"class":331,"line":421},[17961],{"type":17,"tag":329,"props":17962,"children":17963},{},[17964],{"type":23,"value":13278},{"type":17,"tag":329,"props":17966,"children":17967},{"class":331,"line":430},[17968],{"type":17,"tag":329,"props":17969,"children":17970},{},[17971],{"type":23,"value":13286},{"type":17,"tag":329,"props":17973,"children":17974},{"class":331,"line":439},[17975],{"type":17,"tag":329,"props":17976,"children":17977},{},[17978],{"type":23,"value":13294},{"type":17,"tag":329,"props":17980,"children":17981},{"class":331,"line":447},[17982],{"type":17,"tag":329,"props":17983,"children":17984},{},[17985],{"type":23,"value":13302},{"type":17,"tag":329,"props":17987,"children":17988},{"class":331,"line":456},[17989],{"type":17,"tag":329,"props":17990,"children":17991},{"emptyLinePlaceholder":542},[17992],{"type":23,"value":545},{"type":17,"tag":329,"props":17994,"children":17995},{"class":331,"line":465},[17996],{"type":17,"tag":329,"props":17997,"children":17998},{},[17999],{"type":23,"value":18000},"    \u003Cbean class=\"org.springframework.jdbc.core.JdbcTemplate\">\n",{"type":17,"tag":329,"props":18002,"children":18003},{"class":331,"line":474},[18004],{"type":17,"tag":329,"props":18005,"children":18006},{},[18007],{"type":23,"value":18008},"        \u003Cproperty name=\"dataSource\" ref=\"dataSource\"\u002F>\n",{"type":17,"tag":329,"props":18010,"children":18011},{"class":331,"line":483},[18012],{"type":17,"tag":329,"props":18013,"children":18014},{},[18015],{"type":23,"value":13302},{"type":17,"tag":329,"props":18017,"children":18018},{"class":331,"line":667},[18019],{"type":17,"tag":329,"props":18020,"children":18021},{"emptyLinePlaceholder":542},[18022],{"type":23,"value":545},{"type":17,"tag":329,"props":18024,"children":18025},{"class":331,"line":676},[18026],{"type":17,"tag":329,"props":18027,"children":18028},{},[18029],{"type":23,"value":10608},{"type":17,"tag":245,"props":18031,"children":18032},{"start":359},[18033],{"type":17,"tag":35,"props":18034,"children":18035},{},[18036],{"type":23,"value":18037},"测试",{"type":17,"tag":319,"props":18039,"children":18041},{"className":321,"code":18040,"language":323,"meta":7,"style":7},"package com.wangkun.spring.jdbc;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.jdbc.core.BeanPropertyRowMapper;\nimport org.springframework.jdbc.core.JdbcTemplate;\nimport org.springframework.test.context.ContextConfiguration;\nimport org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\n\nimport java.util.List;\nimport java.util.stream.Stream;\n\n@RunWith(SpringJUnit4ClassRunner.class)\n@ContextConfiguration(\"classpath:spring-jdbc.xml\")\npublic class TestJDBCTemplate {\n\n    @Autowired\n    private JdbcTemplate jdbcTemplate;\n\n    \u002F**\n     * 新增\n     *\u002F\n    @Test\n    public void testInsetUser() {\n        String sql = \"insert into t_user values (null, ?, ?, ?, ?, ?)\";\n        jdbcTemplate.update(sql, \"root\", \"123\", \"23\", \"女\", \"123.qq.com\");\n    }\n\n    \u002F**\n     * 根据id查用户\n     *\u002F\n    @Test\n    public void testGetUserById() {\n        String sql = \"select * from t_user where id = ?\";\n        User user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper\u003C>(User.class), 1);\n        System.out.println(user);\n    }\n\n    \u002F**\n     * 查询所有用户\n     *\u002F\n    @Test\n    public void testGetAllUser() {\n        String sql = \"select * from t_user\";\n        List\u003CUser> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper\u003C>(User.class));\n\n        for (User user : list) {\n            System.out.println(user);\n        }\n    }\n\n    \u002F**\n     * 查询一共有多少条数据\n     *\u002F\n    @Test\n    public void testGetAllCount() {\n        String sql = \"select count(*) from t_user\";\n        Integer integer = jdbcTemplate.queryForObject(sql, Integer.class);\n        System.out.println(integer);\n    }\n}\n",[18042],{"type":17,"tag":293,"props":18043,"children":18044},{"__ignoreMap":7},[18045,18053,18060,18067,18075,18083,18091,18099,18107,18115,18122,18129,18137,18144,18152,18160,18168,18175,18182,18190,18197,18204,18212,18219,18226,18234,18242,18250,18257,18264,18271,18279,18286,18293,18301,18309,18317,18324,18331,18338,18345,18353,18360,18367,18375,18383,18391,18398,18406,18414,18421,18428,18435,18442,18450,18457,18464,18472,18480,18488,18496,18503],{"type":17,"tag":329,"props":18046,"children":18047},{"class":331,"line":332},[18048],{"type":17,"tag":329,"props":18049,"children":18050},{},[18051],{"type":23,"value":18052},"package com.wangkun.spring.jdbc;\n",{"type":17,"tag":329,"props":18054,"children":18055},{"class":331,"line":341},[18056],{"type":17,"tag":329,"props":18057,"children":18058},{"emptyLinePlaceholder":542},[18059],{"type":23,"value":545},{"type":17,"tag":329,"props":18061,"children":18062},{"class":331,"line":350},[18063],{"type":17,"tag":329,"props":18064,"children":18065},{},[18066],{"type":23,"value":1101},{"type":17,"tag":329,"props":18068,"children":18069},{"class":331,"line":359},[18070],{"type":17,"tag":329,"props":18071,"children":18072},{},[18073],{"type":23,"value":18074},"import org.junit.runner.RunWith;\n",{"type":17,"tag":329,"props":18076,"children":18077},{"class":331,"line":368},[18078],{"type":17,"tag":329,"props":18079,"children":18080},{},[18081],{"type":23,"value":18082},"import org.springframework.beans.factory.annotation.Autowired;\n",{"type":17,"tag":329,"props":18084,"children":18085},{"class":331,"line":377},[18086],{"type":17,"tag":329,"props":18087,"children":18088},{},[18089],{"type":23,"value":18090},"import org.springframework.jdbc.core.BeanPropertyRowMapper;\n",{"type":17,"tag":329,"props":18092,"children":18093},{"class":331,"line":386},[18094],{"type":17,"tag":329,"props":18095,"children":18096},{},[18097],{"type":23,"value":18098},"import org.springframework.jdbc.core.JdbcTemplate;\n",{"type":17,"tag":329,"props":18100,"children":18101},{"class":331,"line":394},[18102],{"type":17,"tag":329,"props":18103,"children":18104},{},[18105],{"type":23,"value":18106},"import org.springframework.test.context.ContextConfiguration;\n",{"type":17,"tag":329,"props":18108,"children":18109},{"class":331,"line":403},[18110],{"type":17,"tag":329,"props":18111,"children":18112},{},[18113],{"type":23,"value":18114},"import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\n",{"type":17,"tag":329,"props":18116,"children":18117},{"class":331,"line":412},[18118],{"type":17,"tag":329,"props":18119,"children":18120},{"emptyLinePlaceholder":542},[18121],{"type":23,"value":545},{"type":17,"tag":329,"props":18123,"children":18124},{"class":331,"line":421},[18125],{"type":17,"tag":329,"props":18126,"children":18127},{},[18128],{"type":23,"value":8938},{"type":17,"tag":329,"props":18130,"children":18131},{"class":331,"line":430},[18132],{"type":17,"tag":329,"props":18133,"children":18134},{},[18135],{"type":23,"value":18136},"import java.util.stream.Stream;\n",{"type":17,"tag":329,"props":18138,"children":18139},{"class":331,"line":439},[18140],{"type":17,"tag":329,"props":18141,"children":18142},{"emptyLinePlaceholder":542},[18143],{"type":23,"value":545},{"type":17,"tag":329,"props":18145,"children":18146},{"class":331,"line":447},[18147],{"type":17,"tag":329,"props":18148,"children":18149},{},[18150],{"type":23,"value":18151},"@RunWith(SpringJUnit4ClassRunner.class)\n",{"type":17,"tag":329,"props":18153,"children":18154},{"class":331,"line":456},[18155],{"type":17,"tag":329,"props":18156,"children":18157},{},[18158],{"type":23,"value":18159},"@ContextConfiguration(\"classpath:spring-jdbc.xml\")\n",{"type":17,"tag":329,"props":18161,"children":18162},{"class":331,"line":465},[18163],{"type":17,"tag":329,"props":18164,"children":18165},{},[18166],{"type":23,"value":18167},"public class TestJDBCTemplate {\n",{"type":17,"tag":329,"props":18169,"children":18170},{"class":331,"line":474},[18171],{"type":17,"tag":329,"props":18172,"children":18173},{"emptyLinePlaceholder":542},[18174],{"type":23,"value":545},{"type":17,"tag":329,"props":18176,"children":18177},{"class":331,"line":483},[18178],{"type":17,"tag":329,"props":18179,"children":18180},{},[18181],{"type":23,"value":15358},{"type":17,"tag":329,"props":18183,"children":18184},{"class":331,"line":667},[18185],{"type":17,"tag":329,"props":18186,"children":18187},{},[18188],{"type":23,"value":18189},"    private JdbcTemplate jdbcTemplate;\n",{"type":17,"tag":329,"props":18191,"children":18192},{"class":331,"line":676},[18193],{"type":17,"tag":329,"props":18194,"children":18195},{"emptyLinePlaceholder":542},[18196],{"type":23,"value":545},{"type":17,"tag":329,"props":18198,"children":18199},{"class":331,"line":685},[18200],{"type":17,"tag":329,"props":18201,"children":18202},{},[18203],{"type":23,"value":8968},{"type":17,"tag":329,"props":18205,"children":18206},{"class":331,"line":694},[18207],{"type":17,"tag":329,"props":18208,"children":18209},{},[18210],{"type":23,"value":18211},"     * 新增\n",{"type":17,"tag":329,"props":18213,"children":18214},{"class":331,"line":1213},[18215],{"type":17,"tag":329,"props":18216,"children":18217},{},[18218],{"type":23,"value":8984},{"type":17,"tag":329,"props":18220,"children":18221},{"class":331,"line":1222},[18222],{"type":17,"tag":329,"props":18223,"children":18224},{},[18225],{"type":23,"value":1147},{"type":17,"tag":329,"props":18227,"children":18228},{"class":331,"line":1231},[18229],{"type":17,"tag":329,"props":18230,"children":18231},{},[18232],{"type":23,"value":18233},"    public void testInsetUser() {\n",{"type":17,"tag":329,"props":18235,"children":18236},{"class":331,"line":1240},[18237],{"type":17,"tag":329,"props":18238,"children":18239},{},[18240],{"type":23,"value":18241},"        String sql = \"insert into t_user values (null, ?, ?, ?, ?, ?)\";\n",{"type":17,"tag":329,"props":18243,"children":18244},{"class":331,"line":1248},[18245],{"type":17,"tag":329,"props":18246,"children":18247},{},[18248],{"type":23,"value":18249},"        jdbcTemplate.update(sql, \"root\", \"123\", \"23\", \"女\", \"123.qq.com\");\n",{"type":17,"tag":329,"props":18251,"children":18252},{"class":331,"line":1257},[18253],{"type":17,"tag":329,"props":18254,"children":18255},{},[18256],{"type":23,"value":1351},{"type":17,"tag":329,"props":18258,"children":18259},{"class":331,"line":1266},[18260],{"type":17,"tag":329,"props":18261,"children":18262},{"emptyLinePlaceholder":542},[18263],{"type":23,"value":545},{"type":17,"tag":329,"props":18265,"children":18266},{"class":331,"line":1275},[18267],{"type":17,"tag":329,"props":18268,"children":18269},{},[18270],{"type":23,"value":8968},{"type":17,"tag":329,"props":18272,"children":18273},{"class":331,"line":1284},[18274],{"type":17,"tag":329,"props":18275,"children":18276},{},[18277],{"type":23,"value":18278},"     * 根据id查用户\n",{"type":17,"tag":329,"props":18280,"children":18281},{"class":331,"line":1292},[18282],{"type":17,"tag":329,"props":18283,"children":18284},{},[18285],{"type":23,"value":8984},{"type":17,"tag":329,"props":18287,"children":18288},{"class":331,"line":1301},[18289],{"type":17,"tag":329,"props":18290,"children":18291},{},[18292],{"type":23,"value":1147},{"type":17,"tag":329,"props":18294,"children":18295},{"class":331,"line":1310},[18296],{"type":17,"tag":329,"props":18297,"children":18298},{},[18299],{"type":23,"value":18300},"    public void testGetUserById() {\n",{"type":17,"tag":329,"props":18302,"children":18303},{"class":331,"line":1319},[18304],{"type":17,"tag":329,"props":18305,"children":18306},{},[18307],{"type":23,"value":18308},"        String sql = \"select * from t_user where id = ?\";\n",{"type":17,"tag":329,"props":18310,"children":18311},{"class":331,"line":1328},[18312],{"type":17,"tag":329,"props":18313,"children":18314},{},[18315],{"type":23,"value":18316},"        User user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper\u003C>(User.class), 1);\n",{"type":17,"tag":329,"props":18318,"children":18319},{"class":331,"line":1336},[18320],{"type":17,"tag":329,"props":18321,"children":18322},{},[18323],{"type":23,"value":3054},{"type":17,"tag":329,"props":18325,"children":18326},{"class":331,"line":1345},[18327],{"type":17,"tag":329,"props":18328,"children":18329},{},[18330],{"type":23,"value":1351},{"type":17,"tag":329,"props":18332,"children":18333},{"class":331,"line":1354},[18334],{"type":17,"tag":329,"props":18335,"children":18336},{"emptyLinePlaceholder":542},[18337],{"type":23,"value":545},{"type":17,"tag":329,"props":18339,"children":18340},{"class":331,"line":1979},[18341],{"type":17,"tag":329,"props":18342,"children":18343},{},[18344],{"type":23,"value":8968},{"type":17,"tag":329,"props":18346,"children":18347},{"class":331,"line":1988},[18348],{"type":17,"tag":329,"props":18349,"children":18350},{},[18351],{"type":23,"value":18352},"     * 查询所有用户\n",{"type":17,"tag":329,"props":18354,"children":18355},{"class":331,"line":1997},[18356],{"type":17,"tag":329,"props":18357,"children":18358},{},[18359],{"type":23,"value":8984},{"type":17,"tag":329,"props":18361,"children":18362},{"class":331,"line":2006},[18363],{"type":17,"tag":329,"props":18364,"children":18365},{},[18366],{"type":23,"value":1147},{"type":17,"tag":329,"props":18368,"children":18369},{"class":331,"line":2014},[18370],{"type":17,"tag":329,"props":18371,"children":18372},{},[18373],{"type":23,"value":18374},"    public void testGetAllUser() {\n",{"type":17,"tag":329,"props":18376,"children":18377},{"class":331,"line":8306},[18378],{"type":17,"tag":329,"props":18379,"children":18380},{},[18381],{"type":23,"value":18382},"        String sql = \"select * from t_user\";\n",{"type":17,"tag":329,"props":18384,"children":18385},{"class":331,"line":8315},[18386],{"type":17,"tag":329,"props":18387,"children":18388},{},[18389],{"type":23,"value":18390},"        List\u003CUser> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper\u003C>(User.class));\n",{"type":17,"tag":329,"props":18392,"children":18393},{"class":331,"line":8324},[18394],{"type":17,"tag":329,"props":18395,"children":18396},{"emptyLinePlaceholder":542},[18397],{"type":23,"value":545},{"type":17,"tag":329,"props":18399,"children":18400},{"class":331,"line":8333},[18401],{"type":17,"tag":329,"props":18402,"children":18403},{},[18404],{"type":23,"value":18405},"        for (User user : list) {\n",{"type":17,"tag":329,"props":18407,"children":18408},{"class":331,"line":8342},[18409],{"type":17,"tag":329,"props":18410,"children":18411},{},[18412],{"type":23,"value":18413},"            System.out.println(user);\n",{"type":17,"tag":329,"props":18415,"children":18416},{"class":331,"line":8351},[18417],{"type":17,"tag":329,"props":18418,"children":18419},{},[18420],{"type":23,"value":9150},{"type":17,"tag":329,"props":18422,"children":18423},{"class":331,"line":8360},[18424],{"type":17,"tag":329,"props":18425,"children":18426},{},[18427],{"type":23,"value":1351},{"type":17,"tag":329,"props":18429,"children":18430},{"class":331,"line":8369},[18431],{"type":17,"tag":329,"props":18432,"children":18433},{"emptyLinePlaceholder":542},[18434],{"type":23,"value":545},{"type":17,"tag":329,"props":18436,"children":18437},{"class":331,"line":8378},[18438],{"type":17,"tag":329,"props":18439,"children":18440},{},[18441],{"type":23,"value":8968},{"type":17,"tag":329,"props":18443,"children":18444},{"class":331,"line":8387},[18445],{"type":17,"tag":329,"props":18446,"children":18447},{},[18448],{"type":23,"value":18449},"     * 查询一共有多少条数据\n",{"type":17,"tag":329,"props":18451,"children":18452},{"class":331,"line":8396},[18453],{"type":17,"tag":329,"props":18454,"children":18455},{},[18456],{"type":23,"value":8984},{"type":17,"tag":329,"props":18458,"children":18459},{"class":331,"line":8405},[18460],{"type":17,"tag":329,"props":18461,"children":18462},{},[18463],{"type":23,"value":1147},{"type":17,"tag":329,"props":18465,"children":18466},{"class":331,"line":8414},[18467],{"type":17,"tag":329,"props":18468,"children":18469},{},[18470],{"type":23,"value":18471},"    public void testGetAllCount() {\n",{"type":17,"tag":329,"props":18473,"children":18474},{"class":331,"line":8423},[18475],{"type":17,"tag":329,"props":18476,"children":18477},{},[18478],{"type":23,"value":18479},"        String sql = \"select count(*) from t_user\";\n",{"type":17,"tag":329,"props":18481,"children":18482},{"class":331,"line":8432},[18483],{"type":17,"tag":329,"props":18484,"children":18485},{},[18486],{"type":23,"value":18487},"        Integer integer = jdbcTemplate.queryForObject(sql, Integer.class);\n",{"type":17,"tag":329,"props":18489,"children":18490},{"class":331,"line":8441},[18491],{"type":17,"tag":329,"props":18492,"children":18493},{},[18494],{"type":23,"value":18495},"        System.out.println(integer);\n",{"type":17,"tag":329,"props":18497,"children":18498},{"class":331,"line":8449},[18499],{"type":17,"tag":329,"props":18500,"children":18501},{},[18502],{"type":23,"value":1351},{"type":17,"tag":329,"props":18504,"children":18505},{"class":331,"line":8458},[18506],{"type":17,"tag":329,"props":18507,"children":18508},{},[18509],{"type":23,"value":753},{"type":17,"tag":74,"props":18511,"children":18513},{"id":18512},"_42-声明式事务概念",[18514],{"type":23,"value":18515},"4.2 声明式事务概念",{"type":17,"tag":3272,"props":18517,"children":18519},{"id":18518},"_421-编程式事务",[18520],{"type":23,"value":18521},"4.2.1 编程式事务",{"type":17,"tag":53,"props":18523,"children":18524},{},[18525],{"type":17,"tag":57,"props":18526,"children":18527},{},[18528],{"type":23,"value":18529},"事务功能的相关操作全部通过自己编写代码来实现",{"type":17,"tag":57,"props":18531,"children":18532},{},[18533],{"type":23,"value":18534},"编程式的实现方式存在缺陷：",{"type":17,"tag":31,"props":18536,"children":18537},{},[18538,18543],{"type":17,"tag":35,"props":18539,"children":18540},{},[18541],{"type":23,"value":18542},"细节没有被屏蔽：具体操作过程中，所有细节都需要程序员自己来完成，比较繁琐。",{"type":17,"tag":35,"props":18544,"children":18545},{},[18546],{"type":23,"value":18547},"代码复用性不高：如果没有有效抽取出来，每次实现功能都需要自己编写代码，代码就没有得到复用",{"type":17,"tag":3272,"props":18549,"children":18551},{"id":18550},"_422-声明式事务",[18552],{"type":23,"value":18553},"4.2.2 声明式事务",{"type":17,"tag":53,"props":18555,"children":18556},{},[18557],{"type":17,"tag":57,"props":18558,"children":18559},{},[18560],{"type":23,"value":18561},"既然事务控制的代码有规律可循，代码的结构基本是确定的，所以框架就可以将固定模式的代码抽取出来，进行相关的封装。封装起来后，我们只需要在配置文件中进行简单的配置即可完成操作。",{"type":17,"tag":57,"props":18563,"children":18564},{},[18565],{"type":17,"tag":86,"props":18566,"children":18567},{},[18568],{"type":23,"value":18569},"优点：",{"type":17,"tag":245,"props":18571,"children":18572},{},[18573,18578,18583],{"type":17,"tag":35,"props":18574,"children":18575},{},[18576],{"type":23,"value":18577},"提高开发效率",{"type":17,"tag":35,"props":18579,"children":18580},{},[18581],{"type":23,"value":18582},"消除了冗余的代码",{"type":17,"tag":35,"props":18584,"children":18585},{},[18586],{"type":23,"value":18587},"框架会综合考虑相关领域中在实际开发环境下有可能遇到的各种问题，进行了健壮性、性能等各个方面的优化",{"type":17,"tag":57,"props":18589,"children":18590},{},[18591],{"type":17,"tag":86,"props":18592,"children":18593},{},[18594],{"type":23,"value":4493},{"type":17,"tag":57,"props":18596,"children":18597},{},[18598,18603,18604,18609],{"type":17,"tag":86,"props":18599,"children":18600},{},[18601],{"type":23,"value":18602},"编程式",{"type":23,"value":15656},{"type":17,"tag":86,"props":18605,"children":18606},{},[18607],{"type":23,"value":18608},"自己写代码",{"type":23,"value":18610},"实现功能",{"type":17,"tag":57,"props":18612,"children":18613},{},[18614,18619,18621,18626,18628,18633],{"type":17,"tag":86,"props":18615,"children":18616},{},[18617],{"type":23,"value":18618},"声明式",{"type":23,"value":18620},"：通过",{"type":17,"tag":86,"props":18622,"children":18623},{},[18624],{"type":23,"value":18625},"配置",{"type":23,"value":18627},"让",{"type":17,"tag":86,"props":18629,"children":18630},{},[18631],{"type":23,"value":18632},"框架",{"type":23,"value":18610},{"type":17,"tag":74,"props":18635,"children":18637},{"id":18636},"_43-基于注解的声明式事务",[18638],{"type":23,"value":18639},"4.3 基于注解的声明式事务",{"type":17,"tag":3272,"props":18641,"children":18643},{"id":18642},"_431-准备工作",[18644],{"type":23,"value":18645},"4.3.1 准备工作",{"type":17,"tag":245,"props":18647,"children":18648},{},[18649],{"type":17,"tag":35,"props":18650,"children":18651},{},[18652],{"type":23,"value":1373},{"type":17,"tag":319,"props":18654,"children":18655},{"className":1376,"code":17537,"language":1378,"meta":7,"style":7},[18656],{"type":17,"tag":293,"props":18657,"children":18658},{"__ignoreMap":7},[18659,18666,18673,18680,18687,18694,18701,18708,18715,18722,18729,18736,18743,18750,18757,18764,18771,18778,18785,18792,18799,18806,18813,18820,18827,18834,18841,18848,18855,18862,18869,18876,18883,18890,18897,18904,18911,18918,18925],{"type":17,"tag":329,"props":18660,"children":18661},{"class":331,"line":332},[18662],{"type":17,"tag":329,"props":18663,"children":18664},{},[18665],{"type":23,"value":10282},{"type":17,"tag":329,"props":18667,"children":18668},{"class":331,"line":341},[18669],{"type":17,"tag":329,"props":18670,"children":18671},{},[18672],{"type":23,"value":10290},{"type":17,"tag":329,"props":18674,"children":18675},{"class":331,"line":350},[18676],{"type":17,"tag":329,"props":18677,"children":18678},{},[18679],{"type":23,"value":347},{"type":17,"tag":329,"props":18681,"children":18682},{"class":331,"line":359},[18683],{"type":17,"tag":329,"props":18684,"children":18685},{},[18686],{"type":23,"value":10305},{"type":17,"tag":329,"props":18688,"children":18689},{"class":331,"line":368},[18690],{"type":17,"tag":329,"props":18691,"children":18692},{},[18693],{"type":23,"value":10313},{"type":17,"tag":329,"props":18695,"children":18696},{"class":331,"line":377},[18697],{"type":17,"tag":329,"props":18698,"children":18699},{},[18700],{"type":23,"value":10321},{"type":17,"tag":329,"props":18702,"children":18703},{"class":331,"line":386},[18704],{"type":17,"tag":329,"props":18705,"children":18706},{},[18707],{"type":23,"value":480},{"type":17,"tag":329,"props":18709,"children":18710},{"class":331,"line":394},[18711],{"type":17,"tag":329,"props":18712,"children":18713},{},[18714],{"type":23,"value":17598},{"type":17,"tag":329,"props":18716,"children":18717},{"class":331,"line":403},[18718],{"type":17,"tag":329,"props":18719,"children":18720},{},[18721],{"type":23,"value":347},{"type":17,"tag":329,"props":18723,"children":18724},{"class":331,"line":412},[18725],{"type":17,"tag":329,"props":18726,"children":18727},{},[18728],{"type":23,"value":10305},{"type":17,"tag":329,"props":18730,"children":18731},{"class":331,"line":421},[18732],{"type":17,"tag":329,"props":18733,"children":18734},{},[18735],{"type":23,"value":17620},{"type":17,"tag":329,"props":18737,"children":18738},{"class":331,"line":430},[18739],{"type":17,"tag":329,"props":18740,"children":18741},{},[18742],{"type":23,"value":10321},{"type":17,"tag":329,"props":18744,"children":18745},{"class":331,"line":439},[18746],{"type":17,"tag":329,"props":18747,"children":18748},{},[18749],{"type":23,"value":480},{"type":17,"tag":329,"props":18751,"children":18752},{"class":331,"line":447},[18753],{"type":17,"tag":329,"props":18754,"children":18755},{},[18756],{"type":23,"value":17642},{"type":17,"tag":329,"props":18758,"children":18759},{"class":331,"line":456},[18760],{"type":17,"tag":329,"props":18761,"children":18762},{},[18763],{"type":23,"value":347},{"type":17,"tag":329,"props":18765,"children":18766},{"class":331,"line":465},[18767],{"type":17,"tag":329,"props":18768,"children":18769},{},[18770],{"type":23,"value":10305},{"type":17,"tag":329,"props":18772,"children":18773},{"class":331,"line":474},[18774],{"type":17,"tag":329,"props":18775,"children":18776},{},[18777],{"type":23,"value":17664},{"type":17,"tag":329,"props":18779,"children":18780},{"class":331,"line":483},[18781],{"type":17,"tag":329,"props":18782,"children":18783},{},[18784],{"type":23,"value":10321},{"type":17,"tag":329,"props":18786,"children":18787},{"class":331,"line":667},[18788],{"type":17,"tag":329,"props":18789,"children":18790},{},[18791],{"type":23,"value":480},{"type":17,"tag":329,"props":18793,"children":18794},{"class":331,"line":676},[18795],{"type":17,"tag":329,"props":18796,"children":18797},{},[18798],{"type":23,"value":10336},{"type":17,"tag":329,"props":18800,"children":18801},{"class":331,"line":685},[18802],{"type":17,"tag":329,"props":18803,"children":18804},{},[18805],{"type":23,"value":347},{"type":17,"tag":329,"props":18807,"children":18808},{"class":331,"line":694},[18809],{"type":17,"tag":329,"props":18810,"children":18811},{},[18812],{"type":23,"value":400},{"type":17,"tag":329,"props":18814,"children":18815},{"class":331,"line":1213},[18816],{"type":17,"tag":329,"props":18817,"children":18818},{},[18819],{"type":23,"value":409},{"type":17,"tag":329,"props":18821,"children":18822},{"class":331,"line":1222},[18823],{"type":17,"tag":329,"props":18824,"children":18825},{},[18826],{"type":23,"value":418},{"type":17,"tag":329,"props":18828,"children":18829},{"class":331,"line":1231},[18830],{"type":17,"tag":329,"props":18831,"children":18832},{},[18833],{"type":23,"value":427},{"type":17,"tag":329,"props":18835,"children":18836},{"class":331,"line":1240},[18837],{"type":17,"tag":329,"props":18838,"children":18839},{},[18840],{"type":23,"value":480},{"type":17,"tag":329,"props":18842,"children":18843},{"class":331,"line":1248},[18844],{"type":17,"tag":329,"props":18845,"children":18846},{},[18847],{"type":23,"value":17735},{"type":17,"tag":329,"props":18849,"children":18850},{"class":331,"line":1257},[18851],{"type":17,"tag":329,"props":18852,"children":18853},{},[18854],{"type":23,"value":347},{"type":17,"tag":329,"props":18856,"children":18857},{"class":331,"line":1266},[18858],{"type":17,"tag":329,"props":18859,"children":18860},{},[18861],{"type":23,"value":453},{"type":17,"tag":329,"props":18863,"children":18864},{"class":331,"line":1275},[18865],{"type":17,"tag":329,"props":18866,"children":18867},{},[18868],{"type":23,"value":462},{"type":17,"tag":329,"props":18870,"children":18871},{"class":331,"line":1284},[18872],{"type":17,"tag":329,"props":18873,"children":18874},{},[18875],{"type":23,"value":471},{"type":17,"tag":329,"props":18877,"children":18878},{"class":331,"line":1292},[18879],{"type":17,"tag":329,"props":18880,"children":18881},{},[18882],{"type":23,"value":480},{"type":17,"tag":329,"props":18884,"children":18885},{"class":331,"line":1301},[18886],{"type":17,"tag":329,"props":18887,"children":18888},{},[18889],{"type":23,"value":17778},{"type":17,"tag":329,"props":18891,"children":18892},{"class":331,"line":1310},[18893],{"type":17,"tag":329,"props":18894,"children":18895},{},[18896],{"type":23,"value":347},{"type":17,"tag":329,"props":18898,"children":18899},{"class":331,"line":1319},[18900],{"type":17,"tag":329,"props":18901,"children":18902},{},[18903],{"type":23,"value":17793},{"type":17,"tag":329,"props":18905,"children":18906},{"class":331,"line":1328},[18907],{"type":17,"tag":329,"props":18908,"children":18909},{},[18910],{"type":23,"value":17801},{"type":17,"tag":329,"props":18912,"children":18913},{"class":331,"line":1336},[18914],{"type":17,"tag":329,"props":18915,"children":18916},{},[18917],{"type":23,"value":17809},{"type":17,"tag":329,"props":18919,"children":18920},{"class":331,"line":1345},[18921],{"type":17,"tag":329,"props":18922,"children":18923},{},[18924],{"type":23,"value":480},{"type":17,"tag":329,"props":18926,"children":18927},{"class":331,"line":1354},[18928],{"type":17,"tag":329,"props":18929,"children":18930},{},[18931],{"type":23,"value":489},{"type":17,"tag":245,"props":18933,"children":18934},{"start":341},[18935],{"type":17,"tag":35,"props":18936,"children":18937},{},[18938],{"type":23,"value":17837},{"type":17,"tag":319,"props":18940,"children":18941},{"className":13102,"code":13103,"language":13104,"meta":7,"style":7},[18942],{"type":17,"tag":293,"props":18943,"children":18944},{"__ignoreMap":7},[18945,18952,18959,18966],{"type":17,"tag":329,"props":18946,"children":18947},{"class":331,"line":332},[18948],{"type":17,"tag":329,"props":18949,"children":18950},{},[18951],{"type":23,"value":13116},{"type":17,"tag":329,"props":18953,"children":18954},{"class":331,"line":341},[18955],{"type":17,"tag":329,"props":18956,"children":18957},{},[18958],{"type":23,"value":13124},{"type":17,"tag":329,"props":18960,"children":18961},{"class":331,"line":350},[18962],{"type":17,"tag":329,"props":18963,"children":18964},{},[18965],{"type":23,"value":13132},{"type":17,"tag":329,"props":18967,"children":18968},{"class":331,"line":359},[18969],{"type":17,"tag":329,"props":18970,"children":18971},{},[18972],{"type":23,"value":13140},{"type":17,"tag":245,"props":18974,"children":18975},{"start":350},[18976],{"type":17,"tag":35,"props":18977,"children":18978},{},[18979],{"type":23,"value":17879},{"type":17,"tag":319,"props":18981,"children":18983},{"className":1376,"code":18982,"language":1378,"meta":7,"style":7},"\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\u003Cbeans xmlns=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\"\n       xmlns:xsi=\"http:\u002F\u002Fwww.w3.org\u002F2001\u002FXMLSchema-instance\"\n       xmlns:context=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fcontext\"\n       xsi:schemaLocation=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\u002Fspring-beans.xsd http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fcontext https:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fcontext\u002Fspring-context.xsd\">\n\n    \u003C!--扫描组件，将组件交给spring管理-->\n    \u003Ccontext:component-scan base-package=\"com.wangkun.spring.jdbc\"\u002F>\n\n    \u003C!--引入外部文件-->\n    \u003Ccontext:property-placeholder location=\"jdbc-properties.properties\"\u002F>\n\n    \u003C!--配置数据源-->\n    \u003Cbean id=\"dataSource\" class=\"com.alibaba.druid.pool.DruidDataSource\">\n        \u003Cproperty name=\"driverClassName\" value=\"${jdbc.driver}\"\u002F>\n        \u003Cproperty name=\"url\" value=\"${jdbc.url}\"\u002F>\n        \u003Cproperty name=\"username\" value=\"${jdbc.username}\"\u002F>\n        \u003Cproperty name=\"password\" value=\"${jdbc.password}\"\u002F>\n    \u003C\u002Fbean>\n\n    \u003C!--配置 JDBCTemplate-->\n    \u003Cbean class=\"org.springframework.jdbc.core.JdbcTemplate\">\n        \u003Cproperty name=\"dataSource\" ref=\"dataSource\"\u002F>\n    \u003C\u002Fbean>\n\u003C\u002Fbeans>\n",[18984],{"type":17,"tag":293,"props":18985,"children":18986},{"__ignoreMap":7},[18987,18994,19001,19008,19015,19022,19029,19037,19045,19052,19060,19067,19074,19082,19089,19096,19103,19110,19117,19124,19131,19139,19146,19153,19160],{"type":17,"tag":329,"props":18988,"children":18989},{"class":331,"line":332},[18990],{"type":17,"tag":329,"props":18991,"children":18992},{},[18993],{"type":23,"value":7968},{"type":17,"tag":329,"props":18995,"children":18996},{"class":331,"line":341},[18997],{"type":17,"tag":329,"props":18998,"children":18999},{},[19000],{"type":23,"value":10514},{"type":17,"tag":329,"props":19002,"children":19003},{"class":331,"line":350},[19004],{"type":17,"tag":329,"props":19005,"children":19006},{},[19007],{"type":23,"value":10522},{"type":17,"tag":329,"props":19009,"children":19010},{"class":331,"line":359},[19011],{"type":17,"tag":329,"props":19012,"children":19013},{},[19014],{"type":23,"value":13184},{"type":17,"tag":329,"props":19016,"children":19017},{"class":331,"line":368},[19018],{"type":17,"tag":329,"props":19019,"children":19020},{},[19021],{"type":23,"value":17922},{"type":17,"tag":329,"props":19023,"children":19024},{"class":331,"line":377},[19025],{"type":17,"tag":329,"props":19026,"children":19027},{"emptyLinePlaceholder":542},[19028],{"type":23,"value":545},{"type":17,"tag":329,"props":19030,"children":19031},{"class":331,"line":386},[19032],{"type":17,"tag":329,"props":19033,"children":19034},{},[19035],{"type":23,"value":19036},"    \u003C!--扫描组件，将组件交给spring管理-->\n",{"type":17,"tag":329,"props":19038,"children":19039},{"class":331,"line":394},[19040],{"type":17,"tag":329,"props":19041,"children":19042},{},[19043],{"type":23,"value":19044},"    \u003Ccontext:component-scan base-package=\"com.wangkun.spring.jdbc\"\u002F>\n",{"type":17,"tag":329,"props":19046,"children":19047},{"class":331,"line":403},[19048],{"type":17,"tag":329,"props":19049,"children":19050},{"emptyLinePlaceholder":542},[19051],{"type":23,"value":545},{"type":17,"tag":329,"props":19053,"children":19054},{"class":331,"line":412},[19055],{"type":17,"tag":329,"props":19056,"children":19057},{},[19058],{"type":23,"value":19059},"    \u003C!--引入外部文件-->\n",{"type":17,"tag":329,"props":19061,"children":19062},{"class":331,"line":421},[19063],{"type":17,"tag":329,"props":19064,"children":19065},{},[19066],{"type":23,"value":13247},{"type":17,"tag":329,"props":19068,"children":19069},{"class":331,"line":430},[19070],{"type":17,"tag":329,"props":19071,"children":19072},{"emptyLinePlaceholder":542},[19073],{"type":23,"value":545},{"type":17,"tag":329,"props":19075,"children":19076},{"class":331,"line":439},[19077],{"type":17,"tag":329,"props":19078,"children":19079},{},[19080],{"type":23,"value":19081},"    \u003C!--配置数据源-->\n",{"type":17,"tag":329,"props":19083,"children":19084},{"class":331,"line":447},[19085],{"type":17,"tag":329,"props":19086,"children":19087},{},[19088],{"type":23,"value":13262},{"type":17,"tag":329,"props":19090,"children":19091},{"class":331,"line":456},[19092],{"type":17,"tag":329,"props":19093,"children":19094},{},[19095],{"type":23,"value":13270},{"type":17,"tag":329,"props":19097,"children":19098},{"class":331,"line":465},[19099],{"type":17,"tag":329,"props":19100,"children":19101},{},[19102],{"type":23,"value":13278},{"type":17,"tag":329,"props":19104,"children":19105},{"class":331,"line":474},[19106],{"type":17,"tag":329,"props":19107,"children":19108},{},[19109],{"type":23,"value":13286},{"type":17,"tag":329,"props":19111,"children":19112},{"class":331,"line":483},[19113],{"type":17,"tag":329,"props":19114,"children":19115},{},[19116],{"type":23,"value":13294},{"type":17,"tag":329,"props":19118,"children":19119},{"class":331,"line":667},[19120],{"type":17,"tag":329,"props":19121,"children":19122},{},[19123],{"type":23,"value":13302},{"type":17,"tag":329,"props":19125,"children":19126},{"class":331,"line":676},[19127],{"type":17,"tag":329,"props":19128,"children":19129},{"emptyLinePlaceholder":542},[19130],{"type":23,"value":545},{"type":17,"tag":329,"props":19132,"children":19133},{"class":331,"line":685},[19134],{"type":17,"tag":329,"props":19135,"children":19136},{},[19137],{"type":23,"value":19138},"    \u003C!--配置 JDBCTemplate-->\n",{"type":17,"tag":329,"props":19140,"children":19141},{"class":331,"line":694},[19142],{"type":17,"tag":329,"props":19143,"children":19144},{},[19145],{"type":23,"value":18000},{"type":17,"tag":329,"props":19147,"children":19148},{"class":331,"line":1213},[19149],{"type":17,"tag":329,"props":19150,"children":19151},{},[19152],{"type":23,"value":18008},{"type":17,"tag":329,"props":19154,"children":19155},{"class":331,"line":1222},[19156],{"type":17,"tag":329,"props":19157,"children":19158},{},[19159],{"type":23,"value":13302},{"type":17,"tag":329,"props":19161,"children":19162},{"class":331,"line":1231},[19163],{"type":17,"tag":329,"props":19164,"children":19165},{},[19166],{"type":23,"value":10608},{"type":17,"tag":245,"props":19168,"children":19169},{"start":359},[19170],{"type":17,"tag":35,"props":19171,"children":19172},{},[19173],{"type":23,"value":19174},"创建数据库",{"type":17,"tag":319,"props":19176,"children":19180},{"className":19177,"code":19178,"language":19179,"meta":7,"style":7},"language-sql shiki shiki-themes github-dark","CREATE TABLE `t_book` (\n    `book_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',\n    `book_name` varchar(20) DEFAULT NULL COMMENT '图书名称',\n    `price` int(11) DEFAULT NULL COMMENT '价格',\n    `stock` int(10) unsigned DEFAULT NULL COMMENT '库存（无符号）',\n    PRIMARY KEY (`book_id`)\n) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;\ninsert into `t_book`(`book_id`,`book_name`,`price`,`stock`) values (1,'斗破苍穹',80,100),(2,'斗罗大陆',50,100);\nCREATE TABLE `t_user` (\n    `user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',\n    `username` varchar(20) DEFAULT NULL COMMENT '用户名',\n    `balance` int(10) unsigned DEFAULT NULL COMMENT '余额（无符号）',\n    PRIMARY KEY (`user_id`)\n) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;\ninsert into `t_user`(`user_id`,`username`,`balance`) values (1,'admin',50);\n","sql",[19181],{"type":17,"tag":293,"props":19182,"children":19183},{"__ignoreMap":7},[19184,19192,19200,19208,19216,19224,19232,19240,19248,19256,19264,19272,19280,19288,19296],{"type":17,"tag":329,"props":19185,"children":19186},{"class":331,"line":332},[19187],{"type":17,"tag":329,"props":19188,"children":19189},{},[19190],{"type":23,"value":19191},"CREATE TABLE `t_book` (\n",{"type":17,"tag":329,"props":19193,"children":19194},{"class":331,"line":341},[19195],{"type":17,"tag":329,"props":19196,"children":19197},{},[19198],{"type":23,"value":19199},"    `book_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',\n",{"type":17,"tag":329,"props":19201,"children":19202},{"class":331,"line":350},[19203],{"type":17,"tag":329,"props":19204,"children":19205},{},[19206],{"type":23,"value":19207},"    `book_name` varchar(20) DEFAULT NULL COMMENT '图书名称',\n",{"type":17,"tag":329,"props":19209,"children":19210},{"class":331,"line":359},[19211],{"type":17,"tag":329,"props":19212,"children":19213},{},[19214],{"type":23,"value":19215},"    `price` int(11) DEFAULT NULL COMMENT '价格',\n",{"type":17,"tag":329,"props":19217,"children":19218},{"class":331,"line":368},[19219],{"type":17,"tag":329,"props":19220,"children":19221},{},[19222],{"type":23,"value":19223},"    `stock` int(10) unsigned DEFAULT NULL COMMENT '库存（无符号）',\n",{"type":17,"tag":329,"props":19225,"children":19226},{"class":331,"line":377},[19227],{"type":17,"tag":329,"props":19228,"children":19229},{},[19230],{"type":23,"value":19231},"    PRIMARY KEY (`book_id`)\n",{"type":17,"tag":329,"props":19233,"children":19234},{"class":331,"line":386},[19235],{"type":17,"tag":329,"props":19236,"children":19237},{},[19238],{"type":23,"value":19239},") ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;\n",{"type":17,"tag":329,"props":19241,"children":19242},{"class":331,"line":394},[19243],{"type":17,"tag":329,"props":19244,"children":19245},{},[19246],{"type":23,"value":19247},"insert into `t_book`(`book_id`,`book_name`,`price`,`stock`) values (1,'斗破苍穹',80,100),(2,'斗罗大陆',50,100);\n",{"type":17,"tag":329,"props":19249,"children":19250},{"class":331,"line":403},[19251],{"type":17,"tag":329,"props":19252,"children":19253},{},[19254],{"type":23,"value":19255},"CREATE TABLE `t_user` (\n",{"type":17,"tag":329,"props":19257,"children":19258},{"class":331,"line":412},[19259],{"type":17,"tag":329,"props":19260,"children":19261},{},[19262],{"type":23,"value":19263},"    `user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',\n",{"type":17,"tag":329,"props":19265,"children":19266},{"class":331,"line":421},[19267],{"type":17,"tag":329,"props":19268,"children":19269},{},[19270],{"type":23,"value":19271},"    `username` varchar(20) DEFAULT NULL COMMENT '用户名',\n",{"type":17,"tag":329,"props":19273,"children":19274},{"class":331,"line":430},[19275],{"type":17,"tag":329,"props":19276,"children":19277},{},[19278],{"type":23,"value":19279},"    `balance` int(10) unsigned DEFAULT NULL COMMENT '余额（无符号）',\n",{"type":17,"tag":329,"props":19281,"children":19282},{"class":331,"line":439},[19283],{"type":17,"tag":329,"props":19284,"children":19285},{},[19286],{"type":23,"value":19287},"    PRIMARY KEY (`user_id`)\n",{"type":17,"tag":329,"props":19289,"children":19290},{"class":331,"line":447},[19291],{"type":17,"tag":329,"props":19292,"children":19293},{},[19294],{"type":23,"value":19295},") ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;\n",{"type":17,"tag":329,"props":19297,"children":19298},{"class":331,"line":456},[19299],{"type":17,"tag":329,"props":19300,"children":19301},{},[19302],{"type":23,"value":19303},"insert into `t_user`(`user_id`,`username`,`balance`) values (1,'admin',50);\n",{"type":17,"tag":245,"props":19305,"children":19306},{"start":368},[19307,19312],{"type":17,"tag":35,"props":19308,"children":19309},{},[19310],{"type":23,"value":19311},"写Controller、Service、Dao三层结构",{"type":17,"tag":35,"props":19313,"children":19314},{},[19315],{"type":23,"value":19316},"在Spring配置文件中加入配置",{"type":17,"tag":319,"props":19318,"children":19320},{"className":1376,"code":19319,"language":1378,"meta":7,"style":7},"\u003C!--配置 JDBCTemplate-->\n\u003Cbean class=\"org.springframework.jdbc.core.JdbcTemplate\">\n    \u003Cproperty name=\"dataSource\" ref=\"dataSource\"\u002F>\n\u003C\u002Fbean>\n\n\u003C!-- 配置事务管理器 -->\n\u003Cbean id=\"transactionManager\" class=\"org.springframework.jdbc.datasource.DataSourceTransactionManager\">\n    \u003Cproperty name=\"dataSource\" ref=\"dataSource\"\u002F>\n\u003C\u002Fbean>\n\n\u003C!-- 开启事务的注解驱动，将使用@Transactional注解所标识的方法或类中所有的方法使用事务进行管理 -->\n\u003Ctx:annotation-driven transaction-manager=\"transactionManager\"\u002F>\n",[19321],{"type":17,"tag":293,"props":19322,"children":19323},{"__ignoreMap":7},[19324,19332,19340,19348,19355,19362,19370,19378,19385,19392,19399,19407],{"type":17,"tag":329,"props":19325,"children":19326},{"class":331,"line":332},[19327],{"type":17,"tag":329,"props":19328,"children":19329},{},[19330],{"type":23,"value":19331},"\u003C!--配置 JDBCTemplate-->\n",{"type":17,"tag":329,"props":19333,"children":19334},{"class":331,"line":341},[19335],{"type":17,"tag":329,"props":19336,"children":19337},{},[19338],{"type":23,"value":19339},"\u003Cbean class=\"org.springframework.jdbc.core.JdbcTemplate\">\n",{"type":17,"tag":329,"props":19341,"children":19342},{"class":331,"line":350},[19343],{"type":17,"tag":329,"props":19344,"children":19345},{},[19346],{"type":23,"value":19347},"    \u003Cproperty name=\"dataSource\" ref=\"dataSource\"\u002F>\n",{"type":17,"tag":329,"props":19349,"children":19350},{"class":331,"line":359},[19351],{"type":17,"tag":329,"props":19352,"children":19353},{},[19354],{"type":23,"value":11106},{"type":17,"tag":329,"props":19356,"children":19357},{"class":331,"line":368},[19358],{"type":17,"tag":329,"props":19359,"children":19360},{"emptyLinePlaceholder":542},[19361],{"type":23,"value":545},{"type":17,"tag":329,"props":19363,"children":19364},{"class":331,"line":377},[19365],{"type":17,"tag":329,"props":19366,"children":19367},{},[19368],{"type":23,"value":19369},"\u003C!-- 配置事务管理器 -->\n",{"type":17,"tag":329,"props":19371,"children":19372},{"class":331,"line":386},[19373],{"type":17,"tag":329,"props":19374,"children":19375},{},[19376],{"type":23,"value":19377},"\u003Cbean id=\"transactionManager\" class=\"org.springframework.jdbc.datasource.DataSourceTransactionManager\">\n",{"type":17,"tag":329,"props":19379,"children":19380},{"class":331,"line":394},[19381],{"type":17,"tag":329,"props":19382,"children":19383},{},[19384],{"type":23,"value":19347},{"type":17,"tag":329,"props":19386,"children":19387},{"class":331,"line":403},[19388],{"type":17,"tag":329,"props":19389,"children":19390},{},[19391],{"type":23,"value":11106},{"type":17,"tag":329,"props":19393,"children":19394},{"class":331,"line":412},[19395],{"type":17,"tag":329,"props":19396,"children":19397},{"emptyLinePlaceholder":542},[19398],{"type":23,"value":545},{"type":17,"tag":329,"props":19400,"children":19401},{"class":331,"line":421},[19402],{"type":17,"tag":329,"props":19403,"children":19404},{},[19405],{"type":23,"value":19406},"\u003C!-- 开启事务的注解驱动，将使用@Transactional注解所标识的方法或类中所有的方法使用事务进行管理 -->\n",{"type":17,"tag":329,"props":19408,"children":19409},{"class":331,"line":430},[19410],{"type":17,"tag":329,"props":19411,"children":19412},{},[19413],{"type":23,"value":19414},"\u003Ctx:annotation-driven transaction-manager=\"transactionManager\"\u002F>\n",{"type":17,"tag":245,"props":19416,"children":19417},{"start":386},[19418,19439],{"type":17,"tag":35,"props":19419,"children":19420},{},[19421,19423,19426,19428,19434,19437],{"type":23,"value":19422},"添加事务注解",{"type":17,"tag":10032,"props":19424,"children":19425},{},[],{"type":23,"value":19427},"\n因为service层表示业务处理层，一个方法表示一个完成的功能，因此处理事务一般在service层处理在BookServiceImpl的buyBook()添加注解 ",{"type":17,"tag":293,"props":19429,"children":19431},{"className":19430},[],[19432],{"type":23,"value":19433},"@Transactional",{"type":17,"tag":10032,"props":19435,"children":19436},{},[],{"type":23,"value":19438},"\n结果：因为使用了Spring的声明式事务，更新库存和更新余额都没有执行；只有全部成功才会执行",{"type":17,"tag":35,"props":19440,"children":19441},{},[19442,19444],{"type":23,"value":19443},"@Transactional注解标识的位置\n",{"type":17,"tag":31,"props":19445,"children":19446},{},[19447,19452],{"type":17,"tag":35,"props":19448,"children":19449},{},[19450],{"type":23,"value":19451},"标识在方法上，只会影响该方法",{"type":17,"tag":35,"props":19453,"children":19454},{},[19455],{"type":23,"value":19456},"标识在类上，会影响类中所有的方法",{"type":17,"tag":46,"props":19458,"children":19460},{"id":19459},"spring-mvc",[19461],{"type":23,"value":9983},{"type":17,"tag":25,"props":19463,"children":19465},{"id":19464},"_1-springmvc-简介",[19466],{"type":23,"value":19467},"1. SpringMVC 简介",{"type":17,"tag":74,"props":19469,"children":19471},{"id":19470},"_11-什么是mvc",[19472],{"type":23,"value":19473},"1.1 什么是MVC",{"type":17,"tag":53,"props":19475,"children":19476},{},[19477,19482],{"type":17,"tag":57,"props":19478,"children":19479},{},[19480],{"type":23,"value":19481},"MVC是一种软件架构的思想，将软件按照：控制器、模型、视图 来划分",{"type":17,"tag":245,"props":19483,"children":19484},{},[19485,19490,19508],{"type":17,"tag":35,"props":19486,"children":19487},{},[19488],{"type":23,"value":19489},"View：视图层，指前端的页面",{"type":17,"tag":35,"props":19491,"children":19492},{},[19493,19495],{"type":23,"value":19494},"Model：模型层，指工程中的JavaBean，作用是处理数据。包括两类：\n",{"type":17,"tag":31,"props":19496,"children":19497},{},[19498,19503],{"type":17,"tag":35,"props":19499,"children":19500},{},[19501],{"type":23,"value":19502},"实体类Bean：专门存储业务数据，如：User，Student",{"type":17,"tag":35,"props":19504,"children":19505},{},[19506],{"type":23,"value":19507},"业务处理的Bean：指Service，Dao对象，专门处理业务逻辑与数据访问",{"type":17,"tag":35,"props":19509,"children":19510},{},[19511],{"type":23,"value":19512},"Controller：控制层，接收请求与响应请求",{"type":17,"tag":57,"props":19514,"children":19515},{},[19516],{"type":23,"value":19517},"MVC的工作流程：用户通过视图层发送请求到达控制层，服务器进行请求分发，经过模型层（Service > Dao）处理，处理完毕后将结果返回Controller，Controller再根据请求处理的结果找到相应的View视图，渲染数据后最终响应给浏览器",{"type":17,"tag":74,"props":19519,"children":19521},{"id":19520},"_12-什么是springmvc",[19522],{"type":23,"value":19523},"1.2 什么是SpringMVC",{"type":17,"tag":57,"props":19525,"children":19526},{},[19527],{"type":23,"value":19528},"SpringMVC是Spring的一个后续产品，是Spring的一个子项目",{"type":17,"tag":57,"props":19530,"children":19531},{},[19532,19534,19539],{"type":23,"value":19533},"SpringMVC 是 Spring 为表述层开发提供的一整套完备的解决方案。在表述层框架历经 Strust、WebWork、Strust2 等诸多产品的历代更迭之后，目前业界普遍选择了 SpringMVC 作为 Java EE 项目表述层开发的",{"type":17,"tag":86,"props":19535,"children":19536},{},[19537],{"type":23,"value":19538},"首选方案",{"type":23,"value":10098},{"type":17,"tag":53,"props":19541,"children":19542},{},[19543,19548],{"type":17,"tag":57,"props":19544,"children":19545},{},[19546],{"type":23,"value":19547},"**注：**三层架构分为表述层（或表示层）、业务逻辑层、数据访问层",{"type":17,"tag":57,"props":19549,"children":19550},{},[19551,19553,19558,19560],{"type":23,"value":19552},"表述层表示 ",{"type":17,"tag":86,"props":19554,"children":19555},{},[19556],{"type":23,"value":19557},"前台页面",{"type":23,"value":19559}," 和 ",{"type":17,"tag":86,"props":19561,"children":19562},{},[19563],{"type":23,"value":19564},"后台servlet",{"type":17,"tag":74,"props":19566,"children":19568},{"id":19567},"_13-spring-mvc的特点",[19569],{"type":23,"value":19570},"1.3 Spring MVC的特点",{"type":17,"tag":31,"props":19572,"children":19573},{},[19574,19590,19595,19612,19622,19634],{"type":17,"tag":35,"props":19575,"children":19576},{},[19577,19581,19583,19588],{"type":17,"tag":86,"props":19578,"children":19579},{},[19580],{"type":23,"value":9807},{"type":23,"value":19582}," ",{"type":17,"tag":86,"props":19584,"children":19585},{},[19586],{"type":23,"value":19587},"家族原生产品",{"type":23,"value":19589},"，与 IOC 容器等基础设施无缝对接",{"type":17,"tag":35,"props":19591,"children":19592},{},[19593],{"type":23,"value":19594},"基于原生的Servlet，通过了功能强大的前端控制器DispatcherServlet，对请求和响应进行统一处理",{"type":17,"tag":35,"props":19596,"children":19597},{},[19598,19600,19605,19607],{"type":23,"value":19599},"表述层各细分领域需要解决的问题",{"type":17,"tag":86,"props":19601,"children":19602},{},[19603],{"type":23,"value":19604},"全方位覆盖",{"type":23,"value":19606},"，提供",{"type":17,"tag":86,"props":19608,"children":19609},{},[19610],{"type":23,"value":19611},"全面解决方案",{"type":17,"tag":35,"props":19613,"children":19614},{},[19615,19620],{"type":17,"tag":86,"props":19616,"children":19617},{},[19618],{"type":23,"value":19619},"代码清新简洁",{"type":23,"value":19621},"，大幅度提升开发效率",{"type":17,"tag":35,"props":19623,"children":19624},{},[19625,19627,19632],{"type":23,"value":19626},"内部组件化程度高，可插拔式组件",{"type":17,"tag":86,"props":19628,"children":19629},{},[19630],{"type":23,"value":19631},"即插即用",{"type":23,"value":19633},"，想要什么功能配置相应组件即可",{"type":17,"tag":35,"props":19635,"children":19636},{},[19637,19642],{"type":17,"tag":86,"props":19638,"children":19639},{},[19640],{"type":23,"value":19641},"性能卓著",{"type":23,"value":19643},"，尤其适合现代大型、超大型互联网项目要求",{"type":17,"tag":25,"props":19645,"children":19647},{"id":19646},"_2-案例入门",[19648],{"type":23,"value":19649},"2 案例入门",{"type":17,"tag":74,"props":19651,"children":19653},{"id":19652},"_21-创建maven工程",[19654],{"type":23,"value":19655},"2.1 创建Maven工程",{"type":17,"tag":245,"props":19657,"children":19658},{},[19659,19664,19669],{"type":17,"tag":35,"props":19660,"children":19661},{},[19662],{"type":23,"value":19663},"添加web模块",{"type":17,"tag":35,"props":19665,"children":19666},{},[19667],{"type":23,"value":19668},"打包方式war包",{"type":17,"tag":35,"props":19670,"children":19671},{},[19672],{"type":23,"value":317},{"type":17,"tag":319,"props":19674,"children":19676},{"className":1376,"code":19675,"language":1378,"meta":7,"style":7},"\u003Cdependencies>\n    \u003C!-- SpringMVC -->\n    \u003Cdependency>\n        \u003CgroupId>org.springframework\u003C\u002FgroupId>\n        \u003CartifactId>spring-webmvc\u003C\u002FartifactId>\n        \u003Cversion>5.3.1\u003C\u002Fversion>\n    \u003C\u002Fdependency>\n    \u003C!-- 日志 -->\n    \u003Cdependency>\n        \u003CgroupId>ch.qos.logback\u003C\u002FgroupId>\n        \u003CartifactId>logback-classic\u003C\u002FartifactId>\n        \u003Cversion>1.2.3\u003C\u002Fversion>\n    \u003C\u002Fdependency>\n    \u003C!-- ServletAPI -->\n    \u003Cdependency>\n        \u003CgroupId>javax.servlet\u003C\u002FgroupId>\n        \u003CartifactId>javax.servlet-api\u003C\u002FartifactId>\n        \u003Cversion>3.1.0\u003C\u002Fversion>\n        \u003Cscope>provided\u003C\u002Fscope>\n    \u003C\u002Fdependency>\n    \u003C!-- Spring5和Thymeleaf整合包 -->\n    \u003Cdependency>\n        \u003CgroupId>org.thymeleaf\u003C\u002FgroupId>\n        \u003CartifactId>thymeleaf-spring5\u003C\u002FartifactId>\n        \u003Cversion>3.0.12.RELEASE\u003C\u002Fversion>\n    \u003C\u002Fdependency>\n\u003C\u002Fdependencies>\n",[19677],{"type":17,"tag":293,"props":19678,"children":19679},{"__ignoreMap":7},[19680,19687,19695,19702,19709,19717,19724,19731,19739,19746,19754,19762,19770,19777,19785,19792,19800,19808,19816,19824,19831,19839,19846,19854,19862,19870,19877],{"type":17,"tag":329,"props":19681,"children":19682},{"class":331,"line":332},[19683],{"type":17,"tag":329,"props":19684,"children":19685},{},[19686],{"type":23,"value":10282},{"type":17,"tag":329,"props":19688,"children":19689},{"class":331,"line":341},[19690],{"type":17,"tag":329,"props":19691,"children":19692},{},[19693],{"type":23,"value":19694},"    \u003C!-- SpringMVC -->\n",{"type":17,"tag":329,"props":19696,"children":19697},{"class":331,"line":350},[19698],{"type":17,"tag":329,"props":19699,"children":19700},{},[19701],{"type":23,"value":347},{"type":17,"tag":329,"props":19703,"children":19704},{"class":331,"line":359},[19705],{"type":17,"tag":329,"props":19706,"children":19707},{},[19708],{"type":23,"value":10305},{"type":17,"tag":329,"props":19710,"children":19711},{"class":331,"line":368},[19712],{"type":17,"tag":329,"props":19713,"children":19714},{},[19715],{"type":23,"value":19716},"        \u003CartifactId>spring-webmvc\u003C\u002FartifactId>\n",{"type":17,"tag":329,"props":19718,"children":19719},{"class":331,"line":377},[19720],{"type":17,"tag":329,"props":19721,"children":19722},{},[19723],{"type":23,"value":10321},{"type":17,"tag":329,"props":19725,"children":19726},{"class":331,"line":386},[19727],{"type":17,"tag":329,"props":19728,"children":19729},{},[19730],{"type":23,"value":480},{"type":17,"tag":329,"props":19732,"children":19733},{"class":331,"line":394},[19734],{"type":17,"tag":329,"props":19735,"children":19736},{},[19737],{"type":23,"value":19738},"    \u003C!-- 日志 -->\n",{"type":17,"tag":329,"props":19740,"children":19741},{"class":331,"line":403},[19742],{"type":17,"tag":329,"props":19743,"children":19744},{},[19745],{"type":23,"value":347},{"type":17,"tag":329,"props":19747,"children":19748},{"class":331,"line":412},[19749],{"type":17,"tag":329,"props":19750,"children":19751},{},[19752],{"type":23,"value":19753},"        \u003CgroupId>ch.qos.logback\u003C\u002FgroupId>\n",{"type":17,"tag":329,"props":19755,"children":19756},{"class":331,"line":421},[19757],{"type":17,"tag":329,"props":19758,"children":19759},{},[19760],{"type":23,"value":19761},"        \u003CartifactId>logback-classic\u003C\u002FartifactId>\n",{"type":17,"tag":329,"props":19763,"children":19764},{"class":331,"line":430},[19765],{"type":17,"tag":329,"props":19766,"children":19767},{},[19768],{"type":23,"value":19769},"        \u003Cversion>1.2.3\u003C\u002Fversion>\n",{"type":17,"tag":329,"props":19771,"children":19772},{"class":331,"line":439},[19773],{"type":17,"tag":329,"props":19774,"children":19775},{},[19776],{"type":23,"value":480},{"type":17,"tag":329,"props":19778,"children":19779},{"class":331,"line":447},[19780],{"type":17,"tag":329,"props":19781,"children":19782},{},[19783],{"type":23,"value":19784},"    \u003C!-- ServletAPI -->\n",{"type":17,"tag":329,"props":19786,"children":19787},{"class":331,"line":456},[19788],{"type":17,"tag":329,"props":19789,"children":19790},{},[19791],{"type":23,"value":347},{"type":17,"tag":329,"props":19793,"children":19794},{"class":331,"line":465},[19795],{"type":17,"tag":329,"props":19796,"children":19797},{},[19798],{"type":23,"value":19799},"        \u003CgroupId>javax.servlet\u003C\u002FgroupId>\n",{"type":17,"tag":329,"props":19801,"children":19802},{"class":331,"line":474},[19803],{"type":17,"tag":329,"props":19804,"children":19805},{},[19806],{"type":23,"value":19807},"        \u003CartifactId>javax.servlet-api\u003C\u002FartifactId>\n",{"type":17,"tag":329,"props":19809,"children":19810},{"class":331,"line":483},[19811],{"type":17,"tag":329,"props":19812,"children":19813},{},[19814],{"type":23,"value":19815},"        \u003Cversion>3.1.0\u003C\u002Fversion>\n",{"type":17,"tag":329,"props":19817,"children":19818},{"class":331,"line":667},[19819],{"type":17,"tag":329,"props":19820,"children":19821},{},[19822],{"type":23,"value":19823},"        \u003Cscope>provided\u003C\u002Fscope>\n",{"type":17,"tag":329,"props":19825,"children":19826},{"class":331,"line":676},[19827],{"type":17,"tag":329,"props":19828,"children":19829},{},[19830],{"type":23,"value":480},{"type":17,"tag":329,"props":19832,"children":19833},{"class":331,"line":685},[19834],{"type":17,"tag":329,"props":19835,"children":19836},{},[19837],{"type":23,"value":19838},"    \u003C!-- Spring5和Thymeleaf整合包 -->\n",{"type":17,"tag":329,"props":19840,"children":19841},{"class":331,"line":694},[19842],{"type":17,"tag":329,"props":19843,"children":19844},{},[19845],{"type":23,"value":347},{"type":17,"tag":329,"props":19847,"children":19848},{"class":331,"line":1213},[19849],{"type":17,"tag":329,"props":19850,"children":19851},{},[19852],{"type":23,"value":19853},"        \u003CgroupId>org.thymeleaf\u003C\u002FgroupId>\n",{"type":17,"tag":329,"props":19855,"children":19856},{"class":331,"line":1222},[19857],{"type":17,"tag":329,"props":19858,"children":19859},{},[19860],{"type":23,"value":19861},"        \u003CartifactId>thymeleaf-spring5\u003C\u002FartifactId>\n",{"type":17,"tag":329,"props":19863,"children":19864},{"class":331,"line":1231},[19865],{"type":17,"tag":329,"props":19866,"children":19867},{},[19868],{"type":23,"value":19869},"        \u003Cversion>3.0.12.RELEASE\u003C\u002Fversion>\n",{"type":17,"tag":329,"props":19871,"children":19872},{"class":331,"line":1240},[19873],{"type":17,"tag":329,"props":19874,"children":19875},{},[19876],{"type":23,"value":480},{"type":17,"tag":329,"props":19878,"children":19879},{"class":331,"line":1248},[19880],{"type":17,"tag":329,"props":19881,"children":19882},{},[19883],{"type":23,"value":489},{"type":17,"tag":74,"props":19885,"children":19887},{"id":19886},"_22-配置webxml",[19888],{"type":23,"value":19889},"2.2 配置web.xml",{"type":17,"tag":53,"props":19891,"children":19892},{},[19893,19898,19903],{"type":17,"tag":57,"props":19894,"children":19895},{},[19896],{"type":23,"value":19897},"注册SpringMVC的前端控制器DispatcherServlet",{"type":17,"tag":57,"props":19899,"children":19900},{},[19901],{"type":23,"value":19902},"url-pattern中\u002F和\u002F*的区别",{"type":17,"tag":31,"props":19904,"children":19905},{},[19906,19911],{"type":17,"tag":35,"props":19907,"children":19908},{},[19909],{"type":23,"value":19910},"\u002F : 匹配浏览器想服务器发送所有请求（不包括.jsp）",{"type":17,"tag":35,"props":19912,"children":19913},{},[19914],{"type":23,"value":19915},"\u002F*：匹配浏览器想服务器发送所有请求（包括.jsp）",{"type":17,"tag":319,"props":19917,"children":19919},{"className":1376,"code":19918,"language":1378,"meta":7,"style":7},"\u003C!DOCTYPE web-app PUBLIC\n        \"-\u002F\u002FSun Microsystems, Inc.\u002F\u002FDTD Web Application 2.3\u002F\u002FEN\"\n        \"http:\u002F\u002Fjava.sun.com\u002Fdtd\u002Fweb-app_2_3.dtd\" >\n\n\u003Cweb-app>\n    \u003Cdisplay-name>Archetype Created Web Application\u003C\u002Fdisplay-name>\n\n    \u003Cservlet>\n        \u003Cservlet-name>SpringMVC\u003C\u002Fservlet-name>\n        \u003Cservlet-class>org.springframework.web.servlet.DispatcherServlet\u003C\u002Fservlet-class>\n\n        \u003C!-- 设置SpringMVC配置文件的位置 -->\n        \u003Cinit-param>\n            \u003Cparam-name>contextConfigLocation\u003C\u002Fparam-name>\n            \u003Cparam-value>classpath:springmvc.xml\u003C\u002Fparam-value>\n        \u003C\u002Finit-param>\n      \n        \u003C!-- 将servlet初始化时间提前到服务器启动时 -->\n        \u003Cload-on-startup>1\u003C\u002Fload-on-startup>\n    \u003C\u002Fservlet>\n\n    \u003Cservlet-mapping>\n        \u003Cservlet-name>SpringMVC\u003C\u002Fservlet-name>\n        \u003Curl-pattern>\u002F\u003C\u002Furl-pattern>\n    \u003C\u002Fservlet-mapping>\n\u003C\u002Fweb-app>\n",[19920],{"type":17,"tag":293,"props":19921,"children":19922},{"__ignoreMap":7},[19923,19931,19939,19947,19954,19962,19970,19977,19985,19993,20001,20008,20016,20024,20032,20040,20048,20055,20063,20071,20079,20086,20094,20101,20109,20117],{"type":17,"tag":329,"props":19924,"children":19925},{"class":331,"line":332},[19926],{"type":17,"tag":329,"props":19927,"children":19928},{},[19929],{"type":23,"value":19930},"\u003C!DOCTYPE web-app PUBLIC\n",{"type":17,"tag":329,"props":19932,"children":19933},{"class":331,"line":341},[19934],{"type":17,"tag":329,"props":19935,"children":19936},{},[19937],{"type":23,"value":19938},"        \"-\u002F\u002FSun Microsystems, Inc.\u002F\u002FDTD Web Application 2.3\u002F\u002FEN\"\n",{"type":17,"tag":329,"props":19940,"children":19941},{"class":331,"line":350},[19942],{"type":17,"tag":329,"props":19943,"children":19944},{},[19945],{"type":23,"value":19946},"        \"http:\u002F\u002Fjava.sun.com\u002Fdtd\u002Fweb-app_2_3.dtd\" >\n",{"type":17,"tag":329,"props":19948,"children":19949},{"class":331,"line":359},[19950],{"type":17,"tag":329,"props":19951,"children":19952},{"emptyLinePlaceholder":542},[19953],{"type":23,"value":545},{"type":17,"tag":329,"props":19955,"children":19956},{"class":331,"line":368},[19957],{"type":17,"tag":329,"props":19958,"children":19959},{},[19960],{"type":23,"value":19961},"\u003Cweb-app>\n",{"type":17,"tag":329,"props":19963,"children":19964},{"class":331,"line":377},[19965],{"type":17,"tag":329,"props":19966,"children":19967},{},[19968],{"type":23,"value":19969},"    \u003Cdisplay-name>Archetype Created Web Application\u003C\u002Fdisplay-name>\n",{"type":17,"tag":329,"props":19971,"children":19972},{"class":331,"line":386},[19973],{"type":17,"tag":329,"props":19974,"children":19975},{"emptyLinePlaceholder":542},[19976],{"type":23,"value":545},{"type":17,"tag":329,"props":19978,"children":19979},{"class":331,"line":394},[19980],{"type":17,"tag":329,"props":19981,"children":19982},{},[19983],{"type":23,"value":19984},"    \u003Cservlet>\n",{"type":17,"tag":329,"props":19986,"children":19987},{"class":331,"line":403},[19988],{"type":17,"tag":329,"props":19989,"children":19990},{},[19991],{"type":23,"value":19992},"        \u003Cservlet-name>SpringMVC\u003C\u002Fservlet-name>\n",{"type":17,"tag":329,"props":19994,"children":19995},{"class":331,"line":412},[19996],{"type":17,"tag":329,"props":19997,"children":19998},{},[19999],{"type":23,"value":20000},"        \u003Cservlet-class>org.springframework.web.servlet.DispatcherServlet\u003C\u002Fservlet-class>\n",{"type":17,"tag":329,"props":20002,"children":20003},{"class":331,"line":421},[20004],{"type":17,"tag":329,"props":20005,"children":20006},{"emptyLinePlaceholder":542},[20007],{"type":23,"value":545},{"type":17,"tag":329,"props":20009,"children":20010},{"class":331,"line":430},[20011],{"type":17,"tag":329,"props":20012,"children":20013},{},[20014],{"type":23,"value":20015},"        \u003C!-- 设置SpringMVC配置文件的位置 -->\n",{"type":17,"tag":329,"props":20017,"children":20018},{"class":331,"line":439},[20019],{"type":17,"tag":329,"props":20020,"children":20021},{},[20022],{"type":23,"value":20023},"        \u003Cinit-param>\n",{"type":17,"tag":329,"props":20025,"children":20026},{"class":331,"line":447},[20027],{"type":17,"tag":329,"props":20028,"children":20029},{},[20030],{"type":23,"value":20031},"            \u003Cparam-name>contextConfigLocation\u003C\u002Fparam-name>\n",{"type":17,"tag":329,"props":20033,"children":20034},{"class":331,"line":456},[20035],{"type":17,"tag":329,"props":20036,"children":20037},{},[20038],{"type":23,"value":20039},"            \u003Cparam-value>classpath:springmvc.xml\u003C\u002Fparam-value>\n",{"type":17,"tag":329,"props":20041,"children":20042},{"class":331,"line":465},[20043],{"type":17,"tag":329,"props":20044,"children":20045},{},[20046],{"type":23,"value":20047},"        \u003C\u002Finit-param>\n",{"type":17,"tag":329,"props":20049,"children":20050},{"class":331,"line":474},[20051],{"type":17,"tag":329,"props":20052,"children":20053},{},[20054],{"type":23,"value":15389},{"type":17,"tag":329,"props":20056,"children":20057},{"class":331,"line":483},[20058],{"type":17,"tag":329,"props":20059,"children":20060},{},[20061],{"type":23,"value":20062},"        \u003C!-- 将servlet初始化时间提前到服务器启动时 -->\n",{"type":17,"tag":329,"props":20064,"children":20065},{"class":331,"line":667},[20066],{"type":17,"tag":329,"props":20067,"children":20068},{},[20069],{"type":23,"value":20070},"        \u003Cload-on-startup>1\u003C\u002Fload-on-startup>\n",{"type":17,"tag":329,"props":20072,"children":20073},{"class":331,"line":676},[20074],{"type":17,"tag":329,"props":20075,"children":20076},{},[20077],{"type":23,"value":20078},"    \u003C\u002Fservlet>\n",{"type":17,"tag":329,"props":20080,"children":20081},{"class":331,"line":685},[20082],{"type":17,"tag":329,"props":20083,"children":20084},{"emptyLinePlaceholder":542},[20085],{"type":23,"value":545},{"type":17,"tag":329,"props":20087,"children":20088},{"class":331,"line":694},[20089],{"type":17,"tag":329,"props":20090,"children":20091},{},[20092],{"type":23,"value":20093},"    \u003Cservlet-mapping>\n",{"type":17,"tag":329,"props":20095,"children":20096},{"class":331,"line":1213},[20097],{"type":17,"tag":329,"props":20098,"children":20099},{},[20100],{"type":23,"value":19992},{"type":17,"tag":329,"props":20102,"children":20103},{"class":331,"line":1222},[20104],{"type":17,"tag":329,"props":20105,"children":20106},{},[20107],{"type":23,"value":20108},"        \u003Curl-pattern>\u002F\u003C\u002Furl-pattern>\n",{"type":17,"tag":329,"props":20110,"children":20111},{"class":331,"line":1231},[20112],{"type":17,"tag":329,"props":20113,"children":20114},{},[20115],{"type":23,"value":20116},"    \u003C\u002Fservlet-mapping>\n",{"type":17,"tag":329,"props":20118,"children":20119},{"class":331,"line":1240},[20120],{"type":17,"tag":329,"props":20121,"children":20122},{},[20123],{"type":23,"value":20124},"\u003C\u002Fweb-app>\n",{"type":17,"tag":57,"props":20126,"children":20127},{},[20128],{"type":17,"tag":86,"props":20129,"children":20130},{},[20131],{"type":23,"value":20132},"拓展配置：",{"type":17,"tag":31,"props":20134,"children":20135},{},[20136,20141],{"type":17,"tag":35,"props":20137,"children":20138},{},[20139],{"type":23,"value":20140},"可通过init-param标签设置SpringMVC配置文件的位置和名称",{"type":17,"tag":35,"props":20142,"children":20143},{},[20144],{"type":23,"value":20145},"通过load-on-startup标签设置SpringMVC前端控制器DispatcherServlet的初始化时间",{"type":17,"tag":74,"props":20147,"children":20149},{"id":20148},"_23-创建请求控制器",[20150],{"type":23,"value":20151},"2.3 创建请求控制器",{"type":17,"tag":57,"props":20153,"children":20154},{},[20155],{"type":23,"value":20156},"由于前端控制器对浏览器发送的请求进行了统一的处理，但是具体的请求有不同的处理过程，因此需要创建处理具体请求的类，即请求控制器",{"type":17,"tag":57,"props":20158,"children":20159},{},[20160],{"type":23,"value":20161},"请求控制器中每一个处理请求的方法成为控制器方法",{"type":17,"tag":57,"props":20163,"children":20164},{},[20165],{"type":23,"value":20166},"因为SpringMVC的控制器由一个POJO（普通的Java类）担任，因此需要通过@Controller注解将其标识为一个控制层组件，交给Spring的IOC容器管理，此时SpringMVC才能够识别控制器的存在",{"type":17,"tag":319,"props":20168,"children":20170},{"className":321,"code":20169,"language":323,"meta":7,"style":7},"@Controller\npublic class HelloController {\n\n    @RequestMapping(\"\u002F\")\n    public String protal() {\n        return \"index\";\n    }\n\n    @RequestMapping(\"\u002Fabout\")\n    public String about() {\n        return \"about\";\n    }\n}\n",[20171],{"type":17,"tag":293,"props":20172,"children":20173},{"__ignoreMap":7},[20174,20181,20189,20196,20204,20212,20220,20227,20234,20242,20250,20258,20265],{"type":17,"tag":329,"props":20175,"children":20176},{"class":331,"line":332},[20177],{"type":17,"tag":329,"props":20178,"children":20179},{},[20180],{"type":23,"value":15336},{"type":17,"tag":329,"props":20182,"children":20183},{"class":331,"line":341},[20184],{"type":17,"tag":329,"props":20185,"children":20186},{},[20187],{"type":23,"value":20188},"public class HelloController {\n",{"type":17,"tag":329,"props":20190,"children":20191},{"class":331,"line":350},[20192],{"type":17,"tag":329,"props":20193,"children":20194},{"emptyLinePlaceholder":542},[20195],{"type":23,"value":545},{"type":17,"tag":329,"props":20197,"children":20198},{"class":331,"line":359},[20199],{"type":17,"tag":329,"props":20200,"children":20201},{},[20202],{"type":23,"value":20203},"    @RequestMapping(\"\u002F\")\n",{"type":17,"tag":329,"props":20205,"children":20206},{"class":331,"line":368},[20207],{"type":17,"tag":329,"props":20208,"children":20209},{},[20210],{"type":23,"value":20211},"    public String protal() {\n",{"type":17,"tag":329,"props":20213,"children":20214},{"class":331,"line":377},[20215],{"type":17,"tag":329,"props":20216,"children":20217},{},[20218],{"type":23,"value":20219},"        return \"index\";\n",{"type":17,"tag":329,"props":20221,"children":20222},{"class":331,"line":386},[20223],{"type":17,"tag":329,"props":20224,"children":20225},{},[20226],{"type":23,"value":1351},{"type":17,"tag":329,"props":20228,"children":20229},{"class":331,"line":394},[20230],{"type":17,"tag":329,"props":20231,"children":20232},{"emptyLinePlaceholder":542},[20233],{"type":23,"value":545},{"type":17,"tag":329,"props":20235,"children":20236},{"class":331,"line":403},[20237],{"type":17,"tag":329,"props":20238,"children":20239},{},[20240],{"type":23,"value":20241},"    @RequestMapping(\"\u002Fabout\")\n",{"type":17,"tag":329,"props":20243,"children":20244},{"class":331,"line":412},[20245],{"type":17,"tag":329,"props":20246,"children":20247},{},[20248],{"type":23,"value":20249},"    public String about() {\n",{"type":17,"tag":329,"props":20251,"children":20252},{"class":331,"line":421},[20253],{"type":17,"tag":329,"props":20254,"children":20255},{},[20256],{"type":23,"value":20257},"        return \"about\";\n",{"type":17,"tag":329,"props":20259,"children":20260},{"class":331,"line":430},[20261],{"type":17,"tag":329,"props":20262,"children":20263},{},[20264],{"type":23,"value":1351},{"type":17,"tag":329,"props":20266,"children":20267},{"class":331,"line":439},[20268],{"type":17,"tag":329,"props":20269,"children":20270},{},[20271],{"type":23,"value":753},{"type":17,"tag":74,"props":20273,"children":20275},{"id":20274},"_24-创建springmvc配置文件",[20276],{"type":23,"value":20277},"2.4 创建SpringMVC配置文件",{"type":17,"tag":319,"props":20279,"children":20281},{"className":1376,"code":20280,"language":1378,"meta":7,"style":7},"\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\u003Cbeans xmlns=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\"\n       xmlns:xsi=\"http:\u002F\u002Fwww.w3.org\u002F2001\u002FXMLSchema-instance\"\n       xmlns:context=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fcontext\"\n       xsi:schemaLocation=\"http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fbeans\u002Fspring-beans.xsd http:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fcontext https:\u002F\u002Fwww.springframework.org\u002Fschema\u002Fcontext\u002Fspring-context.xsd\">\n\n\n    \u003C!-- 自动扫描包 -->\n    \u003Ccontext:component-scan base-package=\"com.wangkun.controller\"\u002F>\n\n    \u003C!-- 配置Thymeleaf视图解析器 -->\n    \u003Cbean id=\"viewResolver\" class=\"org.thymeleaf.spring5.view.ThymeleafViewResolver\">\n        \u003Cproperty name=\"order\" value=\"1\"\u002F>\n        \u003Cproperty name=\"characterEncoding\" value=\"UTF-8\"\u002F>\n        \u003Cproperty name=\"templateEngine\">\n            \u003Cbean class=\"org.thymeleaf.spring5.SpringTemplateEngine\">\n                \u003Cproperty name=\"templateResolver\">\n                    \u003Cbean class=\"org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver\">\n                        \u003C!-- 视图前缀 -->\n                        \u003Cproperty name=\"prefix\" value=\"\u002FWEB-INF\u002Ftemplates\u002F\"\u002F>\n                        \u003C!-- 视图后缀 -->\n                        \u003Cproperty name=\"suffix\" value=\".html\"\u002F>\n                        \u003Cproperty name=\"templateMode\" value=\"HTML5\"\u002F>\n                        \u003Cproperty name=\"characterEncoding\" value=\"UTF-8\"\u002F>\n                    \u003C\u002Fbean>\n                \u003C\u002Fproperty>\n            \u003C\u002Fbean>\n        \u003C\u002Fproperty>\n    \u003C\u002Fbean>\n\n\u003C\u002Fbeans>\n",[20282],{"type":17,"tag":293,"props":20283,"children":20284},{"__ignoreMap":7},[20285,20292,20299,20306,20313,20320,20327,20334,20342,20350,20357,20365,20373,20381,20389,20397,20405,20413,20421,20429,20437,20445,20453,20461,20469,20477,20485,20493,20501,20508,20515],{"type":17,"tag":329,"props":20286,"children":20287},{"class":331,"line":332},[20288],{"type":17,"tag":329,"props":20289,"children":20290},{},[20291],{"type":23,"value":7968},{"type":17,"tag":329,"props":20293,"children":20294},{"class":331,"line":341},[20295],{"type":17,"tag":329,"props":20296,"children":20297},{},[20298],{"type":23,"value":10514},{"type":17,"tag":329,"props":20300,"children":20301},{"class":331,"line":350},[20302],{"type":17,"tag":329,"props":20303,"children":20304},{},[20305],{"type":23,"value":10522},{"type":17,"tag":329,"props":20307,"children":20308},{"class":331,"line":359},[20309],{"type":17,"tag":329,"props":20310,"children":20311},{},[20312],{"type":23,"value":13184},{"type":17,"tag":329,"props":20314,"children":20315},{"class":331,"line":368},[20316],{"type":17,"tag":329,"props":20317,"children":20318},{},[20319],{"type":23,"value":17922},{"type":17,"tag":329,"props":20321,"children":20322},{"class":331,"line":377},[20323],{"type":17,"tag":329,"props":20324,"children":20325},{"emptyLinePlaceholder":542},[20326],{"type":23,"value":545},{"type":17,"tag":329,"props":20328,"children":20329},{"class":331,"line":386},[20330],{"type":17,"tag":329,"props":20331,"children":20332},{"emptyLinePlaceholder":542},[20333],{"type":23,"value":545},{"type":17,"tag":329,"props":20335,"children":20336},{"class":331,"line":394},[20337],{"type":17,"tag":329,"props":20338,"children":20339},{},[20340],{"type":23,"value":20341},"    \u003C!-- 自动扫描包 -->\n",{"type":17,"tag":329,"props":20343,"children":20344},{"class":331,"line":403},[20345],{"type":17,"tag":329,"props":20346,"children":20347},{},[20348],{"type":23,"value":20349},"    \u003Ccontext:component-scan base-package=\"com.wangkun.controller\"\u002F>\n",{"type":17,"tag":329,"props":20351,"children":20352},{"class":331,"line":412},[20353],{"type":17,"tag":329,"props":20354,"children":20355},{"emptyLinePlaceholder":542},[20356],{"type":23,"value":545},{"type":17,"tag":329,"props":20358,"children":20359},{"class":331,"line":421},[20360],{"type":17,"tag":329,"props":20361,"children":20362},{},[20363],{"type":23,"value":20364},"    \u003C!-- 配置Thymeleaf视图解析器 -->\n",{"type":17,"tag":329,"props":20366,"children":20367},{"class":331,"line":430},[20368],{"type":17,"tag":329,"props":20369,"children":20370},{},[20371],{"type":23,"value":20372},"    \u003Cbean id=\"viewResolver\" class=\"org.thymeleaf.spring5.view.ThymeleafViewResolver\">\n",{"type":17,"tag":329,"props":20374,"children":20375},{"class":331,"line":439},[20376],{"type":17,"tag":329,"props":20377,"children":20378},{},[20379],{"type":23,"value":20380},"        \u003Cproperty name=\"order\" value=\"1\"\u002F>\n",{"type":17,"tag":329,"props":20382,"children":20383},{"class":331,"line":447},[20384],{"type":17,"tag":329,"props":20385,"children":20386},{},[20387],{"type":23,"value":20388},"        \u003Cproperty name=\"characterEncoding\" value=\"UTF-8\"\u002F>\n",{"type":17,"tag":329,"props":20390,"children":20391},{"class":331,"line":456},[20392],{"type":17,"tag":329,"props":20393,"children":20394},{},[20395],{"type":23,"value":20396},"        \u003Cproperty name=\"templateEngine\">\n",{"type":17,"tag":329,"props":20398,"children":20399},{"class":331,"line":465},[20400],{"type":17,"tag":329,"props":20401,"children":20402},{},[20403],{"type":23,"value":20404},"            \u003Cbean class=\"org.thymeleaf.spring5.SpringTemplateEngine\">\n",{"type":17,"tag":329,"props":20406,"children":20407},{"class":331,"line":474},[20408],{"type":17,"tag":329,"props":20409,"children":20410},{},[20411],{"type":23,"value":20412},"                \u003Cproperty name=\"templateResolver\">\n",{"type":17,"tag":329,"props":20414,"children":20415},{"class":331,"line":483},[20416],{"type":17,"tag":329,"props":20417,"children":20418},{},[20419],{"type":23,"value":20420},"                    \u003Cbean class=\"org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver\">\n",{"type":17,"tag":329,"props":20422,"children":20423},{"class":331,"line":667},[20424],{"type":17,"tag":329,"props":20425,"children":20426},{},[20427],{"type":23,"value":20428},"                        \u003C!-- 视图前缀 -->\n",{"type":17,"tag":329,"props":20430,"children":20431},{"class":331,"line":676},[20432],{"type":17,"tag":329,"props":20433,"children":20434},{},[20435],{"type":23,"value":20436},"                        \u003Cproperty name=\"prefix\" value=\"\u002FWEB-INF\u002Ftemplates\u002F\"\u002F>\n",{"type":17,"tag":329,"props":20438,"children":20439},{"class":331,"line":685},[20440],{"type":17,"tag":329,"props":20441,"children":20442},{},[20443],{"type":23,"value":20444},"                        \u003C!-- 视图后缀 -->\n",{"type":17,"tag":329,"props":20446,"children":20447},{"class":331,"line":694},[20448],{"type":17,"tag":329,"props":20449,"children":20450},{},[20451],{"type":23,"value":20452},"                        \u003Cproperty name=\"suffix\" value=\".html\"\u002F>\n",{"type":17,"tag":329,"props":20454,"children":20455},{"class":331,"line":1213},[20456],{"type":17,"tag":329,"props":20457,"children":20458},{},[20459],{"type":23,"value":20460},"                        \u003Cproperty name=\"templateMode\" value=\"HTML5\"\u002F>\n",{"type":17,"tag":329,"props":20462,"children":20463},{"class":331,"line":1222},[20464],{"type":17,"tag":329,"props":20465,"children":20466},{},[20467],{"type":23,"value":20468},"                        \u003Cproperty name=\"characterEncoding\" value=\"UTF-8\"\u002F>\n",{"type":17,"tag":329,"props":20470,"children":20471},{"class":331,"line":1231},[20472],{"type":17,"tag":329,"props":20473,"children":20474},{},[20475],{"type":23,"value":20476},"                    \u003C\u002Fbean>\n",{"type":17,"tag":329,"props":20478,"children":20479},{"class":331,"line":1240},[20480],{"type":17,"tag":329,"props":20481,"children":20482},{},[20483],{"type":23,"value":20484},"                \u003C\u002Fproperty>\n",{"type":17,"tag":329,"props":20486,"children":20487},{"class":331,"line":1248},[20488],{"type":17,"tag":329,"props":20489,"children":20490},{},[20491],{"type":23,"value":20492},"            \u003C\u002Fbean>\n",{"type":17,"tag":329,"props":20494,"children":20495},{"class":331,"line":1257},[20496],{"type":17,"tag":329,"props":20497,"children":20498},{},[20499],{"type":23,"value":20500},"        \u003C\u002Fproperty>\n",{"type":17,"tag":329,"props":20502,"children":20503},{"class":331,"line":1266},[20504],{"type":17,"tag":329,"props":20505,"children":20506},{},[20507],{"type":23,"value":13302},{"type":17,"tag":329,"props":20509,"children":20510},{"class":331,"line":1275},[20511],{"type":17,"tag":329,"props":20512,"children":20513},{"emptyLinePlaceholder":542},[20514],{"type":23,"value":545},{"type":17,"tag":329,"props":20516,"children":20517},{"class":331,"line":1284},[20518],{"type":17,"tag":329,"props":20519,"children":20520},{},[20521],{"type":23,"value":10608},{"type":17,"tag":74,"props":20523,"children":20525},{"id":20524},"_25-总结",[20526],{"type":23,"value":20527},"2.5 总结",{"type":17,"tag":57,"props":20529,"children":20530},{},[20531],{"type":23,"value":20532},"**自己理解：**用户请求服务器，如果路径符合前端控制器的url-pattern，就会被DispatchServlet所控制，然后读取SpringMVC配置文件，根据所匹配到的方法的返回值，去寻找资源",{"type":17,"tag":57,"props":20534,"children":20535},{},[20536],{"type":23,"value":20537},"**较准确的解释：**浏览器发送请求，若请求地址符合前端控制器的url-pattern，该请求就会被前端控制器DispatcherServlet处理。前端控制器会读取SpringMVC的核心配置文件，通过扫描组件找到控制器，将请求地址和控制器中@RequestMapping注解的value属性值进行匹配，若匹配成功，该注解所标识的控制器方法就是处理请求的方法。处理请求的方法需要返回一个字符串类型的视图名称，该视图名称会被视图解析器解析，加上前缀和后缀组成视图的路径通过Thymeleaf对视图进行渲染，最终转发到视图所对应页面",{"type":17,"tag":25,"props":20539,"children":20541},{"id":20540},"_3-requestmappering注解",[20542],{"type":23,"value":20543},"3. @RequestMappering注解",{"type":17,"tag":74,"props":20545,"children":20547},{"id":20546},"_31-requestmappering注解的功能",[20548],{"type":23,"value":20549},"3.1 @RequestMappering注解的功能",{"type":17,"tag":57,"props":20551,"children":20552},{},[20553],{"type":23,"value":20554},"从注解名称上我们可以看到，@RequestMapping注解的作用就是将请求和处理请求的控制器方法关联起来，建立映射关系。",{"type":17,"tag":57,"props":20556,"children":20557},{},[20558],{"type":23,"value":20559},"SpringMVC 接收到指定的请求，就会来找到在映射关系中对应的控制器方法来处理这个请求。",{"type":17,"tag":74,"props":20561,"children":20563},{"id":20562},"_32-requestmappering注解的位置",[20564],{"type":23,"value":20565},"3.2 @RequestMappering注解的位置",{"type":17,"tag":31,"props":20567,"children":20568},{},[20569,20574],{"type":17,"tag":35,"props":20570,"children":20571},{},[20572],{"type":23,"value":20573},"@RequestMapping标识一个类：设置映射请求的请求路径的初始信息",{"type":17,"tag":35,"props":20575,"children":20576},{},[20577],{"type":23,"value":20578},"@RequestMapping标识一个方法：设置映射请求请求路径的具体信息",{"type":17,"tag":319,"props":20580,"children":20582},{"className":321,"code":20581,"language":323,"meta":7,"style":7},"package com.wangkun.controller;\n\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\n@Controller\n@RequestMapping(\"\u002Ftest\")\npublic class TestRequestMappingController {\n\n    @RequestMapping(\"\u002F\")\n    public String home() {\n        return \"index\";\n    }\n\n    @RequestMapping(\"\u002Fabout\")\n    public String about() {\n        return \"about\";\n    }\n  \n}\n",[20583],{"type":17,"tag":293,"props":20584,"children":20585},{"__ignoreMap":7},[20586,20594,20601,20609,20617,20624,20631,20639,20647,20654,20661,20669,20676,20683,20690,20697,20704,20711,20718,20725],{"type":17,"tag":329,"props":20587,"children":20588},{"class":331,"line":332},[20589],{"type":17,"tag":329,"props":20590,"children":20591},{},[20592],{"type":23,"value":20593},"package com.wangkun.controller;\n",{"type":17,"tag":329,"props":20595,"children":20596},{"class":331,"line":341},[20597],{"type":17,"tag":329,"props":20598,"children":20599},{"emptyLinePlaceholder":542},[20600],{"type":23,"value":545},{"type":17,"tag":329,"props":20602,"children":20603},{"class":331,"line":350},[20604],{"type":17,"tag":329,"props":20605,"children":20606},{},[20607],{"type":23,"value":20608},"import org.springframework.stereotype.Controller;\n",{"type":17,"tag":329,"props":20610,"children":20611},{"class":331,"line":359},[20612],{"type":17,"tag":329,"props":20613,"children":20614},{},[20615],{"type":23,"value":20616},"import org.springframework.web.bind.annotation.RequestMapping;\n",{"type":17,"tag":329,"props":20618,"children":20619},{"class":331,"line":368},[20620],{"type":17,"tag":329,"props":20621,"children":20622},{"emptyLinePlaceholder":542},[20623],{"type":23,"value":545},{"type":17,"tag":329,"props":20625,"children":20626},{"class":331,"line":377},[20627],{"type":17,"tag":329,"props":20628,"children":20629},{},[20630],{"type":23,"value":15336},{"type":17,"tag":329,"props":20632,"children":20633},{"class":331,"line":386},[20634],{"type":17,"tag":329,"props":20635,"children":20636},{},[20637],{"type":23,"value":20638},"@RequestMapping(\"\u002Ftest\")\n",{"type":17,"tag":329,"props":20640,"children":20641},{"class":331,"line":394},[20642],{"type":17,"tag":329,"props":20643,"children":20644},{},[20645],{"type":23,"value":20646},"public class TestRequestMappingController {\n",{"type":17,"tag":329,"props":20648,"children":20649},{"class":331,"line":403},[20650],{"type":17,"tag":329,"props":20651,"children":20652},{"emptyLinePlaceholder":542},[20653],{"type":23,"value":545},{"type":17,"tag":329,"props":20655,"children":20656},{"class":331,"line":412},[20657],{"type":17,"tag":329,"props":20658,"children":20659},{},[20660],{"type":23,"value":20203},{"type":17,"tag":329,"props":20662,"children":20663},{"class":331,"line":421},[20664],{"type":17,"tag":329,"props":20665,"children":20666},{},[20667],{"type":23,"value":20668},"    public String home() {\n",{"type":17,"tag":329,"props":20670,"children":20671},{"class":331,"line":430},[20672],{"type":17,"tag":329,"props":20673,"children":20674},{},[20675],{"type":23,"value":20219},{"type":17,"tag":329,"props":20677,"children":20678},{"class":331,"line":439},[20679],{"type":17,"tag":329,"props":20680,"children":20681},{},[20682],{"type":23,"value":1351},{"type":17,"tag":329,"props":20684,"children":20685},{"class":331,"line":447},[20686],{"type":17,"tag":329,"props":20687,"children":20688},{"emptyLinePlaceholder":542},[20689],{"type":23,"value":545},{"type":17,"tag":329,"props":20691,"children":20692},{"class":331,"line":456},[20693],{"type":17,"tag":329,"props":20694,"children":20695},{},[20696],{"type":23,"value":20241},{"type":17,"tag":329,"props":20698,"children":20699},{"class":331,"line":465},[20700],{"type":17,"tag":329,"props":20701,"children":20702},{},[20703],{"type":23,"value":20249},{"type":17,"tag":329,"props":20705,"children":20706},{"class":331,"line":474},[20707],{"type":17,"tag":329,"props":20708,"children":20709},{},[20710],{"type":23,"value":20257},{"type":17,"tag":329,"props":20712,"children":20713},{"class":331,"line":483},[20714],{"type":17,"tag":329,"props":20715,"children":20716},{},[20717],{"type":23,"value":1351},{"type":17,"tag":329,"props":20719,"children":20720},{"class":331,"line":667},[20721],{"type":17,"tag":329,"props":20722,"children":20723},{},[20724],{"type":23,"value":1602},{"type":17,"tag":329,"props":20726,"children":20727},{"class":331,"line":676},[20728],{"type":17,"tag":329,"props":20729,"children":20730},{},[20731],{"type":23,"value":753},{"type":17,"tag":74,"props":20733,"children":20735},{"id":20734},"_33-获取参数",[20736],{"type":23,"value":20737},"3.3 获取参数",{"type":17,"tag":3272,"props":20739,"children":20741},{"id":20740},"_331-获取普通参数",[20742],{"type":23,"value":20743},"3.3.1 获取普通参数",{"type":17,"tag":319,"props":20745,"children":20747},{"className":321,"code":20746,"language":323,"meta":7,"style":7},"@RequestMapping(\"\u002Fparam\")\npublic String getParam(String username, String password) {\n    System.out.println(\"用户名：\" + username + \"密码：\" + password);\n    return \"about\";\n}\n",[20748],{"type":17,"tag":293,"props":20749,"children":20750},{"__ignoreMap":7},[20751,20759,20767,20775,20783],{"type":17,"tag":329,"props":20752,"children":20753},{"class":331,"line":332},[20754],{"type":17,"tag":329,"props":20755,"children":20756},{},[20757],{"type":23,"value":20758},"@RequestMapping(\"\u002Fparam\")\n",{"type":17,"tag":329,"props":20760,"children":20761},{"class":331,"line":341},[20762],{"type":17,"tag":329,"props":20763,"children":20764},{},[20765],{"type":23,"value":20766},"public String getParam(String username, String password) {\n",{"type":17,"tag":329,"props":20768,"children":20769},{"class":331,"line":350},[20770],{"type":17,"tag":329,"props":20771,"children":20772},{},[20773],{"type":23,"value":20774},"    System.out.println(\"用户名：\" + username + \"密码：\" + password);\n",{"type":17,"tag":329,"props":20776,"children":20777},{"class":331,"line":359},[20778],{"type":17,"tag":329,"props":20779,"children":20780},{},[20781],{"type":23,"value":20782},"    return \"about\";\n",{"type":17,"tag":329,"props":20784,"children":20785},{"class":331,"line":368},[20786],{"type":17,"tag":329,"props":20787,"children":20788},{},[20789],{"type":23,"value":753},{"type":17,"tag":57,"props":20791,"children":20792},{},[20793],{"type":23,"value":20794},"3.3.2 获取实体类对象",{"type":17,"tag":57,"props":20796,"children":20797},{},[20798],{"type":17,"tag":86,"props":20799,"children":20800},{},[20801],{"type":23,"value":20802},"实体类",{"type":17,"tag":319,"props":20804,"children":20806},{"className":321,"code":20805,"language":323,"meta":7,"style":7},"public class User {\n    private Integer id;\n\n    private String username;\n\n    private String password;\n}\n",[20807],{"type":17,"tag":293,"props":20808,"children":20809},{"__ignoreMap":7},[20810,20817,20824,20831,20838,20845,20852],{"type":17,"tag":329,"props":20811,"children":20812},{"class":331,"line":332},[20813],{"type":17,"tag":329,"props":20814,"children":20815},{},[20816],{"type":23,"value":13527},{"type":17,"tag":329,"props":20818,"children":20819},{"class":331,"line":341},[20820],{"type":17,"tag":329,"props":20821,"children":20822},{},[20823],{"type":23,"value":13535},{"type":17,"tag":329,"props":20825,"children":20826},{"class":331,"line":350},[20827],{"type":17,"tag":329,"props":20828,"children":20829},{"emptyLinePlaceholder":542},[20830],{"type":23,"value":545},{"type":17,"tag":329,"props":20832,"children":20833},{"class":331,"line":359},[20834],{"type":17,"tag":329,"props":20835,"children":20836},{},[20837],{"type":23,"value":13543},{"type":17,"tag":329,"props":20839,"children":20840},{"class":331,"line":368},[20841],{"type":17,"tag":329,"props":20842,"children":20843},{"emptyLinePlaceholder":542},[20844],{"type":23,"value":545},{"type":17,"tag":329,"props":20846,"children":20847},{"class":331,"line":377},[20848],{"type":17,"tag":329,"props":20849,"children":20850},{},[20851],{"type":23,"value":13551},{"type":17,"tag":329,"props":20853,"children":20854},{"class":331,"line":386},[20855],{"type":17,"tag":329,"props":20856,"children":20857},{},[20858],{"type":23,"value":753},{"type":17,"tag":57,"props":20860,"children":20861},{},[20862],{"type":17,"tag":86,"props":20863,"children":20864},{},[20865],{"type":23,"value":20866},"获取参数",{"type":17,"tag":319,"props":20868,"children":20870},{"className":321,"code":20869,"language":323,"meta":7,"style":7},"@RequestMapping(\"\u002Fparam\u002Fpojo\")\npublic String getParamUser(User user) {\n\n    System.out.println(user);\n    return \"about\";\n\n}\n",[20871],{"type":17,"tag":293,"props":20872,"children":20873},{"__ignoreMap":7},[20874,20882,20890,20897,20904,20911,20918],{"type":17,"tag":329,"props":20875,"children":20876},{"class":331,"line":332},[20877],{"type":17,"tag":329,"props":20878,"children":20879},{},[20880],{"type":23,"value":20881},"@RequestMapping(\"\u002Fparam\u002Fpojo\")\n",{"type":17,"tag":329,"props":20883,"children":20884},{"class":331,"line":341},[20885],{"type":17,"tag":329,"props":20886,"children":20887},{},[20888],{"type":23,"value":20889},"public String getParamUser(User user) {\n",{"type":17,"tag":329,"props":20891,"children":20892},{"class":331,"line":350},[20893],{"type":17,"tag":329,"props":20894,"children":20895},{"emptyLinePlaceholder":542},[20896],{"type":23,"value":545},{"type":17,"tag":329,"props":20898,"children":20899},{"class":331,"line":359},[20900],{"type":17,"tag":329,"props":20901,"children":20902},{},[20903],{"type":23,"value":2371},{"type":17,"tag":329,"props":20905,"children":20906},{"class":331,"line":368},[20907],{"type":17,"tag":329,"props":20908,"children":20909},{},[20910],{"type":23,"value":20782},{"type":17,"tag":329,"props":20912,"children":20913},{"class":331,"line":377},[20914],{"type":17,"tag":329,"props":20915,"children":20916},{"emptyLinePlaceholder":542},[20917],{"type":23,"value":545},{"type":17,"tag":329,"props":20919,"children":20920},{"class":331,"line":386},[20921],{"type":17,"tag":329,"props":20922,"children":20923},{},[20924],{"type":23,"value":753},{"type":17,"tag":74,"props":20926,"children":20928},{"id":20927},"_34-解决参数乱码",[20929],{"type":23,"value":20930},"3.4 解决参数乱码",{"type":17,"tag":57,"props":20932,"children":20933},{},[20934],{"type":17,"tag":86,"props":20935,"children":20936},{},[20937],{"type":23,"value":20938},"web.xml",{"type":17,"tag":319,"props":20940,"children":20942},{"className":1376,"code":20941,"language":1378,"meta":7,"style":7},"\u003C!-- 配置Spring的编码过滤器 -->\n\u003Cfilter>\n    \u003Cfilter-name>CharacterEncodingFilter\u003C\u002Ffilter-name>\n    \u003Cfilter-class>org.springframework.web.filter.CharacterEncodingFilter\u003C\u002Ffilter-class>\n    \u003Cinit-param>\n        \u003Cparam-name>encoding\u003C\u002Fparam-name>\n        \u003Cparam-value>UTF-8\u003C\u002Fparam-value>\n    \u003C\u002Finit-param>\n    \u003Cinit-param>\n        \u003Cparam-name>forceEncoding\u003C\u002Fparam-name>\n        \u003Cparam-value>true\u003C\u002Fparam-value>\n    \u003C\u002Finit-param>\n\u003C\u002Ffilter>\n\u003Cfilter-mapping>\n    \u003Cfilter-name>CharacterEncodingFilter\u003C\u002Ffilter-name>\n    \u003Curl-pattern>\u002F*\u003C\u002Furl-pattern>\n\u003C\u002Ffilter-mapping>\n",[20943],{"type":17,"tag":293,"props":20944,"children":20945},{"__ignoreMap":7},[20946,20954,20962,20970,20978,20986,20994,21002,21010,21017,21025,21033,21040,21048,21056,21063,21071],{"type":17,"tag":329,"props":20947,"children":20948},{"class":331,"line":332},[20949],{"type":17,"tag":329,"props":20950,"children":20951},{},[20952],{"type":23,"value":20953},"\u003C!-- 配置Spring的编码过滤器 -->\n",{"type":17,"tag":329,"props":20955,"children":20956},{"class":331,"line":341},[20957],{"type":17,"tag":329,"props":20958,"children":20959},{},[20960],{"type":23,"value":20961},"\u003Cfilter>\n",{"type":17,"tag":329,"props":20963,"children":20964},{"class":331,"line":350},[20965],{"type":17,"tag":329,"props":20966,"children":20967},{},[20968],{"type":23,"value":20969},"    \u003Cfilter-name>CharacterEncodingFilter\u003C\u002Ffilter-name>\n",{"type":17,"tag":329,"props":20971,"children":20972},{"class":331,"line":359},[20973],{"type":17,"tag":329,"props":20974,"children":20975},{},[20976],{"type":23,"value":20977},"    \u003Cfilter-class>org.springframework.web.filter.CharacterEncodingFilter\u003C\u002Ffilter-class>\n",{"type":17,"tag":329,"props":20979,"children":20980},{"class":331,"line":368},[20981],{"type":17,"tag":329,"props":20982,"children":20983},{},[20984],{"type":23,"value":20985},"    \u003Cinit-param>\n",{"type":17,"tag":329,"props":20987,"children":20988},{"class":331,"line":377},[20989],{"type":17,"tag":329,"props":20990,"children":20991},{},[20992],{"type":23,"value":20993},"        \u003Cparam-name>encoding\u003C\u002Fparam-name>\n",{"type":17,"tag":329,"props":20995,"children":20996},{"class":331,"line":386},[20997],{"type":17,"tag":329,"props":20998,"children":20999},{},[21000],{"type":23,"value":21001},"        \u003Cparam-value>UTF-8\u003C\u002Fparam-value>\n",{"type":17,"tag":329,"props":21003,"children":21004},{"class":331,"line":394},[21005],{"type":17,"tag":329,"props":21006,"children":21007},{},[21008],{"type":23,"value":21009},"    \u003C\u002Finit-param>\n",{"type":17,"tag":329,"props":21011,"children":21012},{"class":331,"line":403},[21013],{"type":17,"tag":329,"props":21014,"children":21015},{},[21016],{"type":23,"value":20985},{"type":17,"tag":329,"props":21018,"children":21019},{"class":331,"line":412},[21020],{"type":17,"tag":329,"props":21021,"children":21022},{},[21023],{"type":23,"value":21024},"        \u003Cparam-name>forceEncoding\u003C\u002Fparam-name>\n",{"type":17,"tag":329,"props":21026,"children":21027},{"class":331,"line":421},[21028],{"type":17,"tag":329,"props":21029,"children":21030},{},[21031],{"type":23,"value":21032},"        \u003Cparam-value>true\u003C\u002Fparam-value>\n",{"type":17,"tag":329,"props":21034,"children":21035},{"class":331,"line":430},[21036],{"type":17,"tag":329,"props":21037,"children":21038},{},[21039],{"type":23,"value":21009},{"type":17,"tag":329,"props":21041,"children":21042},{"class":331,"line":439},[21043],{"type":17,"tag":329,"props":21044,"children":21045},{},[21046],{"type":23,"value":21047},"\u003C\u002Ffilter>\n",{"type":17,"tag":329,"props":21049,"children":21050},{"class":331,"line":447},[21051],{"type":17,"tag":329,"props":21052,"children":21053},{},[21054],{"type":23,"value":21055},"\u003Cfilter-mapping>\n",{"type":17,"tag":329,"props":21057,"children":21058},{"class":331,"line":456},[21059],{"type":17,"tag":329,"props":21060,"children":21061},{},[21062],{"type":23,"value":20969},{"type":17,"tag":329,"props":21064,"children":21065},{"class":331,"line":465},[21066],{"type":17,"tag":329,"props":21067,"children":21068},{},[21069],{"type":23,"value":21070},"    \u003Curl-pattern>\u002F*\u003C\u002Furl-pattern>\n",{"type":17,"tag":329,"props":21072,"children":21073},{"class":331,"line":474},[21074],{"type":17,"tag":329,"props":21075,"children":21076},{},[21077],{"type":23,"value":21078},"\u003C\u002Ffilter-mapping>\n",{"type":17,"tag":25,"props":21080,"children":21082},{"id":21081},"_4-域对象共享数据",[21083],{"type":23,"value":21084},"4. 域对象共享数据",{"type":17,"tag":74,"props":21086,"children":21088},{"id":21087},"_41-请求域共享数据",[21089],{"type":23,"value":21090},"4.1 请求域共享数据",{"type":17,"tag":57,"props":21092,"children":21093},{},[21094],{"type":17,"tag":86,"props":21095,"children":21096},{},[21097],{"type":23,"value":21098},"Controller层",{"type":17,"tag":319,"props":21100,"children":21102},{"className":321,"code":21101,"language":323,"meta":7,"style":7},"@Controller\npublic class TestScopeController {\n\n    @RequestMapping(\"\u002Ftest\u002Fmodel\")\n    public String testMode(Model model) {\n        model.addAttribute(\"testRequestScope\", \"hello,Model\");\n        return \"about\";\n    }\n}\n",[21103],{"type":17,"tag":293,"props":21104,"children":21105},{"__ignoreMap":7},[21106,21113,21121,21128,21136,21144,21152,21159,21166],{"type":17,"tag":329,"props":21107,"children":21108},{"class":331,"line":332},[21109],{"type":17,"tag":329,"props":21110,"children":21111},{},[21112],{"type":23,"value":15336},{"type":17,"tag":329,"props":21114,"children":21115},{"class":331,"line":341},[21116],{"type":17,"tag":329,"props":21117,"children":21118},{},[21119],{"type":23,"value":21120},"public class TestScopeController {\n",{"type":17,"tag":329,"props":21122,"children":21123},{"class":331,"line":350},[21124],{"type":17,"tag":329,"props":21125,"children":21126},{"emptyLinePlaceholder":542},[21127],{"type":23,"value":545},{"type":17,"tag":329,"props":21129,"children":21130},{"class":331,"line":359},[21131],{"type":17,"tag":329,"props":21132,"children":21133},{},[21134],{"type":23,"value":21135},"    @RequestMapping(\"\u002Ftest\u002Fmodel\")\n",{"type":17,"tag":329,"props":21137,"children":21138},{"class":331,"line":368},[21139],{"type":17,"tag":329,"props":21140,"children":21141},{},[21142],{"type":23,"value":21143},"    public String testMode(Model model) {\n",{"type":17,"tag":329,"props":21145,"children":21146},{"class":331,"line":377},[21147],{"type":17,"tag":329,"props":21148,"children":21149},{},[21150],{"type":23,"value":21151},"        model.addAttribute(\"testRequestScope\", \"hello,Model\");\n",{"type":17,"tag":329,"props":21153,"children":21154},{"class":331,"line":386},[21155],{"type":17,"tag":329,"props":21156,"children":21157},{},[21158],{"type":23,"value":20257},{"type":17,"tag":329,"props":21160,"children":21161},{"class":331,"line":394},[21162],{"type":17,"tag":329,"props":21163,"children":21164},{},[21165],{"type":23,"value":1351},{"type":17,"tag":329,"props":21167,"children":21168},{"class":331,"line":403},[21169],{"type":17,"tag":329,"props":21170,"children":21171},{},[21172],{"type":23,"value":753},{"type":17,"tag":57,"props":21174,"children":21175},{},[21176],{"type":17,"tag":86,"props":21177,"children":21178},{},[21179],{"type":23,"value":21180},"about.html",{"type":17,"tag":319,"props":21182,"children":21186},{"className":21183,"code":21184,"language":21185,"meta":7,"style":7},"language-html shiki shiki-themes github-dark","\u003Cp th:text=\"${testRequestScope}\">\u003C\u002Fp>  \u002F\u002F hello,Model\n","html",[21187],{"type":17,"tag":293,"props":21188,"children":21189},{"__ignoreMap":7},[21190],{"type":17,"tag":329,"props":21191,"children":21192},{"class":331,"line":332},[21193,21199,21204,21210,21215,21221,21226,21230],{"type":17,"tag":329,"props":21194,"children":21196},{"style":21195},"--shiki-default:#E1E4E8",[21197],{"type":23,"value":21198},"\u003C",{"type":17,"tag":329,"props":21200,"children":21202},{"style":21201},"--shiki-default:#85E89D",[21203],{"type":23,"value":57},{"type":17,"tag":329,"props":21205,"children":21207},{"style":21206},"--shiki-default:#B392F0",[21208],{"type":23,"value":21209}," th:text",{"type":17,"tag":329,"props":21211,"children":21212},{"style":21195},[21213],{"type":23,"value":21214},"=",{"type":17,"tag":329,"props":21216,"children":21218},{"style":21217},"--shiki-default:#9ECBFF",[21219],{"type":23,"value":21220},"\"${testRequestScope}\"",{"type":17,"tag":329,"props":21222,"children":21223},{"style":21195},[21224],{"type":23,"value":21225},">\u003C\u002F",{"type":17,"tag":329,"props":21227,"children":21228},{"style":21201},[21229],{"type":23,"value":57},{"type":17,"tag":329,"props":21231,"children":21232},{"style":21195},[21233],{"type":23,"value":21234},">  \u002F\u002F hello,Model\n",{"type":17,"tag":74,"props":21236,"children":21238},{"id":21237},"_42-会话域应用域共享数据",[21239],{"type":23,"value":21240},"4.2 会话域、应用域共享数据",{"type":17,"tag":57,"props":21242,"children":21243},{},[21244],{"type":17,"tag":86,"props":21245,"children":21246},{},[21247],{"type":23,"value":21098},{"type":17,"tag":319,"props":21249,"children":21251},{"className":321,"code":21250,"language":323,"meta":7,"style":7},"\u002F\u002F 会话域\n@RequestMapping(\"\u002Ftest\u002Fsession\")\npublic String testSession(HttpSession session) {\n    session.setAttribute(\"testScopeSession\", \"hello,session\");\n    return \"about\";\n}\n\n\u002F\u002F 应用域\n@RequestMapping(\"\u002Ftest\u002Fapplication\")\npublic String testApplication(HttpSession session) {\n    ServletContext application = session.getServletContext();\n    application.setAttribute(\"testScopeApplication\", \"hello,application\");\n    return \"about\";\n}\n",[21252],{"type":17,"tag":293,"props":21253,"children":21254},{"__ignoreMap":7},[21255,21263,21271,21279,21287,21294,21301,21308,21316,21324,21332,21340,21348,21355],{"type":17,"tag":329,"props":21256,"children":21257},{"class":331,"line":332},[21258],{"type":17,"tag":329,"props":21259,"children":21260},{},[21261],{"type":23,"value":21262},"\u002F\u002F 会话域\n",{"type":17,"tag":329,"props":21264,"children":21265},{"class":331,"line":341},[21266],{"type":17,"tag":329,"props":21267,"children":21268},{},[21269],{"type":23,"value":21270},"@RequestMapping(\"\u002Ftest\u002Fsession\")\n",{"type":17,"tag":329,"props":21272,"children":21273},{"class":331,"line":350},[21274],{"type":17,"tag":329,"props":21275,"children":21276},{},[21277],{"type":23,"value":21278},"public String testSession(HttpSession session) {\n",{"type":17,"tag":329,"props":21280,"children":21281},{"class":331,"line":359},[21282],{"type":17,"tag":329,"props":21283,"children":21284},{},[21285],{"type":23,"value":21286},"    session.setAttribute(\"testScopeSession\", \"hello,session\");\n",{"type":17,"tag":329,"props":21288,"children":21289},{"class":331,"line":368},[21290],{"type":17,"tag":329,"props":21291,"children":21292},{},[21293],{"type":23,"value":20782},{"type":17,"tag":329,"props":21295,"children":21296},{"class":331,"line":377},[21297],{"type":17,"tag":329,"props":21298,"children":21299},{},[21300],{"type":23,"value":753},{"type":17,"tag":329,"props":21302,"children":21303},{"class":331,"line":386},[21304],{"type":17,"tag":329,"props":21305,"children":21306},{"emptyLinePlaceholder":542},[21307],{"type":23,"value":545},{"type":17,"tag":329,"props":21309,"children":21310},{"class":331,"line":394},[21311],{"type":17,"tag":329,"props":21312,"children":21313},{},[21314],{"type":23,"value":21315},"\u002F\u002F 应用域\n",{"type":17,"tag":329,"props":21317,"children":21318},{"class":331,"line":403},[21319],{"type":17,"tag":329,"props":21320,"children":21321},{},[21322],{"type":23,"value":21323},"@RequestMapping(\"\u002Ftest\u002Fapplication\")\n",{"type":17,"tag":329,"props":21325,"children":21326},{"class":331,"line":412},[21327],{"type":17,"tag":329,"props":21328,"children":21329},{},[21330],{"type":23,"value":21331},"public String testApplication(HttpSession session) {\n",{"type":17,"tag":329,"props":21333,"children":21334},{"class":331,"line":421},[21335],{"type":17,"tag":329,"props":21336,"children":21337},{},[21338],{"type":23,"value":21339},"    ServletContext application = session.getServletContext();\n",{"type":17,"tag":329,"props":21341,"children":21342},{"class":331,"line":430},[21343],{"type":17,"tag":329,"props":21344,"children":21345},{},[21346],{"type":23,"value":21347},"    application.setAttribute(\"testScopeApplication\", \"hello,application\");\n",{"type":17,"tag":329,"props":21349,"children":21350},{"class":331,"line":439},[21351],{"type":17,"tag":329,"props":21352,"children":21353},{},[21354],{"type":23,"value":20782},{"type":17,"tag":329,"props":21356,"children":21357},{"class":331,"line":447},[21358],{"type":17,"tag":329,"props":21359,"children":21360},{},[21361],{"type":23,"value":753},{"type":17,"tag":57,"props":21363,"children":21364},{},[21365],{"type":17,"tag":86,"props":21366,"children":21367},{},[21368],{"type":23,"value":21180},{"type":17,"tag":319,"props":21370,"children":21372},{"className":21183,"code":21371,"language":21185,"meta":7,"style":7},"\u003Cp th:text=\"${testRequestScope}\">\u003C\u002Fp>\n\u003Cp th:text=\"${session.testScopeSession}\">\u003C\u002Fp>\n\u003Cp th:text=\"${application.testScopeApplication}\">\u003C\u002Fp>\n",[21373],{"type":17,"tag":293,"props":21374,"children":21375},{"__ignoreMap":7},[21376,21411,21447],{"type":17,"tag":329,"props":21377,"children":21378},{"class":331,"line":332},[21379,21383,21387,21391,21395,21399,21403,21407],{"type":17,"tag":329,"props":21380,"children":21381},{"style":21195},[21382],{"type":23,"value":21198},{"type":17,"tag":329,"props":21384,"children":21385},{"style":21201},[21386],{"type":23,"value":57},{"type":17,"tag":329,"props":21388,"children":21389},{"style":21206},[21390],{"type":23,"value":21209},{"type":17,"tag":329,"props":21392,"children":21393},{"style":21195},[21394],{"type":23,"value":21214},{"type":17,"tag":329,"props":21396,"children":21397},{"style":21217},[21398],{"type":23,"value":21220},{"type":17,"tag":329,"props":21400,"children":21401},{"style":21195},[21402],{"type":23,"value":21225},{"type":17,"tag":329,"props":21404,"children":21405},{"style":21201},[21406],{"type":23,"value":57},{"type":17,"tag":329,"props":21408,"children":21409},{"style":21195},[21410],{"type":23,"value":14990},{"type":17,"tag":329,"props":21412,"children":21413},{"class":331,"line":341},[21414,21418,21422,21426,21430,21435,21439,21443],{"type":17,"tag":329,"props":21415,"children":21416},{"style":21195},[21417],{"type":23,"value":21198},{"type":17,"tag":329,"props":21419,"children":21420},{"style":21201},[21421],{"type":23,"value":57},{"type":17,"tag":329,"props":21423,"children":21424},{"style":21206},[21425],{"type":23,"value":21209},{"type":17,"tag":329,"props":21427,"children":21428},{"style":21195},[21429],{"type":23,"value":21214},{"type":17,"tag":329,"props":21431,"children":21432},{"style":21217},[21433],{"type":23,"value":21434},"\"${session.testScopeSession}\"",{"type":17,"tag":329,"props":21436,"children":21437},{"style":21195},[21438],{"type":23,"value":21225},{"type":17,"tag":329,"props":21440,"children":21441},{"style":21201},[21442],{"type":23,"value":57},{"type":17,"tag":329,"props":21444,"children":21445},{"style":21195},[21446],{"type":23,"value":14990},{"type":17,"tag":329,"props":21448,"children":21449},{"class":331,"line":350},[21450,21454,21458,21462,21466,21471,21475,21479],{"type":17,"tag":329,"props":21451,"children":21452},{"style":21195},[21453],{"type":23,"value":21198},{"type":17,"tag":329,"props":21455,"children":21456},{"style":21201},[21457],{"type":23,"value":57},{"type":17,"tag":329,"props":21459,"children":21460},{"style":21206},[21461],{"type":23,"value":21209},{"type":17,"tag":329,"props":21463,"children":21464},{"style":21195},[21465],{"type":23,"value":21214},{"type":17,"tag":329,"props":21467,"children":21468},{"style":21217},[21469],{"type":23,"value":21470},"\"${application.testScopeApplication}\"",{"type":17,"tag":329,"props":21472,"children":21473},{"style":21195},[21474],{"type":23,"value":21225},{"type":17,"tag":329,"props":21476,"children":21477},{"style":21201},[21478],{"type":23,"value":57},{"type":17,"tag":329,"props":21480,"children":21481},{"style":21195},[21482],{"type":23,"value":14990},{"type":17,"tag":25,"props":21484,"children":21486},{"id":21485},"_5-restful",[21487],{"type":23,"value":21488},"5. RESTful",{"type":17,"tag":21490,"props":21491,"children":21492},"style",{},[21493],{"type":23,"value":21494},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":7,"searchDepth":341,"depth":341,"links":21496},[21497,21498,21511,21517],{"id":27,"depth":350,"text":27},{"id":48,"depth":341,"text":51,"children":21499},[21500,21501,21502,21503,21504,21505,21506,21507,21508,21509,21510],{"id":69,"depth":350,"text":72},{"id":226,"depth":350,"text":229},{"id":1672,"depth":350,"text":1675},{"id":2022,"depth":350,"text":2025},{"id":2663,"depth":350,"text":2666},{"id":3642,"depth":350,"text":3645},{"id":4501,"depth":350,"text":4504},{"id":6783,"depth":350,"text":6786},{"id":7732,"depth":350,"text":7735},{"id":7911,"depth":350,"text":7914},{"id":9463,"depth":350,"text":9466},{"id":9804,"depth":341,"text":9807,"children":21512},[21513,21514,21515,21516],{"id":9810,"depth":350,"text":9813},{"id":9991,"depth":350,"text":9994},{"id":15421,"depth":350,"text":15424},{"id":17501,"depth":350,"text":17504},{"id":19459,"depth":341,"text":9983,"children":21518},[21519,21520,21521,21522,21523],{"id":19464,"depth":350,"text":19467},{"id":19646,"depth":350,"text":19649},{"id":20540,"depth":350,"text":20543},{"id":21081,"depth":350,"text":21084},{"id":21485,"depth":350,"text":21488},"markdown","content:articles:backend:SSM.md","content","articles\u002Fbackend\u002FSSM.md","articles\u002Fbackend\u002FSSM","md",1779811690129]