1.初期化のmysql:データベース作成、データシート、データベースの準備は、
プロジェクトの作成2.
(1)引入数据库操作相关依赖:
<!--引入spring-boot-starter-jdbc的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--引入MySQL Driver驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- 阿里系的Druid连接池依赖包 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.29</version>
</dependency>
(2)配置相关文件
<1>在application.properties文件配置mysql相关信息
1.驱动配置信息
# mysql的驱动类
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# 数据库地址
spring.datasource.url=jdbc:mysql://localhost:3306/test
# 数据库账号
spring.datasource.username=root
#数据库密码
spring.datasource.password=123456
2.连接池的配置信息
# 初始化大小,最小,最大
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
# 配置获取连接等待超时的时间
spring.datasource.maxWait=60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.timeBetweenEvictionRunsMillis=60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
# 打开PSCache,并且指定每个连接上PSCache的大小
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.filters=stat,wall,log4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
<2>通过引入这些依赖和配置一些基本信息,springboot就可以访问数据库类
3.特定のコーディング
(1)实体类:
public class Student {
private int id ;
private String name ;
....省略了getter. setter}
(2)dao层
<1>dao层接口:
public interface StudentDAO {
int add(Student student );
int update(Student student );
int delete(int id);
Student findStudentById(int id);
List<Student > findStudentList();}
<2>dao层接口的实现类:
@Repository
public class AccountDaoImpl implements IAccountDAO {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public int add(Student student ) {
return jdbcTemplate.update("insert into account(name) values(?)",
account.getName(),account.getMoney());}
@Override
public int update(Student student) {
return jdbcTemplate.update("UPDATE student SET NAME=? WHERE id=?",
student.getName(),student.getId());}
@Override
public int delete(int id) {
return jdbcTemplate.update("DELETE from TABLE student where id=?",id);}
@Override
public Student findStudentById(int id) {
List<Student > list = jdbcTemplate.query("select * from student where id = ?", new Object[]{id}, new BeanPropertyRowMapper(Student.class));
if(list!=null && list.size()>0){
Student student = list.get(0);
return student;}else{return null;}}
@Override
public List<Student> findStudentList() {
List<Student> list = jdbcTemplate.query("select * from student", new Object[]{}, new BeanPropertyRowMapper(Student.class));
if(list!=null && list.size()>0){return list;}else{return null;}}}
(3)service层
<1>service层接口:
public interface StudentService {
int add(Student student );
int update(Student student);
int delete(int id);
Student findStudentById(int id);
List<Student > findStudentList();}
<2>service层接口的实现类:
@Service
public class StudentServiceImpl implements StudentService {
@Autowired
StudentDAO studentDAO ;
@Override
public int add(Student student) {
return studentDAO.add(student);}
@Override
public int update(Student student) {
return studentDAO.update(student);}
@Override
public int delete(int id) {
return studentDAO.delete(id);}
@Override
public Student findStudentById(int id) {
return studentDAO.findStudentById(id);}
@Override
public List<Student> findStudentList() {
return studentDAO.findStudentList();}}
(4)controller层:构建一组restful api来展示
@RestController
@RequestMapping("/student")
public class StudentController {
@Autowired
StudentService studentService;
@RequestMapping(value = "/list",method = RequestMethod.GET)
public List<Student> getStudents(){
return studentService.findStudentList();}
@RequestMapping(value = "/{id}",method = RequestMethod.GET)
public Account getStudentById(@PathVariable("id") int id){
return studentService.findStudentById(id);}
@RequestMapping(value = "/{id}",method = RequestMethod.PUT)
public String updateStudent(@PathVariable("id")int id ,
@RequestParam(value = "name",required = true)String name){
Student student=new Student();
student.setId(id);
student.setName(name);
int t=studentService.update(student);
if(t==1){return student.toString();}else {return "fail";}}
@RequestMapping(value = "",method = RequestMethod.POST)
public String postStudent( @PathVariable("id")int id ,
@RequestParam(value = "name")String name){
Student student=new Student();
student.setMoney(money);
student.setName(name);
int t= accountService.add(account);
if(t==1){return student.toString();}else {return "fail";}}}
4.建物の郵便配達、注意安らかなAPIのスタイルによって試験することができる
。5. Springboot2.Xバージョンを、推奨HikariCPの公式データベース接続プール(デフォルトのデータベース接続プール)
(1)HikariCP的性能和并发性。如果有HikariCP,总是选择它
(2)否则,如果Tomcat池数据源可用,将使用它
(3)如果HikariCP和Tomcat池数据源都不可用,如果Commons DBCP2可用,将使用它
(4)如果springboot版本是2.X,当使用spring-boot-starter-jdbc依赖,springboot就会自动引入HikariCP的依赖了
(5)如果需要使用指定的数据库连接池
5.1.需要在application.properties中配置:spring.datasource.type
5.2.引入第三方数据库连接池依赖