jdk1.8;spring boot2.0.2;Maven3.3
Mybatis:作为一款优秀的持久层框架,mybatis以简单易学、灵活、解耦等特点已逐步占领市场;
HikariCP:spring boot2开始将HikariCP作为默认的数据库连接池;作为后起之秀其拥有代码量少、速度快、稳定、可靠积攒了非常好的口碑;
本篇文章就基于spring boot2+mybatis+HikariCP来形成对数据库持久层的操作;
由于mybatis配置具有多样性如连接池的不同,实现方式的不同,个数的不同所以在这里会在第一章的基础上分多个项目进行demo编写;
首先我们需要引入对mybatis的依赖包mybatis-spring-boot-starter;由于mybatis-spring-boot-starter已经包含spring-boot-starter-jdbc故不需要重复引入;
其次我们还要引入对mysql数据库的依赖包mysql-connector-java;
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.3.2
mysql
mysql-connector-java
5.1.21
数据库连接池主要配置连接数大小、生命周期,超时时间等;更多可参考:https://github.com/brettwooldridge/HikariCP
#数据库连接
spring.datasource.url=jdbc:mysql://localhost:3306/testspringboot
spring.datasource.username=root
spring.datasource.password=xxxxxx
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#-------------Hikari 连接池配置 --------------------------
#-----更多配置可访问:https://github.com/brettwooldridge/HikariCP
## 最小空闲连接数量
spring.datasource.hikari.minimum-idle=5
## 空闲连接存活最大时间,默认600000(10分钟)
spring.datasource.hikari.idle-timeout=180000
## 连接池最大连接数,默认是10
spring.datasource.hikari.maximum-pool-size=10
## 此属性控制从池返回的连接的默认自动提交行为,默认值:true
spring.datasource.hikari.auto-commit=true
## 连接池名字
spring.datasource.hikari.pool-name=MyHikariCP
## 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟
spring.datasource.hikari.max-lifetime=1800000
## 数据库连接超时时间,默认30秒,即30000
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.connection-test-query=SELECT 1
#--------- ---mybatis扫描配置--------------------------
mybatis.config-locations=classpath:config/mybatis_config.xml
通过配置mybatis相关配置来优化数据库操作;配置文件为mybatis_config.xml:
通过注解@Mapper来标注持久层;本章通过使用注解来实现接口;
package com.example.demo.test1.dao;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import com.example.demo.test1.pojo.User;
@Mapper
public interface UserMapper {
@Select("SELECT * FROM USER WHERE NAME = #{name}")
User findByName(@Param("name") String name);
@Insert("INSERT INTO USER(NAME, AGE) VALUES(#{name}, #{age})")
int insert(@Param("name") String name, @Param("age") Long age);
@Options(useGeneratedKeys = true, keyProperty = "id")
@Insert("INSERT INTO USER(NAME, AGE) VALUES(#{name}, #{age})")
int insertByMap(Map map);
@Options(useGeneratedKeys = true, keyProperty = "id")
@Insert("INSERT INTO USER(NAME, AGE) VALUES(#{name}, #{age})")
int insertByBean(User user);
@Select("SELECT * FROM user")
List findAll();
}
表创建sql:
CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`age` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
通过junit测试:
package com.example.demo;
import java.util.HashMap;
import java.util.Map;
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.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.test.context.junit4.SpringRunner;
import com.example.demo.taf.log.TAFLog;
import com.example.demo.test1.dao.UserMapper;
import com.example.demo.test1.pojo.User;
@RunWith(SpringRunner.class)
// 引入SpringBootTest并生成随机接口
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class MybatisTest {
@Autowired
UserMapper userMapper;
@Test
public void test() {
try {
userMapper.insert("cc", (long) 18);
User user = new User();
user.setName("ccc");
user.setAge(18);
userMapper.insertByBean(user);
System.out.println("反写id为:" + user.getId());
Map < String, Object > map = new HashMap < String, Object >();
map.put("name", "cccc");
map.put("age", 18);
userMapper.insertByMap(map);
System.out.println("反写id为:" + map.get("id"));
System.out.println("查询用户数量:" + userMapper.findAll().size());
}
catch (Exception e) {
System.out.println(e);
}
}
}
测试结果如下:
反写id为:63
反写id为:64
查询用户数量:64
https://github.com/cc6688211/demo_chapter2_mybatis1.git