springboot项目创建流程及连接数据库

springboot项目创建流程

以idea为例 :

  1. 新建一个maven项目

  2. 在pom.xml文件里面添I加springboot父依赖,表明这是一个springboot项目(需添加version版本信息)

    <!-- 定义公共资源版本 -->
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.1.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
  3. 再添加一个web启动器依赖,这里不需要版本信息,因为在父依赖中已经将所有的版本信息都配置好了,使用统一的版本。(这里面集成了tomcat)

  4.  <!-- 包含 mvc,aop 等jar资源 -->
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
  5. 定义一个启动类,因为集成了tomcat,没有启动的地方,需自己定义启动的地方。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
    //启动类 固定写法
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}

  1. 之后就可定义Controller,service , mapper等
package Controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("test")
public class TestController {
    @RequestMapping("hello")
    @ResponseBody
    public String sayTest () {
        return "hello world" ;
    }
}

  1. 然后在启动类运行,即可在网页访问(http://localhost:8080/test/hello)。

    这里注意一个问题:

    你的项目一定不要直接放在最上层的那个Java目录下,可以用一个包包装,不然tomcat启动不了。

springboot中的java配置

springMVC的方式:

  1. 在resources(资源文件)中新建一个jdbc.properties
jdbc.driverClassName = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/test
jdbc.username = root
jdbc.password = root
  1. 新建一个jdbcConfig类(配置类),添加@Configuration

    在类中添加属性 url、username、paassword、driverClassName

    在类添加注释@PropertySource(“classpath : jdbc.properties”)

    给属性添加@Value(“${jdbc.url}”)等

  2. 在定义一个getDataSource方法,将属性注入到DataSource中,将其返回出去。@bean就会将其注入IOC容器。

代码如下:

package Config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import javax.sql.DataSource;

@Configuration
@PropertySource("classpath : jdbc.properties")
public class jdbcConfig {
    @Value("${jdbc.driverClassName}")
    private String driverClassName;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;


    /**
     * 获取连接,返回
     * @return
     */
    @Bean
    public DataSource getDataSource () {
        //注意添加druid数据源(百度搜索maven)
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }
}

  1. 在Controller中定义一个pravite DataSource ds;在这个属性上添加@Autowired,从IOC容器获取DataSource对象,可以打印测试。

springboot:

  1. 新建一个application.yml文件
jdbc: 
	driverClassName: com.mysql.jdbc.Driver
	url: jdbc:mysql://localhost:3306/test
	username: root
	password: root
	
---------------------------------------------------------------
这里面还可以配端口、路径
server: 
	port: 8089
	servlet: 
		path: /
spring: 
	datasource: 
		driverClassName: com.mysql.jdbc.Driver
		url: jdbc:mysql://localhost:3306/test
		username: root
		password: root
		

连接数据库:添加两个依赖

  1. spring整合jdbc的
  2. java连接数据库的
		<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

新建一个jdbcConfig2类:

package Config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

@Configuration
public class jdbcConfig2 {
    @Bean
    @ConfigurationProperties(prefix = "datasource")//自动注入
    public DataSource getDataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        return dataSource;
    }
}

这样也能获取连接。

springboot约定在resource目录下新建static文件夹下放img、js、css等静态文件

springboot拦截器

新建interceptor包

新建LoginInterceptor类 实现HandlerInterceptor接口

重写方法:

1、preHandle(……) 方法
该方法的执行时机是,当某个 URL 已经匹配到对应的 Controller 中的某个方法,且在这个方法执行之前。所以 preHandle(……) 方法可以决定是否将请求放行,这是通过返回值来决定的,返回 true 则放行,返回 false 则不会向后执行。

2、postHandle(……) 方法
该方法的执行时机是,当某个 URL 已经匹配到对应的 Controller 中的某个方法,且在执行完了该方法,但是在 DispatcherServlet 视图渲染之前。所以在这个方法中有个 ModelAndView 参数,可以在此做一些修改动作。

3、afterCompletion(……) 方法
顾名思义,该方法是在整个请求处理完成后(包括视图渲染)执行,这时做一些资源的清理工作,这个方法只有在 preHandle(……) 被成功执行后并且返回 true 才会被执行。

LoginInterceptor代码:

public class LoginInterceptor implements HandlerInterceptor {

    private static final Logger logger = LoggerFactory.getLogger(LoginInterceptor.class);

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        HandlerMethod handlerMethod = (HandlerMethod) handler;
        Method method = handlerMethod.getMethod();
        String methodName = method.getName();
        logger.info("====拦截到了方法:{},在该方法执行之前执行====", methodName);
        // 返回 true 才会继续执行,返回 false 则取消当前请求
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        logger.info("执行完方法之后进执行(Controller方法调用之后),但是此时还没进行视图渲染");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        logger.info("整个请求都处理完咯,DispatcherServlet也渲染了对应的视图咯,此时我可以做一些清理的工作了");
    }
}

拦截器做好了,再进行配置,使其在spring中生效。

拦截器配置

因为是配置拦截器,属于配置,写在Config包下

新建一个MvcConfig.java

@Component    ????

@Configuration
public class MvcConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 实现 WebMvcConfigurer 不会导致静态资源被拦截
        // 这里配置的是全路径拦截
        registry.addInterceptor(new MvcConfig()).addPathPatterns("/**");
    }
}

然后,启动。

springboot整合Mybatis

  1. 首先导入mybatis的依赖:

    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>1.3.2</version>
    </dependency>
    
  2. 在application.yml文件中添加:

#配置别名
mybatis: 
	type-aliases-package: Springboot_demo01.pojo
  1. 添加通用mapper的依赖:

    <dependency>
        <groupId>tk.mybatis</groupId>
        <artifactId>mapper-spring-boot-starter</artifactId>
        <version>2.1.5</version>
    </dependency>
    
  2. 新建一个pojo包,在pojo里面创建一个对应的数据库对象实体类

    用@Table(name = “表名”)注解

    对象的属性必须用包装类

    主键用@Id注解 @GeneratedValue 自增长

    数据库里面的属性为下划线时,改为驼峰式命名 例: user_name 改为 userName

package Springboot_demo01.pojo;

import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Table(name = "test")
public class User {
    @Id
    @GeneratedValue
    private Long id;

    private String name;

    private String password;
}

  1. 在mapper层新建User Mapping接口继承Mapper<>.在启动器里面@MappingScan(“mapper”) 其意思为扫描mapper下的接口创建其实现类

  2. 在Controller层新建方法查询数据库

 	@GetMapping("/{id}")
	@ResponseBody
    public User queryUserById(@PathVariable("id") Long id){
        //@PathVariable 路径变量,获取传过来的id参数   
        User user = userService.selectUserById(id);
        return user;
    }
  1. 运行。

注:执行修改等操作须在service层的方法上添加@Transactional 手动注解开启事务

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值