<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>hello</title>
</head>
<body>
你好!初學(xué)者,我是SpringBoot的簡單啟動頁面!
</body>
</html>
package com.springboot.demo.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author
* @version 1.0
* @date 2021/09/07 10:50 上午
*/
/**
* Web層:就是Controller層,實(shí)現(xiàn)與web前端的交互。
*/
@RestController
@RequestMapping("/ceshi")
public class HelloWorldController {
@RequestMapping("/index")
public String sayHello(){
System.out.println("測試開始");
return "index";
}
}
spring:
datasource:
name: test #數(shù)據(jù)庫名
url: jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8&useSSL=false #url
username: root #用戶名
password: 123456 #密碼
# 升級后的mysql驅(qū)動類,Driver位置由com.mysql.jdbc.Driver 變?yōu)閏om.mysql.cj.jdbc.Driver
driver-class-name: com.mysql.cj.jdbc.Driver #數(shù)據(jù)庫鏈接驅(qū)動
mybatis:
mapper-locations: classpath:mapper/*.xml #配置映射文件
type-aliases-package: package com.springboot.demo.bean #配置實(shí)體類
(1)DAO層:包括XxxMapper.java(數(shù)據(jù)庫訪問接口類),XxxMapper.xml(數(shù)據(jù)庫鏈接實(shí)現(xiàn));(這個命名,有人喜歡用Dao命名,有人喜歡用Mapper,看個人習(xí)慣了吧)
(2)Bean層:也叫model層,模型層,entity層,實(shí)體層,就是數(shù)據(jù)庫表的映射實(shí)體類,存放POJO對象;
(3)Service層:也叫服務(wù)層,業(yè)務(wù)層,包括XxxService.java(業(yè)務(wù)接口類),XxxServiceImpl.java(業(yè)務(wù)實(shí)現(xiàn)類);(可以在service文件夾下新建impl文件放業(yè)務(wù)實(shí)現(xiàn)類,也可以把業(yè)務(wù)實(shí)現(xiàn)類單獨(dú)放一個文件夾下,更清晰)
(4)Web層:就是Controller層,實(shí)現(xiàn)與web前端的交互。
依照上面四層,創(chuàng)建目錄結(jié)構(gòu)如下:
(1)在application配置文件中添加MyBatis配置:
spring:
datasource:
name: test #數(shù)據(jù)庫名
url: jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8&useSSL=false #url
username: root #用戶名
password: 1qaz2wsx #密碼
# 升級后的mysql驅(qū)動類,Driver位置由com.mysql.jdbc.Driver 變?yōu)閏om.mysql.cj.jdbc.Driver
driver-class-name: com.mysql.cj.jdbc.Driver #數(shù)據(jù)庫鏈接驅(qū)動
mybatis:
mapper-locations: classpath:mapper/*.xml #配置映射文件
type-aliases-package: package com.springboot.demo.bean #配置實(shí)體類
(2)pom.xml文件配置信息
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>test</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
(3)Bean實(shí)體類,依據(jù)數(shù)據(jù)庫表,生成set和get方法;
package com.springboot.demo.bean;
/**
* @author
* @version 1.0
* @date 2021/09/07 4:27 下午
*/
/**
* Bean層:也叫model層,模型層,entity層,實(shí)體層,就是數(shù)據(jù)庫表的映射實(shí)體類,存放POJO對象;
* 依據(jù)數(shù)據(jù)庫表,生成set和get方法;
*/
public class UserBean {
private int id;
private String name;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
(4)DAO層訪問數(shù)據(jù)庫接口文件:
package com.springboot.demo.mapper;
import com.springboot.demo.bean.UserBean;
/**
* @author
* @version 1.0
* @date 2021/09/07 4:41 下午
*/
/**
* DAO層訪問數(shù)據(jù)庫接口文件
*/
public interface UserMapper {
UserBean getInfo(String name,String password);
}
5)DAO層訪問數(shù)據(jù)庫實(shí)現(xiàn)文件(需在resource包下創(chuàng)建mapper文件夾,然后再創(chuàng)建一個UserMapper.xml.在application配置文件中mybatis:mapper-locations:對應(yīng)的就是該文件地址),注意<mapper>標(biāo)簽的namespace屬性要填寫 訪問數(shù)據(jù)庫接口類文件路徑:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.springboot.demo.mapper.UserMapper">
<select id="getInfo" parameterType="String" resultType="com.springboot.demo.bean.UserBean">
SELECT * FROM user WHERE name = #{name} AND password = #{password}
</select>
</mapper>
(6)Service層業(yè)務(wù)接口類編寫:
package com.springboot.demo.service;
import com.springboot.demo.bean.UserBean;
import org.springframework.stereotype.Repository;
/**
* @author
* @version 1.0
* @date 2021/09/07 4:29 下午
*/
/**
* Service層:也叫服務(wù)層,業(yè)務(wù)層,包括XxxService.java(業(yè)務(wù)接口類),XxxServiceImpl.java(業(yè)務(wù)實(shí)現(xiàn)類);
* (可以在service文件夾下新建impl文件放業(yè)務(wù)實(shí)現(xiàn)類,也可以把業(yè)務(wù)實(shí)現(xiàn)類單獨(dú)放一個文件夾下,更清晰
*/
@Repository
public interface UserService {
UserBean loginIn(String name,String password);
}
(7)Service層業(yè)務(wù)實(shí)現(xiàn)類編寫,注意要注解@Service,注入DAO:
package com.springboot.demo.impl;
import com.springboot.demo.bean.UserBean;
import com.springboot.demo.mapper.UserMapper;
import com.springboot.demo.service.UserService;
/**
* @author
* @version 1.0
* @date 2021/09/07 4:48 下午
*/
/**
* Service層業(yè)務(wù)實(shí)現(xiàn)類編寫,注意要注解@Service,注入DAO:
*/
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserService {
//將DAO注入Service層
@Autowired
private UserMapper userMapper;
@Override
public UserBean loginIn(String name, String password) {
return userMapper.getInfo(name,password);
}
}
8)項(xiàng)目啟動類要添加注解@MapperScan項(xiàng)目啟動時掃描mapper接口,否則會報錯找不到mapper文件:
package com.springboot.demo;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.springboot.demo.mapper")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class);
}
}
(9)編寫測試類,看是否能成功 訪問數(shù)據(jù)庫,獲取數(shù)據(jù)庫信息:
package com.springboot.demo;
import com.springboot.demo.bean.UserBean;
import com.springboot.demo.service.UserService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestApplicationTests {
@Autowired
UserService userService;
@Test
public void contextLoads() {
UserBean userBean = userService.loginIn("springboot", "123456");
System.out.println("該用戶ID為:");
System.out.println(userBean.getId());
}
}
(10) controller層,注意添加@controller注解,注入Service服務(wù):
package com.springboot.demo.controller;
/**
* @author
* @version 1.0
* @date 2021/09/07 4:58 下午
*/
import com.springboot.demo.bean.UserBean;
import com.springboot.demo.service.UserService;
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.RequestMethod;
@Controller
public class LoginController {
//將Service注入Web層
@Autowired
UserService userService;
@RequestMapping("/login")
public String show(){
return "login";
}
@RequestMapping(value = "/loginIn",method = RequestMethod.POST)
public String login(String name,String password){
UserBean userBean = userService.loginIn(name,password);
if(userBean!=null){
return "success";
}else {
return "error";
}
}
}
(11)html文件:
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>login</title>
</head>
<body>
<form role="form" action = "/loginIn" method="post">
賬號:<input type="text" id="name" name = "name"> <br>
密碼:<input type="password" id = "password" name = "password"> <br>
<input type="submit" id = "login" value = "login">
</form>
</body>
</html>
success.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>success</title>
</head>
<body>
<h1>登錄成功!</h1>
</body>
</html>
error.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>error</title>
</head>
<body>
<h1>登錄失敗!</h1>
</body>
</html>
項(xiàng)目到這里就算完美結(jié)束了,對自己說一聲,加油,努力學(xué)習(xí)。
<div id="app">
{{msg}}
</div>
<script src="/js/vue.js"></script>
<script>
const app = new Vue({
el:'#app',
data:{
msg: 'study Vue 2323322'
}
})
</script>
html中輸入vue后回車自動生成以上代碼
步驟:1,找到設(shè)置setting中File-->Settings-->Editor-->Live Templates
新建快捷生成操作名稱
在vue中新建vue快捷名稱
使用位置為html中
完成
作為一枚程序員,平時最常用的ide就是IntelliJ IDEA。平時會用到各種各樣的插件,通過插件的使用,提高自己的開發(fā)效率。
目前已有插件并不能真的完全滿足自己的需求。舉個簡單的例子,比如,最近在用mybatis plus的generator,配置完成之后,運(yùn)行main方法,就可以生成ORM代碼。新建一個工程,就需要把代碼給拷貝過去,然后再重新配置一下,再生成。
缺點(diǎn):
基于以上思考,就需要開發(fā)插件來和系統(tǒng)解耦,達(dá)到提效的效果。
最新版的插件開發(fā)使用的是kts的gradle插件。基本用法是一樣的,不同的是寫法有稍微一點(diǎn)不一樣。
依賴
//頂層結(jié)構(gòu)
dependencies {
implementation("org.springframework.boot:spring-boot-starter:2.7.0")
}
// 一般的gradle是
compile group: 'org.springframework.boot', name: 'spring-boot-starter', version: '2.7.0'
將依賴打進(jìn)jar包中(不打進(jìn)去,插件如果有用到依賴,就會無法使用,找不到類)
// 頂層結(jié)構(gòu)
tasks.jar.configure {
duplicatesStrategy = org.gradle.api.file.DuplicatesStrategy.INCLUDE
from(configurations.runtimeClasspath.get().filter { it.name.endsWith("jar")}.map { zipTree(it) })
}
將倉庫改為阿里云倉庫
// 頂層結(jié)構(gòu)
repositories {
mavenLocal()
maven("https://maven.aliyun.com/nexus/content/repositories/central/")
mavenCentral()
}
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
public class MyAction extends AnAction {
@Override
public void actionPerformed(@NotNull AnActionEvent e) {
Project project = e.getProject();
Messages.showMessageDialog(project, "this is message content", "this message title", Messages.getInformationIcon());
}
}
src -> main -> resource -> META-INF -> plugin.xml
<idea-plugin>
<!-- 插件的id,該id是唯一的,插件的坐標(biāo)是一維的,只有一個id。這點(diǎn)和maven的不太一樣,maven的是二維坐標(biāo) -->
<id>com.geek45.plugin-demo</id>
<!-- 插件名字-->
<name>plugin demo</name>
<!-- 插件的描述,有固定格式,這里可以寫html代碼 -->
<description><![CDATA[
<h1> Demo plugin </h1>
測試插件 <br>
點(diǎn)擊插件可以彈出一個彈窗
<p>
plugin demo <br />
<b>
<a href="https://www.geek45.com">Website</a> |
<a href="https://github.com/xiaopangzhi795/plugin-demo">GitHub</a> |
</b>
</p>
]]>
</description>
<!-- 這里是插件依賴管理,和gradle的依賴不一回事,可以依賴其他的插件 -->
<depends>com.intellij.modules.platform</depends>
<!-- 拓展管理,后續(xù)的ui頁面會在這里配置,暫時用不到 -->
<extensions defaultExtensionNs="com.intellij">
</extensions>
<!-- action配置,按鈕展示在哪里需要在這配置 -->
<actions>
<action class="com.geek45.action.MyAction" id="myAction" text="action" description="this is action demo" >
<!-- 將插件放在Tools菜單中的first位置。 -->
<add-to-group group-id="ToolsMenu" anchor="first" />
</action>
</actions>
</idea-plugin>
gradle中,運(yùn)行jar命令,就可以把插件打成jar包,在項(xiàng)目根目錄中,有build目錄,libs中會有打好的jar包。
plugin中,選擇本地安裝,然后選擇剛才打好的jar包,就可以把插件安裝到自己的idea中。
打包安裝太麻煩了,可以選擇本地運(yùn)行的方式進(jìn)行調(diào)試。
選擇runIde,就可以本地運(yùn)行。該命令支持debug運(yùn)行,debug可以打斷點(diǎn)。
運(yùn)行該命令,會啟動一個新的idea,該idea中已經(jīng)安裝了你開發(fā)的插件。在該idea中可以直接使用插件,使用過程中,可以在項(xiàng)目里面斷點(diǎn)跟進(jìn)。
新的idea和正常idea操作是一樣的,可以打開一個測試code,來測試你的插件是否正常運(yùn)行。
來源:blog.csdn.net/smile_795/article/details/125470136
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。