zoukankan      html  css  js  c++  java
  • Spring全家桶之spring boot(三)

        spring boot集成mybatis

        众所周知,spring与springmvc可以无缝集成,而mybatis不是spring旗下的框架,因此需要进行配置,当然,这里的配置也是非常简单的。

        1、首先我们需要创建一个数据库表:

       CREATE TABLE `learnmybatis`.`t_student` (
      `id` INT NOT NULL AUTO_INCREMENT,
      `name` VARCHAR(20) NULL,
      `age` INT NULL,
      `score` DOUBLE NULL,
      PRIMARY KEY (`id`));  

        2、这里我们在Project中创建一个新的Model,创建模块时与之前不同的是我们需要勾选一些新的依赖,这样就不需要手动去添加了。

        

        

        

        勾选完之后pom.xml文件中会自动添加spring boot起步依赖、mybatis起步依赖、mysql驱动依赖、spring boot热部署依赖、lombok依赖,之后我们仍需手动添加alibaba的druid数据库连接池依赖

        <!-- 加载mybatis整合springboot -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
    
        <!-- MySQL的jdbc驱动包 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
    
        <!-- springboot 开发自动热部署 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- alibaba的druid数据库连接池 该依赖需要手动添加-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>

        3、在pom.xml文件build标签下添加如下代码(目的是将mybatis配置文件添加到target目录下,否则在运行mybatis的时候会报找不到xml文件的错误):

    <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
    </resources>

        pom.xml中我们加了让maven将xml文件也编译放到target目录下的代码,除了将mapper放到dao包下这种方式之外,还可以直接将mapper文件放到resources下。在resources下创建mappers目录,然后将mapper.xml文件放到这个目录下。(两种方法选其一即可,如果放在resources目录下要记得重新编译)

        修改application.properties配置文件,指定mapper文件路径,如果采用这种方法,则在pom.xml中删除上述resource中的配置: 

    #指定mapper文件的位置
    mybatis.mapper-locations=classpath:mappers/*.xml

        4、添加数据源相关配置,在application.properties配置文件中添加如下代码: 

    #指定mapper文件的位置
    mybatis.mapper-locations=classpath:com/scm/mybatis/mapper/*.xml
    #指定bean的位置
    mybatis.type-aliases-package=com.scm.mybatis.bean

    #数据源
    spring.datasource.username=root
    spring.datasource.password=
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    spring.datasource.url=jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
    spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

    #查看sql语句日志
    logging.level.com.monkey1024.mapper=debug

        注意:注意上面的serverTimezone=Asia/Shanghai,这里如果写成serverTimezone=UTC或者GMT的话,在插入或更新数据的时候,日期可能会有问题,因为我们中国所在的时区是东八区。

        5、 在创建bean目录,并在该目录下创建Student类

    package com.scm.mybatis.bean;
    
    public class Student {
    
            private Integer id;
    
            private String name;
    
            private Integer age;
    
            private Double score;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        public Double getScore() {
            return score;
        }
    
        public void setScore(Double score) {
            this.score = score;
        }
    }

        6、创建mapper目录,并在该目录下创建Mapper和dao接口

          分别创建StudentMapper.xml和StudentMapper类

    <?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.scm.mybatis.mapper.StudentMapper">
        <!--查询多条数据-->
        <select id="selectAllStudent" resultType="student">
            SELECT id,name,age,score FROM t_student
        </select>
    </mapper>
    package com.scm.mybatis.mapper;
    
    import com.scm.mybatis.bean.Student;
    import org.apache.ibatis.annotations.Mapper;
    
    import java.util.List;
    
    @Mapper//在dao接口上加入Mapper注解,这样springboot就可以扫描到
    public interface StudentMapper {
        List<Student> selectAllStudent();
    }

        我们在dao层的接口上添加了一个@Mapper注解,这样spring boot就可以扫描到该接口从而使用mybatis动态代理。除了这种方式之外还可以在spring boot的启动类上添加@MapperScan注解,这样就无需在dao层接口上添加@Mapper注解了。另一种方法如下(两种方法选其一即可)

    @SpringBootApplication
    @MapperScan("com.scm.mybatis.mapper")//扫描mapper文件
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    
    }

        

        7、创建service目录,并在该目录下分别创建StudentService接口和StudentServiceImpl实现类

    package com.scm.mybatis.service;
    
    import com.scm.mybatis.bean.Student;
    import java.util.List;
    
    public interface StudentService {
        List<Student> selectAllStudent();
    }
    package com.scm.mybatis.service;
    
    import com.scm.mybatis.bean.Student;
    import com.scm.mybatis.mapper.StudentMapper;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import java.util.List;
    
    @Service
    public class StudentServiceImpl implements StudentService{
        @Autowired
        private StudentMapper studentMapper;
        @Override
        public List<Student> selectAllStudent() {
            return studentMapper.selectAllStudent();
        }
    }

        8、创建controller目录,并在该目录下创建MybatisController类

    package com.scm.mybatis.controller;
    
    import com.scm.mybatis.service.StudentService;
    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;
    
    @Controller
    public class MybatisController {
    
        @Autowired
        private StudentService studentService;
    
        @RequestMapping("/find")
        @ResponseBody
        public Object findAllStudent() {
            return studentService.selectAllStudent();
        }
    }

        之后运行spring boot启动类,在浏览器中发送请求即可。

        spring boot中开启事务

        在spring boot中开启事务也非常简单通过下面两步即可:

        1、在入口类中使用注解 @EnableTransactionManagement 开启事务支持

    @SpringBootApplication
    @EnableTransactionManagement //开启事务支持
    public class Application {
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }

        2、在访问数据库的Service方法上添加注解 @Transactional 即可

    @Service
    @Transactional//开启事务
    public class StudentServiceImpl implements StudentService{
        @Autowired
        private StudentMapper studentMapper;
        @Override
        public List<Student> selectAllStudent() {
            return studentMapper.selectAllStudent();
        }
    }

        Lombok使用方法

       在创建项目的时候我们添加了lombok依赖,那么lombok到底有什么用呢?

       在之前所编写的代码中,我们写了很多bean,这里面加了很多set、get方法,这些方法冗余,但却也不可缺少。这里我们可以使用lombok包,通过该工具,就不用在bean源码中手动添加set、get方法了,除此之外equals,hashcode,toString方法也无需手动在源码中添加了。lombok会在生成的bean的class字节码中添加这些方法,在使用lombok之后,代码就清爽多了。

        1、检查pom.xml中是否存在lombok依赖,若存在则在idea中添加lombok插件,ctrl+alt+s打开设置,在Plugins中搜索lombok

        

        2、插件安装完成之后,在Student类上面加上@Data注解,然后set、get等方法就可以去掉了:

    package com.scm.mybatis.bean;
    
    import lombok.Data;
    
    @Data
    public class Student {
    
            private Integer id;
    
            private String name;
    
            private Integer age;
    
            private Double score;
    }

        这样我们的代码是不是看起来就简洁了许多呢,重新编译之后打开target目录进入bean包查看Student类会发现set、get、equals、toString、canEqual方法都已经自动写好了。

  • 相关阅读:
    Spark5
    Spark4
    Spark3
    冲刺周期二--站立会议01
    团队第一阶段绩效考核
    各个小组对“躲避小球”游戏的评价
    软件项目第一个Sprint评论
    丹佛机场行李处理系统
    冲刺周期一--站立会议07
    冲刺周期一--站立会议06
  • 原文地址:https://www.cnblogs.com/scm2019/p/11330232.html
Copyright © 2011-2022 走看看