码迷,mamicode.com
首页 > 数据库 > 详细

Springboot整合JDBC,MyBatis

时间:2020-11-13 13:13:52      阅读:28      评论:0      收藏:0      [点我收藏+]

标签:映射   init   键值   project   location   tco   bat   control   row   

一. Springboot整合JDBC

通过IDEA的Spring Initializr新建project或module,选择jdbc和mysql。
技术图片

项目就初始化好了
技术图片

配置pom.xml

<!--jdbc启动器-->
 	<dependency>
 		<groupId>org.springframework.boot</groupId>
 		<artifactId>spring-boot-starter-jdbc</artifactId>
 	</dependency>
 	<!--mysql驱动包-->
 	<dependency>
 		<groupId>mysql</groupId>
 		<artifactId>mysql-connector-java</artifactId>
 		<scope>runtime</scope>
 	</dependency>

配置application.yml

spring:
 datasource:
 	username: root
 	password: root
 	#mysql8版本以上的驱动包,需要指定以下时区
 	url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2B8
 	#mysql8版本以上指定新的驱动类
 	driver-class-name: com.mysql.cj.jdbc.Driver

在测试类中测试,完美运行,整合成功!

import org.junit.jupiter.api.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 javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

@RunWith(SpringRunner.class)
@SpringBootTest
class SpringBootDataApplicationTests {
 @Autowired
 DataSource dataSource;

 @Test
 public void contextLoads() throws SQLException{
 	//Springboot默认数据库连接池为com.zaxxer.hikari.HikariDataSource
 	System.out.println("datasource: " + dataSource.getClass());
 	Connection connection = dataSource.getConnection();
 	System.out.println(connection);
 	connection.close();
 }
}

二.Springboot整合JDBC+配置Druid数据库连接池

如果不用默认的数据库连接池,而是使用第三方连接池如Druid就这样做!
pom引入Driud依赖

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

application.yml引入其他配置

spring:
  datasource:
    username: root
    password: root
    #mysql8版本以上的驱动包,需要指定以下时区
    url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2B8
    #mysql8版本以上指定新的驱动类
    driver-class-name: com.mysql.cj.jdbc.Driver
    # 指定 Druid 数据源
    type: com.alibaba.druid.pool.DruidDataSource
    # 数据源其他配置, DataSourceProperties中没有相关属性,默认无法绑定
    initialSize: 8
    minIdle: 5
    maxActive: 20
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true

由于DataSourceProperties中没有相关属性,默认无法绑定,故自定义配置类,新建config文件夹,新建DruidConfig.java

/**
 * 绑定Druid相关信息
 *
 */
@Configuration
public class DruidConfig {


    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druid() {

        return new DruidDataSource();
    }


}

搞定!

三.Springboot整合MyBatis之注解开发

pom加入mybatis启动器

<!--mybatis启动器-->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.3.2</version>
		</dependency>

config文件夹下新建MyBatisConfig.java配置类,配置驼峰转换,因为一般数据库字段不区分大小写,所以一般使用下划线分割,比如user_id,但是在Java类中我们规范使用驼峰命名为userId,在不使用xml中resultMap标签的配置情况下,mybatis提供mapUnderscoreToCamelCase属性设置自动转换驼峰命名。

import org.mybatis.spring.boot.autoconfigure.ConfigurationCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * MyBatis的注解 版本相关配置类
 */
@Configuration
public class MyBatisConfig {

    @Bean
    public ConfigurationCustomizer configurationCustomizer() {
        ConfigurationCustomizer configurationCustomizer = new ConfigurationCustomizer(){
            @Override
            public void customize(org.apache.ibatis.session.Configuration configuration) {
                //开启驼峰命名方式
                configuration.setMapUnderscoreToCamelCase(true);
            }
        };
        return configurationCustomizer;
    }

}

新建数据层文件ProviderMapper

import com.mengxuegu.springboot.entities.Provider;
import org.apache.ibatis.annotations.*;

/**
 * 使用Mybatis注解版本
 */
//@Mapper //指定这是操作数据的Mapper
public interface ProviderMapper {

    @Select("select * from provider where pid=#{pid}")
    Provider getProvierByPid(Integer pid);

    //useGeneratedKeys是否使用自增主键,keyProperty指定实体类中的哪一个属性封装主键值
    @Options(useGeneratedKeys = true, keyProperty = "pid")
    @Insert("insert into provider(providerName) values(#{providerName})")
    int addProvider(Provider provider);

    @Delete("delete from provider where pid=#{pid}")
    int deleteProviderByPid(Integer pid);

    @Update("update provider set providerName=#{providerName} where pid=#{pid}"  )
    int updateProvider(Provider provider);
}

新建Provider的POJO

public class Provider {
    private Integer pid;
    //供应商编码
    private String providerCode;
    //供应商名称
    private String providerName;
    //联系人
    private String people;
    //联系电话
    private String phone;
    //联系地址
    private String address;
    //传真
    private String fax;
    //描述
    private String describe;
    // 创建时间
    private Date createDate;
    ....
}

在启动类上启用@MapperScan(****)自动装配指定包下所有Mapper,省得在每个Mapper接口上写@Mapper

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

//会自动 装配指定包下面所有Mapper,省得在每个Mapper上面写@Mapper
@MapperScan("com.mengxuegu.springboot.mapper")
@SpringBootApplication
public class SpringBootDataMybatisApplication {

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

service层和controll层自己写吧,搞定!

四.Springboot整合MyBatis之配置文件开发

忘掉mapper接口文件的注解,使用配置文件开发!
创建全新的mapper层实例文件BillMapper.java

import com.mengxuegu.springboot.entities.Bill;
import org.apache.ibatis.annotations.Mapper;
import org.mybatis.spring.annotation.MapperScan;


//@Mapper 或 @MapperScan
public interface BillMapper {

    Bill getBillByBid(Integer bid);

    int addBill(Bill bill);

}

POJO为


public class Bill {

    private Integer bid;
    // 账单编码
    private String billCode;
    // 商品名称
    private String billName;
    // 商品单位
    private String billCom;
    // 商品数量
    private Integer billNum;
    // 总金额
    private Double money;
    // 供应商
    private Provider provider;
    // 是否付款 0 未付款, 1已付款
    private Integer pay;
    // 创建时间
    private Date createDate;
    ....
}

在resources创建新的目录结构如下:
技术图片

mybatis-config为核心配置文件,配置如下:

<?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="mapUnderscoreToCamelCase" value="true"/>
    </settings>
</configuration>

BillMapper映射文件如下配置:

<?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.mengxuegu.springboot.mapper.BillMapper">

    <select id="getBillByBid" resultType="com.mengxuegu.springboot.entities.Bill">
        select * from bill where bid=#{bid}
    </select>

    <insert id="addBill">
        insert into bill(bill_code, bill_name, bill_com, bill_num)
        values(#{billCode}, #{billName}, #{billCom}, #{billNum})
    </insert>

</mapper>

在application.yml中指定配置文件路径

#配置mybatis相关文件路径
mybatis:
  #映射配置文件路径
  mapper-locations: classpath:mybatis/mapper/*.xml
  #核心配置文件路径
  config-location: classpath:mybatis/mybatis-config.xml

搞定!

Springboot整合JDBC,MyBatis

标签:映射   init   键值   project   location   tco   bat   control   row   

原文地址:https://www.cnblogs.com/wjshean/p/13945586.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!