使用jdbc,需要的依赖和springboot的应用场景:
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-jdbcartifactId>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<scope>runtimescope>
dependency>
Spring默认使用Hikari数据源,我们也可以在application.yaml文件中自己配置
spring:
datasource:
url: jdbc:mysql://localhost:3306/testspring
username: root
password: 123456
#type: com.zaxxer.hikari.HikariDataSource #默认的
type: com.alibaba.druid.pool.DruidDataSource
在数据源自动配置类里面我们可以看到默认支持的数据源类型。
也可以看到三种数据源的配置。
点开starter-jdbc,可以看到Hikari是默认的数据源。
druid所需依赖:
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>1.0.9version>
dependency>
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>1.2.15version>
<exclusions>
<exclusion>
<groupId>javax.jmsgroupId>
<artifactId>jmsartifactId>
exclusion>
<exclusion>
<groupId>com.sun.jdmkgroupId>
<artifactId>jmxtoolsartifactId>
exclusion>
<exclusion>
<groupId>com.sun.jmxgroupId>
<artifactId>jmxriartifactId>
exclusion>
exclusions>
dependency>
给数据源配置属性:
spring:
datasource:
url: jdbc:mysql://localhost:3306/testspring
username: root
password: 123456
#type: com.zaxxer.hikari.HikariDataSource #默认的
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: stat,wall,log4j
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
创建数据源注册类:
@Configuration
public class DatasourceConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DruidDataSource dataSource(){
return new DruidDataSource();
}
}
使用数据源:
@RestController
public class HelloController {
@Autowired
private DataSource dataSource;
@RequestMapping("/hello")
public String hello(){
return "helloworld";
}
}
在数据库中建表:
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for tx_user
-- ----------------------------
DROP TABLE IF EXISTS `tx_user`;
CREATE TABLE `tx_user` (
`username` varchar(10) DEFAULT NULL,
`userId` int(10) NOT NULL,
`password` varchar(10) DEFAULT NULL,
PRIMARY KEY (`userId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
spring:
datasource:
url: jdbc:mysql://localhost:3306/testspringboot?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
# 其他数据源需要配置的东西
# ...
@RestController
public class JdbcController {
@Autowired
private JdbcTemplate jdbcTemplate;
@RequestMapping("/query")
public List<Map<String, Object>> query(){
List<Map<String,Object>> maps = jdbcTemplate.queryForList("select * from tx_user");
return maps;
}
}
所需依赖:
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starterartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
<exclusions>
<exclusion>
<groupId>org.junit.vintagegroupId>
<artifactId>junit-vintage-engineartifactId>
exclusion>
exclusions>
dependency>
<dependency>
<groupId>org.mybatis.spring.bootgroupId>
<artifactId>mybatis-spring-boot-starterartifactId>
<version>1.3.1version>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>1.0.9version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<scope>runtimescope>
dependency>
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>1.2.15version>
<exclusions>
<exclusion>
<groupId>javax.jmsgroupId>
<artifactId>jmsartifactId>
exclusion>
<exclusion>
<groupId>com.sun.jdmkgroupId>
<artifactId>jmxtoolsartifactId>
exclusion>
<exclusion>
<groupId>com.sun.jmxgroupId>
<artifactId>jmxriartifactId>
exclusion>
exclusions>
dependency>
配置数据源相关属性(同上)
创建数据库表
create table preson(
pid int(20) not null auto_increment primary key,
pname varchar(50) default null,
addr varchar(50) default null,
gender int(2) default null,
birth date default null);
insert into preson values
(1,'wxy','shandong','1','1999-10-29'),
(2,'meteor','liaoning','2','2020-10-27');
创建javaBean:
public class Person {
private int pid;
private String pname;
private String addr;
private int gender;
private Date birth;
//getter and setter
}
创建Mapper:
@Mapper
public interface PersonMapper {
@Select("select * from preson where pid = #{pid}")
public Person selectById(int pid);
@Select("select * from preson")
public List<Person> selectAll();
@Insert("insert into preson(pid,pname,addr,gender,birth)values(#{pid},#{pname},#{addr},#{gender},#{birth}")
public void insert(Person p);
@Delete("delete from preson where pid = #{pid}")
public void delete(int pid);
}
Controller:
@RestController
public class HelloController {
@Autowired
private PersonMapper personMapper;
@RequestMapping("selectById")
public Person selectById() {
return personMapper.selectById(1);
}
@RequestMapping("selectAll")
public List<Person> selecAll(){
return personMapper.selectAll();
}
}
一些细节
@Mapper
可以用启动类上的@MapperScan("com.wxy.springmybatis.mapper")
代替/**
* 设置数据库和javaBean的下划线命名和驼峰命名转换,不常用
*/
@Configuration
public class MybatisConfig {
@Bean
public ConfigurationCustomizer customizer(){
return new ConfigurationCustomizer() {
@Override
public void customize(org.apache.ibatis.session.Configuration configuration) {
configuration.setMapUnderscoreToCamelCase(true);
}
};
}
}
在SpringBoot中mybatis的核心配置xml是不需要创建的,因为完全可以通过配置文件进行配置,而mapper映射还是需要配置的:
<mapper namespace="com.wxy.springmybatis.mapper.PersonMapper">
<select id="selectById" resultType="Person" parameterType="int">
select * from preson where pid = #{pid}
select>
<select id="selectAll" resultType="Person">
select * from preson
select>
<insert id="insert" parameterType="Person">
<selectKey keyProperty="pid" resultType="int" order="BEFORE">
select last_insert_id()
selectKey>
insert into preson(pid,pname,addr,gender,birth)values(#{pid},#{pname},#{addr},#{gender},#{birth}
insert>
<delete id="delete" parameterType="int">
delete from preson where pid = #{pid}
delete>
mapper>
配置文件的配置:
# mybatis的配置
mybatis:
#config-location: classpath:sqlMapConfig.xml #核心配置文件位置,其实完全不需要,而且和下面的configuration冲突
mapper-locations: classpath:mapper/*.xml #mapper映射文件
configuration:
map-underscore-to-camel-case: true #下划线和驼峰模式转换
type-aliases-package: com.wxy.springmybatis.model #设置别名--类名,大小写不区分