简单的Spring Boot项目——实现连接Mysql数据库

一、创建Spring Boot项目

参考:使用IntelliJ IDEA创建简单的Spring Boot项目

二、数据库、表的创建

三、项目开发

3.1 pom.xml文件配置

<?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.2.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.yh</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</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>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>jquery</artifactId>
            <version>3.4.1</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.0</version>
        </dependency>

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

        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.4</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
    </dependencies>

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

</project>

3.2 mybatis-config.xml文件配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 配置全局属性 -->
    <settings>
        <setting name="useGeneratedKeys" value="true"/>
        <!--别名-->
        <setting name="useColumnLabel" value="true"/>
        <!--名称转换-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
</configuration>

3.3 dao配置类datasource和sessionfactory

DataSourceConfiguration.java

package com.yh.demo.config.dao;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.beans.PropertyVetoException;

@Configuration
// 配置mybaits的mapper扫描路径
@MapperScan("com.yh.demo.dao")
public class DataSourceConfiguration {
    @Value("${jdbc.driver}")
    private String jdbcDriver;
    @Value("${jdbc.url}")
    private String jdbcUrl;
    @Value("${jdbc.username}")
    private String jdbcUser;
    @Value("${jdbc.password}")
    private String jdbcPassword;

    @Bean("dataSource")
    public ComboPooledDataSource createDataSource() throws PropertyVetoException {
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setDriverClass(jdbcDriver);
        dataSource.setJdbcUrl(jdbcUrl);
        dataSource.setUser(jdbcUser);   
        dataSource.setPassword(jdbcPassword);
        // 关闭连接后不自动commit
        dataSource.setAutoCommitOnClose(false);
        return dataSource;
    }
}
扫描二维码关注公众号,回复: 8365885 查看本文章

SessionFactoryConfiguration.java

package com.yh.demo.config.dao;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;
import java.io.IOException;

@Configuration
public class SessionFactoryConfiguration {

    @Value("${mybatis_config_file}")
    private String mybatisConfigFilePath;
    @Value("${entity_package}")
    private String entityPackage;
    @Value("${mapper_path}")
    private String mapperPath;

    @Autowired
    @Qualifier("dataSource")
    private DataSource dataSource;

    @Bean("sqlSessionFactory")
    public SqlSessionFactoryBean createFactory() throws IOException {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setConfigLocation(new ClassPathResource(mybatisConfigFilePath));
        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        String packageSearchPath = PathMatchingResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + mapperPath;
        sqlSessionFactoryBean.setMapperLocations(resolver.getResources(packageSearchPath));
        sqlSessionFactoryBean.setDataSource(dataSource);
        sqlSessionFactoryBean.setTypeAliasesPackage(entityPackage);
        return sqlSessionFactoryBean;
    }
}

3.4 dao和mapper的编写

RunoobDao.java

package com.yh.demo.dao;

import com.yh.demo.entity.Runoob;

import java.util.List;

public interface RunoobDao {
    List<Runoob> queryRunoob();
    int insertRunoob(Runoob runoob);
}

RunoobDao.xml

