mybatismysql⾃定义函数_SpringBoot整合Mybatis、Mysql⾃
定义数据源
SpringBoot、Mybatis、Mysql整合,此SSM不是彼SSM,使⽤SpringBoot组件,整合Mybatis、Mysql也变得简洁起来,只需三步就可以把数据库连接配置搞定。
环境说明
SpringBoot 2.1.4
JDK 1.8
MySql 版本 6 及以上
本⽂探究
使⽤SpringBoot配置数据库⾃动加载及简单使⽤
SpringBoot默认加载的数据源是哪个
解决⾃定义数据源不到属性的问题
第⼀步,在l配置MyBatis和MySql
mybatis-spring-boot-starter
2.0.1
mysql
mysql-connector-java
第⼆步,在application.properties配置⽂件中,配置数据库连接参数
spring.datasource.url=jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf-
8&autoReconnect=true&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=123456
#在此版本中,数据库驱动⽂件sql.jdbc.Driver(版本5)已由变为sql.cj.jdbc.Driver(版本6及以上)
spring.datasource.sql.cj.jdbc.Driver
#xml映射路径
mybatis.mapper-locations=classpath:mapper/*.xml
在l中,并没有指明mysql driver的版本,mysql driver的版本会随着maven的更新不断升级,如果项⽬启动时报了下⾯的错误,就需要把driver改成带cj的。
Loading class `sql.jdbc.Driver'. This is deprecated. The new driver class is `sql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
关于mybatis中的xml⽂件的映射,如果项⽬启动时,不到xml⽂件,则需要对xml的路径配置⼀下,本⽂的xml⽂件是放在src/sources 下的mapper⽂件⾥⾯的。
第三步,在启动⽂件中配置扫描包
ample.demo;
batis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import t.annotation.Configuration;
/**
*
* @author 程就⼈⽣
* @date 2019年6⽉28⽇
*/
@SpringBootApplication
@Configuration
@MapperScan("ample.demo.dao")
public class SpirngMybatisDemoApplication {
jdbctemplate查询一条数据public static void main(String[] args) {
SpringApplication.run(SpirngMybatisDemoApplication.class, args);
}
}
注意点:
@Configuration注解,从它的源码中,可以看出它的作⽤等同⼀个component组件。
图-1
如果不使⽤默认的数据库连接配置,单独对数据库连接进⾏配置时,就可以使⽤@Configuration注解进⾏注⼊。
@MapperScan("ample.demo.dao") 注解,指定mybatis需要扫描的Mapper⽂件包,没有这⼀⾏时,使⽤@Autowired获取dao ⽂件时会报错。所以这⼀⾏还是必须有的。
三步过后,下⾯就可以进⾏测试了
为了⽅便测试,直接建⽴了⼀个Controller⽂件,service这⼀层先省下了。
ller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
ample.demo.dao.TestMapper;
ity.Test;
/**
* mybatis测试
* @author 程就⼈⽣
* @date 2019年6⽉26⽇
*/
@RestController
public class IndexController {
@Autowired
private TestMapper testMapper;
@GetMapping("/index")
public Object index(){
Test test = new Test();
test.setUserUid("123456");
test.setUserName("aaa");
test.setUserPwd("111");
//新增
// int effectRow = testMapper.insertSelective(test);
// //查询
// Test test1 = testMapper.UserUid());
test.setUserName("aaaaaaa");
//修改
testMapper.updateByPrimaryKeySelective(test);
Test test2 = testMapper.UserUid());
return test2;
}
}
测试结果ok,数据可以正常的增删改查。
如果还没有⽣成mapper和对应的xml⽂件,可以参考STS整合MyBatis generator ⽣成的两种⽅式
、STS 整合 mybatis generator ⽣成⽂件,
这两篇⽂章介绍了对数据库表进⾏⽂件的⽣成,本⽂是在以上基础上进⾏扩展的。
写到这⾥,⼼中不免有⼀个疑问,本⽂l⽂件中并没有加任何的数据源类型,除了mybatic和mysql的架包,也就只有spring-boot-starter-web、spring-boot-starter-test这两个架包了,SpringBoot⾃动装配到底使⽤了何种数据源类型呢?
org.springframework.boot
spring-boot-starter-web
mybatis-spring-boot-starter
2.0.1
mysql
mysql-connector-java
org.springframework.boot
spring-boot-starter-test
test
修改启动类中的main⽅法如下,输出到底使⽤了哪种数据源类型
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(SpirngMybatisDemoApplication.class,args);
try {
//查看使⽤哪个数据源
DataSource ds = Bean(DataSource.class);
System.out.Class().getName());
Connection connection;
connection = ds.getConnection();
System.out.Catalog()); //test
System.out.Bean(JdbcTemplate.class));
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
在没有添加任何数据源的情况下,默认使⽤了HikariDataSources数据源;
com.zaxxer.hikari.HikariDataSource
2019-06-30 16:16:46.044 INFO 13012 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 -
2019-06-30 16:16:46.205 INFO 13012 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
test1
org.JdbcTemplate@19058533
从其他的博⽂代码中,说默认的是DataSourceConfiguration.Tomcat.class,从截图中确认没错。本⽂测
试下⾯却是HikariDataSource,这是为什么呢?打开DataSourceAutoConfiguration,可以看到如下图所⽰,难道这是因为SpringBoot版本的差异?
本⽂使⽤的SpringBoot版本是2.1.4,默认的数据源变成了HikariDataSource?看来要确定是哪个是默认数据源,还需要看⼀看源码才知道,版本不同,就有不⼀样的地⽅。
图-2
现在,需要换种数据源,不使⽤默认的,⽐如使⽤阿⾥的druid数据源
第⼀步,在l,引⼊架包
com.alibaba
druid
1.1.16
第⼆步,添加配置⽂件DruidDatabaseConfig
fig;
import javax.sql.DataSource;
batis.spring.annotation.MapperScan;
import org.t.properties.ConfigurationProperties;
import t.annotation.Bean;
import t.annotation.Configuration;
import com.alibaba.druid.pool.DruidDataSource;
@Configuration
@MapperScan("ample.demo.dao")
public class DruidDatabaseConfig {
/**
* DruidDataSource数据源中默认的是取druid开头的,所以这⾥需要设置⼀下前缀prefix
* 使⽤com.alibaba的DruidDataSource数据源
* @return
*
*/
@Bean
@ConfigurationProperties(prefix="spring.datasource")
public DataSource dataSource() {
return new DruidDataSource();
}
}
第三步,运⾏测试,可以看到控制台输出了我们想要的数据源配置
com.alibaba.druid.pool.DruidDataSource
2019-06-30 17:16:18.260 INFO 18000 --- [ main] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} inited test1
org.JdbcTemplate@11a00961
运⾏Controller⽂件,也输出了查询内容