59.SpringBoot与数据访问(整合mybatis,jpa)

目录

https://gitee.com/cxy-xupeng/spring-boot-test.git

一、连接上数据库并能访问

二、整合基本JDBC与数据源

三、整合mybatis

四、整合JPA


SpringBoot默认采用整合Spring Data的方式统一处理,添加大量自动配置,屏蔽很多设置。

git地址:

https://gitee.com/cxy-xupeng/spring-boot-test.git

一、连接上数据库并能访问

我们先来创建一个项目

选中web下面的spring web和SQL下面的JDBC和MySQL驱动

创建好项目之后,会发现我们引入了如下驱动:

并且我们还用之前的数据库:

目录:

application.properties我们这次不用,我们用application.yml:

spring:
  datasource:
    username: root
    password: xp880000
    url: jdbc:mysql://localhost:3306/xupeng?serverTimezone=UTC
    driver-class-name: com.mysql.cj.jdbc.Driver
测试类Springboot05DataJdbcApplicationTests
@SpringBootTest
@RunWith(SpringRunner.class)
public class Springboot05DataJdbcApplicationTests {

    @Autowired
    public DataSource dataSource;

    @Test
    public void contextLoads() throws SQLException {
        System.out.println(dataSource.getClass());

        Connection connection = dataSource.getConnection();
        System.out.println(connection);
        connection.close();
    }

}

注意:如果你启动报错如下

警告: Runner org.junit.internal.runners.ErrorReportingRunner (used on class com.xupeng.Springboot05DataJdbcApplicationTests) does not support filtering and will therefore be run completely.

import org.junit.Test;

记得把你的@Test对应的导包换成这个

结果:

我们在写一个类:

HelloController:

@Controller
public class HelloController {
    @Autowired
    JdbcTemplate jdbcTemplate;

    @ResponseBody
    @RequestMapping("/query")
    public Map<String,Object> map(){
        List<Map<String, Object>> list = jdbcTemplate.queryForList("select * from account");
        return list.get(0);
    }

}

数据库表account:

结果:

二、整合基本JDBC与数据源

先看一下目录结构:

1.引入druid数据源

pom.xml:

<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.8</version>
        </dependency>

application.yml:添加type设置数据源,并且在下面设置了druid的一些属性

spring:
  datasource:
    username: root
    password: xp880000
    url: jdbc:mysql://localhost:3306/xupeng?serverTimezone=UTC
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    #   数据源其他配置
    initialSize: 5
    minIdle: 5
    maxActive: 20
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true
    #   配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
    filters: stat,wall,slf4j
    maxPoolPreparedStatementPerConnectionSize: 20
    useGlobalDataSourceStat: true
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

DruidConfig:配置filter

package com.xupeng.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

@Configuration
public class DruidConfig {

    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druid(){
        return new DruidDataSource();
    }

    //配置Druid监控
    //1.配置一个管理后台的servlet
    @Bean
    public ServletRegistrationBean statViewServlet(){
        ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");

        Map<String,String> initParams = new HashMap<>();
        initParams.put("loginUsername","admin");
        initParams.put("loginPassword","123456");
        initParams.put("allow","");//默认就是允许所有访问
        initParams.put("deny","192.168.15.21");

        bean.setInitParameters(initParams);
        return bean;
    }

    //2.配置一个web监控的filter
    @Bean
    public FilterRegistrationBean webStatFilter(){
        FilterRegistrationBean bean = new FilterRegistrationBean();
        bean.setFilter(new WebStatFilter());

        Map<String,String> initParams = new HashMap<>();
        initParams.put("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");

        bean.setInitParameters(initParams);
        bean.setUrlPatterns(Arrays.asList("/*"));
        return bean;
    }
}

查看结果:我们先来到自身设置的管理后台servlet,登录名密码就是上述自己设置的

然后我们做了一个查询之后查看sql监控:

三、整合mybatis

先来看一下目录:

User

public class User {
    private Integer id;
    private String username;
    private String password;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

UserMapper

public interface UserMapper {
    List<User> getAllUser();
}

UserMapper.xml(xml文件最好就是放在resources下面,不要乱放)

<?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.xupeng.mapper.UserMapper">
    <resultMap id="BaseResultMap" type="com.xupeng.domain.User" >
        <id column="id" property="id" jdbcType="INTEGER" />
        <result column="username" property="username" jdbcType="VARCHAR" />
        <result column="password" property="password" jdbcType="VARCHAR" />
    </resultMap>

    <select id="getAllUser" resultMap="BaseResultMap">
        select * from user
    </select>
</mapper>

DruidConfig

@Configuration
public class DruidConfig {

    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druid(){
        return new DruidDataSource();
    }

    //配置Druid监控
    //1.配置一个管理后台的servlet
    @Bean
    public ServletRegistrationBean statViewServlet(){
        ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");

        Map<String,String> initParams = new HashMap<>();
        initParams.put("loginUsername","admin");
        initParams.put("loginPassword","123456");
        initParams.put("allow","");//默认就是允许所有访问
        initParams.put("deny","192.168.15.21");

        bean.setInitParameters(initParams);
        return bean;
    }

    //2.配置一个web监控的filter
    @Bean
    public FilterRegistrationBean webStatFilter(){
        FilterRegistrationBean bean = new FilterRegistrationBean();
        bean.setFilter(new WebStatFilter());

        Map<String,String> initParams = new HashMap<>();
        initParams.put("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");

        bean.setInitParameters(initParams);
        bean.setUrlPatterns(Arrays.asList("/*"));
        return bean;
    }
}

UserService

public interface UserService {
    List<User> getAllUser();
}

UserServiceImpl

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    UserMapper userMapper;

    @Override
    public List<User> getAllUser() {
        return userMapper.getAllUser();
    }
}

UserController

@Controller
public class UserController {
    @Autowired
    UserService userService;

    @RequestMapping(value = "getusers",method = RequestMethod.GET)
    @ResponseBody
    public List<User> getUsers(){
        List<User> userList = userService.getAllUser();
        return userList;
    }

}

Springboot05MybatisApplication

@SpringBootApplication
@MapperScan(value = "com.xupeng.mapper")
public class Springboot05MybatisApplication {

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

}

结果:

四、整合JPA

先来建一个项目:

我们先来看一下目录:

User:

package com.xupeng.entity;

import javax.persistence.*;

//使用JPA注解配置映射关系
@Entity
@Table(name = "user")//如果省略,默认表名就是user
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)//自增主键
    private Integer id;

    @Column(name = "username",length = 255)
    private String username;

    @Column //省略默认列名就是属性
    private String password;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

UserRepository:这里要注意, JpaRepository<User,Integer>后面的类型要指定,不然会报错。并且该类可以直接引用

package com.xupeng.repository;

import com.xupeng.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;

//继承JpaRepository来完成对数据库的操作
public interface UserRepository extends JpaRepository<User,Integer> {

}

UserController

package com.xupeng.controller;

import com.xupeng.entity.User;
import com.xupeng.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class UserController {
    @Autowired
    UserRepository userRepository;

    @GetMapping("/user")
    public List<User> getUser(){
        List<User> userList = userRepository.findAll();
        return userList;
    }
}

结果:

猜你喜欢

转载自blog.csdn.net/qq_40594696/article/details/111916898
今日推荐