十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶(hù) + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專(zhuān)業(yè)推廣+無(wú)憂(yōu)售后,網(wǎng)站問(wèn)題一站解決
Spring Boot簡(jiǎn)介
創(chuàng)新互聯(lián)公司專(zhuān)注于貴德網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供貴德?tīng)I(yíng)銷(xiāo)型網(wǎng)站建設(shè),貴德網(wǎng)站制作、貴德網(wǎng)頁(yè)設(shè)計(jì)、貴德網(wǎng)站官網(wǎng)定制、微信小程序服務(wù),打造貴德網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供貴德網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)落地服務(wù)。
Spring Boot是由Pivotal團(tuán)隊(duì)提供的全新框架,其設(shè)計(jì)目的是用來(lái)簡(jiǎn)化新Spring應(yīng)用的初始搭建以及開(kāi)發(fā)過(guò)程。該框架使用了特定的方式來(lái)進(jìn)行配置,從而使開(kāi)發(fā)人員不再需要定義樣板化的配置。通過(guò)這種方式,Spring Boot致力于在蓬勃發(fā)展的快速應(yīng)用開(kāi)發(fā)領(lǐng)域(rapid application development)成為領(lǐng)導(dǎo)者。
原有Spring優(yōu)缺點(diǎn)分析
Spring的優(yōu)點(diǎn)分析
Spring是Java企業(yè)版(Java Enterprise Edition,JEE,也稱(chēng)J2EE)的輕量級(jí)代替品。無(wú)需開(kāi)發(fā)重量級(jí)的Enterprise JavaBean(EJB),Spring為企業(yè)級(jí)Java開(kāi)發(fā)提供了一種相對(duì)簡(jiǎn)單的方法,通過(guò)依賴(lài)注入和面向切面編程,用簡(jiǎn)單的Java對(duì)象(Plain Old Java Object,POJO)實(shí)現(xiàn)了EJB的功能。
Spring的缺點(diǎn)分析
雖然Spring的組件代碼是輕量級(jí)的,但它的配置卻是重量級(jí)的。一開(kāi)始,Spring用XML配置,而且是很多XML配置。Spring 2.5引入了基于注解的組件掃描,這消除了大量針對(duì)應(yīng)用程序自身組件的顯式XML配置。Spring 3.0引入了基于Java的配置,這是一種類(lèi)型安全的可重構(gòu)配置方式,可以代替XML。
所有這些配置都代表了開(kāi)發(fā)時(shí)的損耗。因?yàn)樵谒伎糞pring特性配置和解決業(yè)務(wù)問(wèn)題之間需要進(jìn)行思維切換,所以編寫(xiě)配置擠占了編寫(xiě)應(yīng)用程序邏輯的時(shí)間。和所有框架一樣,Spring實(shí)用,但與此同時(shí)它要求的回報(bào)也不少。
除此之外,項(xiàng)目的依賴(lài)管理也是一件耗時(shí)耗力的事情。在環(huán)境搭建時(shí),需要分析要導(dǎo)入哪些庫(kù)的坐標(biāo),而且還需要分析導(dǎo)入與之有依賴(lài)關(guān)系的其他庫(kù)的坐標(biāo),一旦選錯(cuò)了依賴(lài)的版本,隨之而來(lái)的不兼容問(wèn)題就會(huì)嚴(yán)重阻礙項(xiàng)目的開(kāi)發(fā)進(jìn)度。
MyBatis
@
簡(jiǎn)介
優(yōu)點(diǎn)
最大的優(yōu)點(diǎn)是SQL語(yǔ)句靈活,適合調(diào)優(yōu)情景,業(yè)務(wù)復(fù)雜情景
劣勢(shì)
最大的劣勢(shì)是不同數(shù)據(jù)庫(kù)之間的遷移
引入mybatis組件
pom.xml中加入
MySQL mysql-connector-java org.mybatis.spring.boot mybatis-spring-boot-starter 2.1.1
application.properties中加入
#dateSource spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false spring.datasource.username=root spring.datasource.password=root # mybatis # 下劃線(xiàn)轉(zhuǎn)駝峰開(kāi)啟 mybatis.configuration.map-underscore-to-camel-case=true # mapper掃描位置 mybatis.mapper-locations=classpath:mapper/*.xml
需要說(shuō)明的是,我引入的mysql驅(qū)動(dòng)為 com.mysql.cj.jdbc.Driver,而不是 com.mysql.jdbc.Driver。以下是一些參數(shù)的說(shuō)明;
代碼實(shí)戰(zhàn)
本地的 mysql 版本為 5.7.20。
建表語(yǔ)句
CREATE TABLE USER_INFO ( user_id DECIMAL(10) PRIMARY KEY NOT NULL, user_name VARCHAR(20) DEFAULT "" NOT NULL ); CREATE UNIQUE INDEX USER_INFO_user_id_uindex ON USER_INFO (user_id); ALTER TABLE USER_INFO COMMENT = '用戶(hù)基本信息表';
插入數(shù)據(jù)
INSERT INTO test.user_info (user_id, user_name) VALUES (1, '特朗普'); INSERT INTO test.user_info (user_id, user_name) VALUES (2, '唐納德');
現(xiàn)在的項(xiàng)目路徑為
在SpringBoot的入口類(lèi)中加 @MapperScan 注解,以?huà)呙?DAO 類(lèi),不用在每個(gè)dao接口加個(gè)@Mapper 注解。
package com.example; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @MapperScan("com.example.dao") public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
注:如果沒(méi)有分拆項(xiàng)目成微服務(wù)架構(gòu),或分布式架構(gòu),application主類(lèi)中的@SpringBootApplication自動(dòng)會(huì)掃描本包中的@Controller,@Service,@Resource等,是不需要浪費(fèi)另一行@ComponentScan注解,配置路徑的。
UserController.java
package com.example.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.example.service.IUserService; @Controller @RequestMapping("user") public class UserController { @Autowired private IUserService userService; @RequestMapping("/queryUser") @ResponseBody void queryUser() { this.userService.queryUser(); } }
IUserService.java
package com.example.service; public interface IUserService { void queryUser(); }
UserServiceIml.java
package com.example.service; import com.example.dao.UserDao; import com.example.entity.UserEntity; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; @Service("userService") public class UserServiceIml implements IUserService { @Resource private UserDao userDao; @Override public void queryUser() { ListuserList = this.userDao.queryUser(); System.out.println("================"); System.out.println(userList); System.out.println("================"); } }
注:如果是SSM架構(gòu)過(guò)來(lái)的,這個(gè)@Resource注解可能比較陌生,因?yàn)槲夜烙?jì)會(huì)和我之前一樣用@Autowired,但是我是沒(méi)有在dao層用 @Repository 注解的,之前用了在主類(lèi)用了@MapperScan自動(dòng)去掃描所有的dao,所以不能再用之前的@Autowired。
UserDao.java
package com.example.dao; import com.example.entity.UserEntity; import java.util.List; public interface UserDao { ListqueryUser(); }
UserEntity.java
package com.example.entity; public class UserEntity { private long userId; private String userName; public long getUserId() { return userId; } public void setUserId(long userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } @Override public String toString() { return "UserEntity{" + "userId=" + userId + ", userName='" + userName + '\'' + '}'; } }
如果你運(yùn)行不成功,請(qǐng)對(duì)比引入的包的版本,和數(shù)據(jù)庫(kù)配置是否是根據(jù)你本地的,順便看看注解是否和文中一樣。
效果圖如下;
注:如果是跟著本教程來(lái)的,因?yàn)橐婚_(kāi)始就引入了spring security,而新增的路徑不在剛才的權(quán)限中,所以我給zs用戶(hù)改成了user下的皆可訪(fǎng)問(wèn)。如果沒(méi)有跟著之前配置spring security,無(wú)需理會(huì)如下內(nèi)容
//http.authorizeRequests().antMatchers("/user/addUser").hasRole("AAA") http.authorizeRequests().antMatchers("/user/**").hasRole("AAA")
總結(jié)
以上所述是小編給大家介紹的springboot快速整合Mybatis組件的方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)創(chuàng)新互聯(lián)網(wǎng)站的支持!如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!