<?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.yh.demo.dao.RunoobDao">
    <select id="queryRunoob" resultType="com.yh.demo.entity.Runoob">
        select* from runoob_tbl
    </select>

    <insert id="insertRunoob" parameterType="com.yh.demo.entity.Runoob">
        insert into runoob_tbl(runoob_title)values (#{runoobTitle})
    </insert>
</mapper>

3.5 service配置类TransactionManagementConfiguration

TransactionManagementConfiguration.java

package com.yh.demo.config.service;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.TransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.TransactionManagementConfigurer;

import javax.sql.DataSource;

@Configuration
@EnableTransactionManagement
public class TransactionManagementConfiguration implements TransactionManagementConfigurer {

    @Autowired
    private DataSource dataSource;

    @Override
    public TransactionManager annotationDrivenTransactionManager() {
        return new DataSourceTransactionManager(dataSource);
    }
}

3.6 service层接口和实现

RunoobService.java

package com.yh.demo.service;

import com.yh.demo.entity.Runoob;

import java.util.List;

public interface RunoobService {
    List<Runoob> queryRunoob();
    int insertRunoob(Runoob runoob);
}

RunoobServiceImpl.java

package com.yh.demo.service.serviceImpl;

import com.yh.demo.dao.RunoobDao;
import com.yh.demo.entity.Runoob;
import com.yh.demo.service.RunoobService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
public class RunoobServiceImpl implements RunoobService {
    @Autowired
    private RunoobDao runoobDao;

    @Override
    public List<Runoob> queryRunoob() {
        return runoobDao.queryRunoob();
    }

    @Transactional
    @Override
    public int insertRunoob(Runoob runoob) {
        return runoobDao.insertRunoob(runoob);
    }
}

3.7 controller方法实现

RunoobController.java

package com.yh.demo.controller.data;

import com.yh.demo.entity.Runoob;
import com.yh.demo.service.RunoobService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/runoob")
public class RunoobController {
    @Autowired
    private RunoobService runoobService;

    @RequestMapping(value = "/query",method = RequestMethod.GET)
    public Map<String,Object> queryRunoob(HttpServletResponse response){
        response.setHeader("Access-Control-Allow-Origin", "http://localhost:8080");
        response.setHeader("Access-Control-Allow-Methods", "GET,POST");
        Map<String,Object> modelMap = new HashMap<String,Object>();
        List<Runoob> runoobs =  runoobService.queryRunoob();
        modelMap.put("runoobList",runoobs);
        System.out.println("========");
        return modelMap;
    }

    @RequestMapping(value = "/insert",method = RequestMethod.POST)
    public Map<String,Object> insertRunoob(@RequestBody Runoob runoob){
        Map<String,Object> modelMap = new HashMap<String, Object>();
        modelMap.put("success",runoobService.insertRunoob(runoob));
        return modelMap;
    }
}

四、其他文件

4.1 application.properties

server.port=8082
server.servlet.context-path=/demo

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/book?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
jdbc.username=root
jdbc.password=12345yehuan

#mybatis
mybatis_config_file=mybatis-config.xml
mapper_path=/mapper/**.xml
entity_package=com.yh.demo.entity

4.2 实体类

Runoob.java

package com.yh.demo.entity;

public class Runoob {
    private int runoobId;
    private String runoobTitle;

    public int getRunoobId() {
        return runoobId;
    }

    public void setRunoobId(int runoobId) {
        this.runoobId = runoobId;
    }

    public String getRunoobTitle() {
        return runoobTitle;
    }

    public void setRunoobTitle(String runoobTitle) {
        this.runoobTitle = runoobTitle;
    }

    @Override
    public String toString() {
        return "Runoob{" +
                "runoobId=" + runoobId +
                ", runoobTitle='" + runoobTitle + '\'' +
                '}';
    }
}

4.3 项目结构

五、dao测试

选定dao接口名 - alt+enter - create test -选择需要测试的方法,在test下的对应路径下就会生成对应的测试类,如下所示:

RunoobDaoTest.java

package com.yh.demo.dao;

import com.yh.demo.entity.Runoob;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

import static org.junit.jupiter.api.Assertions.*;

@RunWith(SpringRunner.class)
@SpringBootTest
public class RunoobDaoTest {

    @Autowired
    private RunoobDao runoobDao;

    @Test
    public void queryRunoob() {
        List<Runoob> runoobs = runoobDao.queryRunoob();
        System.out.println(runoobs.toString());
        assertEquals(1,runoobs.size());
    }

    @Test
    public void insertRunoob() {
        Runoob runoob = new Runoob();
        runoob.setRunoobTitle("第二条");
        int result = runoobDao.insertRunoob(runoob);
        assertEquals(1,result);
    }
}

猜你喜欢

转载自www.cnblogs.com/YeHuan/p/12120846.html