SpingBoot

SpingBoot

创建项目步骤

  • 创建项目步骤:(必须确保网络能正常访问)
    1.File->new ->module
    2.选择spring initializr
    3.配置项:
     1.group name(默认包)
     2.name(发布包的名称)
     3.type(maven项目)
     4.packaging(打包方式,jar,war)
    
    4.选择需要的依赖,选中的依赖会自动配置到pom.xml文件中,也可以手动配置
    5.修改pom.xml文件
     1.修改jdk版本为本机环境对应的版本
     2.修改打包方式
     3.添加需要的依赖
     4.配置web路径,资源路径
    
    6.启动项目(找到BootdemoApplication类)

SpingBoot整合mybatis

  • 修改pom.xml

1.添加Mybatis和Mysql依赖


org.mybatis.spring.boot
mybatis-spring-boot-starter
1.2.0



mysql
mysql-connector-java
5.1.39

2.修改application.properties
SpringBoot配置数据源
spring.datasource.driver-class-name= com.mysql.jdbc.Driver
spring.datasource.url= jdbc:mysql://192.168.0.188:3306/boot?useUnicode=truecharacterEncoding=utf8& useSSL=false
spring.datasource.username= root
spring.datasource.password= 11111111
3.配置扫描实体类和配置扫描 映射文件
mybatis-plus.type-aliases-package=com.example.luo.entity
mybatis-plus.mapper-locations=classpath*:/mapper/*.xml
4.配置扫描 dao
只需要在 SpringBoot启动 main方法中添加注解 @MapperScan 扫描Dao 组件
//配置mybatis dao所在的包
@MapperScan(“com.lgr.bootdemo1.dao”)
//启动类注解,包含main方法的类要添加该注解,作为程序的入口
@SpringBootApplication
public class Bootdemo1Application {
public static void main(String[] args) {
SpringApplication.run(Bootdemo1Application.class, args);
}
}
5.创建数据库表
6.创建实体类
注意:实体类路基需和第三步配置的包路径一致。
7.创建dao接口
注意:dao接口需和第四步创建的包路径下
8.创建dao接口映射文件(.xml编写简便的sql语句)
注意:接口映射文件必须配置在第三步配置路径下
9.在项目的test文件夹下项目包里有一个测试类
导入实体类如:
@Autowired
BatchDAO batchDAO;
编写测试类,选中运行
@Test
void contextLoads() {
BatchVo batchVo = new BatchVo();
batchVo.setBatchId(0);
batchVo.setBatchName(“2024暑假社会实践”);
batchVo.setState(1);
batchVo.setRemark(“”);
batchDAO.insert(batchVo);
}


SpringBoot 整合 SpringMVC

  1.在pom文件中添加
  <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  -----------------------------------------------------------
  spring-boot-starter-web包自动帮我们引入了web模块开发需要的相关jar包
  此 starter pom 内嵌tomcat、servlet、SpringMVC 依赖。
  启动后会默认启动tomcat 占用8080端口
  没有加此依赖SpringBoot 不能启动 tomcat容器。
  -----------------------------------------------------------
  spring-boot-starter-web 所做的事
  自动配置内嵌Servlet 容器 tomcat
  自动配置http编码 utf-8
  自动配置SpringMVC
  自动配置文件上传(文件上传大小限制)
  ------------------------------------------------------------
  添加完spring-boot-starter-web 依赖 就可以使用SpringMVC的注解
  @Controller 表示这是一个控制层bean
  @RequestMapping  处理请求地址映射注解
  @GetMapping  使用get 方式处理请求地址映射注解
  @PostMapping  使用post 方式处理请求地址映射注解
  @ResponseBody  设置JSON格式响应
  注意:此时没有配置视图页面,只能显示html页面,不能解析JSP或者thymeleaf 等模板引擎。
        添加@ResponseBody 注解可以返回JSON格式数据

SpringBoot 返回JSON数据
创建IndexController(控制器)
注意:IndexController 一定要创建在SpringBoot 启动main方法同级,或者下级,不然扫描不到Controller
使用方法:和SpringMVC 没有区别
项目启动:和普通的web项目启动不同,在SpringBoot中,启动web项目也是启动main方法,和普通的java项目没有区别!
访问:http://localhost:8080/getMapJSON 得到json数据。

  @GetMapping("/json")
  @ResponseBody
  public  Map json(){
      Map<String,Object> map = new HashMap<String,Object>();
          map.put("值1","1");
          map.put("值2","2");
      return map;
  }

SpringBoot 整合 JSP

修改pom.xml添加依赖,修改打包信息
修改application.properties 配置文件
添加webapp文件夹,添加WEB-INF文件夹
修改idea web项目配置
修改Controller
添加jsp页面

1.修改pom.xml 增加依赖

<!-- jsp支持 -->
<dependency>
  <groupId>org.apache.tomcat.embed</groupId>
  <artifactId>tomcat-embed-jasper</artifactId>
</dependency>

<!-- jstl标签库 -->
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>jstl</artifactId>
</dependency>

2.修改pom.xml修改项目打包设置

      <build>
       <plugins>
       <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <!-- 默认版本和SpringBoot版本一致,
            使用高版本的打包方式,不能正确打包。 -->
        <version>1.4.2.RELEASE</version>
       </plugin>
       </plugins>
      <resources>

      <!-- 打包时将jsp文件拷贝到META-INF目录下-->

      <resource>
        <!-- 指定处理哪个目录下的资源文件 -->
        <directory>${basedir}/src/main/webapp</directory>
        <!--注意此次必须要放在此目录下才能被访问到-->
        <targetPath>META-INF/resources</targetPath>
        <includes>
            <include>**/**</include>
        </includes>
      </resource>

      <resource>
        <directory>src/main/resources</directory>
        <includes>
            <include>**/**</include>
        </includes>
      </resource>
  </resources>
</build>

3.修改application.properties 配置文件

spring.mvc.view.suffix=.jsp
spring.mvc.view.prefix=/WEB-INF/jsp/

4.添加webapp文件夹

1、在src --> main 下添加webapp文件夹
2、在webapp下添加WEB-INF文件夹
3、在WEB-INF下添加jsp文件夹
4、在jsp文件夹下添加hello.jsp
5、配置idea指定WEB目录

控制器传递数据的六种方式

1.Map
   @GetMapping("/map")
   public String getMap(Map map){
    map.put("msg1","map对象返回的值");
    return "test";
   }

2.Model
      @GetMapping("/model")
public String getModel(Model model){
    model.addAttribute("msg2","Model对象返回的值");
    return "test";
}

3.ModelMap
      @GetMapping("/modelMap")
public String getModelMap(ModelMap model){
    model.addAttribute("msg3","ModelMap对象返回的值");
    return "test";
}

4.ModelAndView
   @GetMapping("/modelAndView")
public ModelAndView getModelMap(){
    ModelAndView mv = new ModelAndView();
    //设置返回值
    mv.addObject("msg4","ModelAndView对象返回的值");
    //设置页面名称
    mv.setViewName("test");
    return mv;
}

5.servlet的返回方式
   @GetMapping("/request")
    public String getRequest(HttpServletRequest request, HttpServletResponse response){
    //设置返回值
    request.setAttribute("msg5","request对象返回的值");
    return "test";
}

6.返回JSON格式数据需要使用@ResponseBody注解
@GetMapping("/json")
@ResponseBody
public BatchVo getJson(){
    BatchVo batchVo = new BatchVo();
    batchVo.setBatchId(0);
    batchVo.setBatchName("2024暑假社会实践");
    batchVo.setState(1);
    batchVo.setRemark("");
    return batchVo;
}

控制器接收前端数据的六种方式

方法一:

  前端:
      function login(){
        var user = $("#userName").val();
        var pass = $("#password").val();
        if(user==""){
            alert("请输入用户名称");
            //设置焦点
            $("#userName").focus();
            return false;
        }
        if(pass==""){
            alert("密码不能为空");
            //设置焦点
            $("#password").focus();
            return false;
        }
        //使用jquery的post方法提交数据
        $.post(
           '/login/login',
            {
                'userName': user,
                'password':pass
            },
            //回调函数,接收后端返回的值,data变量就是后端返回的值
            function(data){
                alert(data.userName);
            }
        );
        return true;
    }
    控制器:
      //jquery的post方法提交数据
      @PostMapping("/login")
      @ResponseBody
      public UserVo login(UserVo userVo){
          System.out.println(userVo);
          return userVo;
      }

方法二:

  前端:
        function login1(){
        var user = $("#userName").val();
        var pass = $("#password").val();

        if(user==""){
            alert("请输入用户名称");
            //设置焦点
            $("#userName").focus();
            return false;
        }
        if(pass==""){
            alert("密码不能为空");
            //设置焦点
            $("#password").focus();
            return false;
        }
        //使用jquery的post方法提交数据
        $.get(
            '/login/login1?userName=' + user + '&password=' + pass,
            //回调函数,接收后端返回的值,data变量就是后端返回的值
            function(data){
                alert(data.userName);
            }
        );
        return true;
    }
    控制器:
          //jquery的get方法提交数据
          @GetMapping("/login1")
          //login/login1?userName=张三&password=1234
          //使用@RequestParam注解接收参数,表单返回的变量与控制器的变量名称不一致时,可以转换
          @ResponseBody
          public UserVo login1(@RequestParam("userName") String name,@RequestParam("password") String pass){
              UserVo userVo = new UserVo();
              userVo.setUserName(name);
              userVo.setPassword(pass);
              System.out.println(userVo);
              return userVo;
          }

方法三:

  前端:
      function login2(){
        var user = $("#userName").val();
        var pass = $("#password").val();

        if(user==""){
            alert("请输入用户名称");
            //设置焦点
            $("#userName").focus();
            return false;
        }
        if(pass==""){
            alert("密码不能为空");
            //设置焦点
            $("#password").focus();
            return false;
        }
        //使用jquery的post方法提交数据
        $.get(
            '/login/login2?userName=' + user + '&password=' + pass,
            //回调函数,接收后端返回的值,data变量就是后端返回的值
            function(data){
                alert(data.userName);
            }
        );
        return true;
    }
    控制器:
        //jquery的get方法提交数据
        @GetMapping("/login2")
        //login/login2?userName=张三&password=1234
        //使用@RequestParam注解接收参数,表单返回的变量与控制器的变量名称不一致时,可以转换
        @ResponseBody
        public UserVo login2(String userName,String password){
            UserVo userVo = new UserVo();
            userVo.setUserName(userName);
            userVo.setPassword(password);
            System.out.println(userVo);
            return userVo;
        }

方法四:

  前端:
     function login3(){
        var user = $("#userName").val();
        var pass = $("#password").val();

        if(user==""){
            alert("请输入用户名称");
            //设置焦点
            $("#userName").focus();
            return false;
        }
        if(pass==""){
            alert("密码不能为空");
            //设置焦点
            $("#password").focus();
            return false;
        }
        //使用jquery的post方法提交数据
        $.get(
            '/login/login3/' + user + '/' + pass,
            //回调函数,接收后端返回的值,data变量就是后端返回的值
            function(data){
                alert(data.userName);
            }
        );
        return true;
    }
    控制器:
         //jquery的get方法提交数据
        @GetMapping("/login3/{userName}/{password}")
        //login/login3/张三/1234
        //使用@RequestParam注解接收参数,表单返回的变量与控制器的变量名称不一致时,可以转换
        @ResponseBody
        public UserVo login3(@PathVariable("userName") String userName,@PathVariable("password") String password){
            UserVo userVo = new UserVo();
            userVo.setUserName(userName);
            userVo.setPassword(password);
            System.out.println(userVo);
            return userVo;
        }

方法五:

  前端:
    function login4(){
        var user = $("#userName").val();
        var pass = $("#password").val();

        if(user==""){
            alert("请输入用户名称");
            //设置焦点
            $("#userName").focus();
            return false;
        }
        if(pass==""){
            alert("密码不能为空");
            //设置焦点
            $("#password").focus();
            return false;
        }
        return true;
    }
    控制器:
            @PostMapping("/login4")
      public String login4(UserVo userVo){
          System.out.println(userVo);
          return "index";
      }
        //接收表单提交数据(效果与login4一样)
    @PostMapping("/login5")
    public String login5(HttpServletRequest request, HttpServletResponse response){
        UserVo userVo = new UserVo();
        userVo.setUserName(request.getParameter("userName"));
        userVo.setPassword(request.getParameter("password"));
        System.out.println(userVo);
        return "index";
    }

SpringBoot整合使用druid连接池

1.添加MybatisPlusConfig类

   //启动事务
   @EnableTransactionManagement
        /*
            配置文件
            使用了@Configuration注解的类就是配置类,程序启动时系统会自动执行,
            该注解的作用就是把以往的xml文件转换为java类
            @Bean注解,就是配置一个bean,相当于mvc项目中的xml配置文件中bean
        */
        @Configuration
        public class MybatisPlusConfig {
            /**
            * 分页插件,创建一个分页的拦截器
            */
            @Bean
            public PaginationInterceptor paginationInterceptor() {
                return  new PaginationInterceptor();
            }
        }

