Springboot学习教程(八)springboot整合数据层及事物管理

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/xuruanshun/article/details/102596287

目录

springboot整合数据层

1.springboot整合JdbcTemplate

2.springboot整合Mybatis

3.springboot整合Springjpa

4.事物管理


 

springboot整合数据层

我们介绍springboot整合JdbcTemplate,mybatis,springjpa三种方式。

演示springboot项目:

在本地mysql数据库test库下,创建 t_user表

CREATE TABLE `t_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(10) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
 

在application.yml文件中配置数据源

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: admin
    driver-class-name: com.mysql.jdbc.Driver

注意:springboot2.0以上版本,可能会出现jdbc驱动引发的问题。访问时报错:

Caused by: java.sql.SQLException: The server time zone value 'DST' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.

解决办法:

spring.datasource.url=jdbc:mysql://localhost:3306/test

加上

spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC

如果spring.datasource.ur如下:

spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&characterEncoding=utf-8

就是有多个参数需要以&分开时,需要将&要改为&

spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&characterEncoding=utf-8

所以,修改我们的application.yml文件

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC
    username: root
    password: admin
    driver-class-name: com.mysql.jdbc.Driver

 

1.springboot整合JdbcTemplate

1.引入依赖

<?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 https://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.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.itmayiedu</groupId>
    <artifactId>springboot-helloworld</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-helloworld</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-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- mysql依赖 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!-- jdbcTemplate 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.在services包下的UserService类

package com.itmayiedu.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    public void insertUser(String name, Integer age) {
        jdbcTemplate.update("insert into t_user values(null,?,?);", name, age);
    }
}

引入了JdbcTemplate依赖后,可以直接使用JdbcTemplate类操作数据库

3.在controller包下的UserController类

package com.itmayiedu.controller;

import com.itmayiedu.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("/insertUser")
    public String insertUser(String name,Integer age){
        userService.insertUser(name,age);
        return "SUCCESS";
    }
}

4.浏览器访问



5.数据库成功插入数据

2.springboot整合Mybatis

1.引入依赖

<?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 https://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.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.itmayiedu</groupId>
    <artifactId>springboot-helloworld</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-helloworld</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-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- lombok依赖 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <!-- mysql依赖 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!-- mybatis依赖 -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.1.1</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.在entity包下的UserEntity类

package com.itmayiedu.entity;

import lombok.Data;

import javax.persistence.*;

@Data
public class UserEntity {

    private Integer id;
    private String name;
    private Integer age;
}

3.在mapper包下的UserMapper接口

package com.itmayiedu.mapper;

import com.itmayiedu.entity.UserEntity;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

public interface UserMapper {

    @Select("SELECT * FROM t_user WHERE NAME = #{name}")
    UserEntity findByName(@Param("name") String name);

    @Insert("INSERT INTO t_user(NAME, AGE) VALUES(#{name}, #{age})")
    int insert(@Param("name") String name, @Param("age") Integer age);
}

mapper接口上,可以添加@Mapper注解,那么启动类上就不需要单独添加注解,就可以扫描到。但这种情况,每个mapper都需要添加@Mapper注解,比较麻烦,所以我们一般不在mapper接口上添加@Mapper注解,而是在启动类上添加@MapperScan,定义扫描mapper包即可,即@MapperScan("com.itmayiedu.mapper")

4.service包下的UserService类

package com.itmayiedu.service;

import com.itmayiedu.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public void insertUser(String name, Integer age) {
        userMapper.insert(name,age);
    }
}

5.controller包下的UserController类

package com.itmayiedu.controller;

import com.itmayiedu.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("/insertUser")
    public String insertUser(String name,Integer age){
        userService.insertUser(name,age);
        return "SUCCESS";
    }
}

6.在启动类上添加@MapperScan注解,扫描mapper包下的接口

package com.itmayiedu;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.itmayiedu.mapper")
public class SpringbootHelloworldApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootHelloworldApplication.class, args);
    }

}

7.访问浏览器



8.数据库插入成功

3.springboot整合Springjpa

springjap 是对 hibernate 的封装

1.引入依赖

<?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 https://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.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.itmayiedu</groupId>
    <artifactId>springboot-helloworld</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-helloworld</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-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- lombok依赖 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <!-- mysql依赖 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!-- springjap依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
    
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.entity包下的UserEntity类

package com.itmayiedu.entity;

import lombok.Data;

import javax.persistence.*;

@Data
@Entity(name = "t_user")
public class UserEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column(name = "name")
    private String name;

    @Column(name = "age")
    private Integer age;
}

注意:springboot开发时,一定要注意注解不能缺少

3.dao包下的UserDao接口

package com.itmayiedu.dao;

import com.itmayiedu.entity.UserEntity;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserDao extends JpaRepository<UserEntity, Integer> {
}

dao接口需要继承springjpa的JpaRespository类,里面提供了增删改查功能。

4.service包的UserService类

package com.itmayiedu.service;

import com.itmayiedu.dao.UserDao;
import com.itmayiedu.entity.UserEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Autowired
    private UserDao userDao;

    public void insertUser(String name, Integer age) {
        UserEntity userEntity = new UserEntity();
        userEntity.setName(name);
        userEntity.setAge(age);
        userDao.save(userEntity);
    }
}

5.controller包下的UserController类

package com.itmayiedu.controller;

import com.itmayiedu.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("/insertUser")
    public String insertUser(String name,Integer age){
        userService.insertUser(name,age);
        return "SUCCESS";
    }
}

6.启动类上添加注解:

@EnableJpaRepositories("com.itmayiedu.dao")     扫dao包

@EntityScan("com.itmayiedu.entity")                      扫entity包

package com.itmayiedu;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

@SpringBootApplication
@EnableJpaRepositories("com.itmayiedu.dao")
@EntityScan("com.itmayiedu.entity")
public class SpringbootHelloworldApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootHelloworldApplication.class, args);
    }

}

7.浏览器访问



8.数据库添加成功

4.事物管理

Springboot默认集成事物,主要在方法上加上@Transactional即可使用事物 

 

我们以整合mybatis的代码为案例

1.UserService类:

package com.itmayiedu.service;

import com.itmayiedu.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public void insertUser(String name, Integer age) {
        userMapper.insert(name,age);
        int i = 1/0;
        userMapper.insert(name,age);
    }
}

2.浏览器访问后,查看数据库

结果:没有事物情况下,插入完第一条之后,出现错误,没有回滚,数据库就有了一条数据

3.添加事物@Transactional

package com.itmayiedu.service;

import com.itmayiedu.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    @Transactional
    public void insertUser(String name, Integer age) {
        userMapper.insert(name,age);
        int i = 1/0;
        userMapper.insert(name,age);
    }
}

4.浏览器访问后,再次查看数据库

结果:有事物情况下,插入完第一条之后,出现错误,回滚,数据库就一条数据都没有,添加事物成功。

猜你喜欢

转载自blog.csdn.net/xuruanshun/article/details/102596287
今日推荐