2.添加以下依赖

<!-- mysql驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.48</version>
    </dependency>
    <!-- mybatis-plus -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.3.1</version>
    </dependency>
    <!--druid连接池-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.1.20</version>
    </dependency>

3.添加配置

#所有参数的配置,冒号后面必须有一个空格
        #配置tomcat的端口
        server:
        port: 8888
        servlet:
            #项目访问路径
            context-path: /
            #session的有效期为30分钟,m分钟,s秒
            session:
            timeout: 30m
        #数据源配置
        spring:
        datasource:
            driver-class-name: com.mysql.jdbc.Driver
            url: jdbc:mysql://localhost:3306/boot?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true
            username: root
            password: 11111111
            druid:
            #配置监控url
            stat-view-servlet:
                #连接池的监控地址
                url-pattern: /druid/*
                #登录名
                login-username: root
                #登录密码
                login-password: 123456
                enabled: true
            #初始值
            initial-size: 10
            #最大连接数
            max-active: 100
            #最小连接数
            min-idle: 10
            #最大等待时间
            max-wait: 60000
            pool-prepared-statements: true
            max-pool-prepared-statement-per-connection-size: 20
            time-between-eviction-runs-millis: 60000
            min-evictable-idle-time-millis: 300000
            #validation-query: SELECT 1 FROM DUAL
            validation-query: SELECT 1 'X'
            test-while-idle: true
            test-on-borrow: false
            test-on-return: false
            filters: stat,wall,slf4j
        mvc:
            #配置jsp文件存放的根路径
            view:
            #后缀
            suffix: .jsp
            #前缀
            prefix: /WEB-INF/jsp/
        http:
            #设置字符编码
            encoding:
            charset: UTF-8

#mybatis配置(dao在启动类用@MapperScan注解配置)
mybatis-plus:
#mybatis的映射文件路径,放在resources的子文件夹内
mapper-locations: classpath:mapper/*.xml
#配置别名,javabean的包路径
type-aliases-package: com.lgr.bootdemo1.entity
global-config:
    #数据库相关配置
    db-config:
    #主键类型  AUTO:"数据库ID自增", INPUT:"用户输入ID", ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";
    id-type: AUTO
    #字段策略 IGNORED:"忽略判断",NOT_NULL:"非 NULL 判断"),NOT_EMPTY:"非空判断"
    field-strategy: NOT_NULL
    #驼峰下划线转换
    column-underline: true
    #逻辑已删除值(默认为 1)
    logic-delete-value: 1
    #逻辑未删除值(默认为 0)
    logic-not-delete-value: 0
    banner: false
configuration:
    # 是否开启自动驼峰命名规则映射:从数据库列名到Java属性驼峰命名的类似映射
    map-underscore-to-camel-case: true
    cache-enabled: false
    call-setters-on-nulls: true
    jdbc-type-for-null: 'null'
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

3.添加dao包新建BatchDAO类继承bean(extends BaseMapper) 添加service包下面添加impl包
4.service添加BatchServiceDAO类继承bean(extends IService)
5.impl包添加BatchServiceDaoImpl继承service包下面的BatchServiceDAO类(implements BatchServiceDAO )
6.BatchServiceDaoImpl引入dao

@Autowired
BatchDAO batchDAO;

7.右键生成方法注意添加启动事务@Transactional(查询操作外)
比如无条件查询表

@Override
public List<User> list() {
    return userDao.selectList(null);
}

8.添加控制器引入

@Autowired
private UserServiceDao userServiceDao;
实现方法
 @RequestMapping("/list")
public List<User> getEricUserList(){
    return userServiceDao.list();
}
页面通过项目ip/druid/访问监控页面