JDBC
整合JDBC,简单的在yml中设置相关数据库信息即可
spring:
datasource:
username: root
password: ****
url: jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
然后就可以实现controller进行测试
package com.zzh.springboot04data.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
@RestController
public class JDBCController {
@Autowired
JdbcTemplate jdbcTemplate;
//查询数据库的所有信息
//没有实体类,数据库中的东西怎么获取?Map
@GetMapping("/userList")
public List<Map<String, Object>> userList(){
String sql = "select * from user";
List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
return maps;
}
@GetMapping("/addUser")
public String addUser(){
String sql = "insert into user(id, username, sex) values (53, '张', '男')";
jdbcTemplate.update(sql);
return "update-ok";
}
@GetMapping("/updateUser/{id}")
public String updateUser(@PathVariable("id") int id){
String sql = "update user set username=?,address=? where id="+id;
//封装
Object[] objects = new Object[2];
objects[0] = "zzh";
objects[1] = "cd";
jdbcTemplate.update(sql, objects);
return "update-ok";
}
@GetMapping("/deleteUser/{id}")
public String deleteUser(@PathVariable("id") int id){
String sql = "delete from user where id = ?";
jdbcTemplate.update(sql, id);
return "delete-ok";
}
}
Mybatis
1.首先在yml配置文件添加整合mybatis的配置信息
# 整合mybaits
mybatis:
type-aliases-package: com.zzh.pojo
mapper-locations: classpath:mybatis/mapper/*.xml
2.然后编写实体类及相应的mapper
package com.zzh.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private int id;
private String username;
private String sex;
}
package com.zzh.mapper;
import com.zzh.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
//表示本类是mybatis的mapper 类,核心注解不能少
@Mapper
@Repository
public interface UserMapper {
List<User> queryUserList();
User queryUserById(int id);
int addUser(User user);
int updateUser(User user);
int deleteUser(int id);
}
3.最后配置与mapper对应的sql语句
<?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.zzh.mapper.UserMapper">
<select id="queryUserList" resultType="User">
select * from user ;
</select>
<select id="queryUserById" resultType="User">
select * from user where id = #{id}
</select>
<insert id="addUser" parameterType="User">
insert into user (id, username, sex) values (#{id}, #{username}, #{sex});
</insert>
<update id="updateUser" parameterType="User">
update user set username=#{username}, sex=#{sex} where id = #{id}
</update>
<delete id="deleteUser" parameterType="int">
delete from user where id = #{id}
</delete>
</mapper>
Druid
是阿里巴巴开源平台上一个数据库连接池实现,结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控。
在yml配置文件中加上以下配置:
type: com.alibaba.druid.pool.DruidDataSource
# SpringBoot 默认是不注入这些属性值的,需要自己绑定
# druid 数据源专有配置
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:监控统计,log4j:日志记录,wall:防御sql注入
# 如果允许时报错,java.lang.ClassNotFoundException:org.apache.log4j.Priority
# 则导入log4j依赖即可,
filters: stat,wall,log4j
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
测试后台监控功能
package com.zzh.springboot04data.config;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
import java.util.HashMap;
@Configuration
public class DruidConfig {
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource druidDataSource(){
return new DruidDataSource();
}
//后台监控功能
@Bean
public ServletRegistrationBean statViewServlet(){
ServletRegistrationBean<StatViewServlet> bean =
new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
//后台需要有人登录,账号密码设置
HashMap<String, String> initParameters = new HashMap<>();
//增加配置,登陆的key是固定的
initParameters.put("loginUsername", "admin");
initParameters.put("loginPassword", "123");
//允许谁可以访问
initParameters.put("allow", "");
//禁止谁访问
//initParameters.put("name", "ip地址");
bean.setInitParameters(initParameters); //设置初始化参数
return bean;
}
}
然后进行sql语句执行,即可在监控页面查看到sql语句执行情况:
Filter部分简单实现
//filter
@Bean
public FilterRegistrationBean webStatFilter(){
FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<>();
bean.setFilter(new WebStatFilter());
//可以过滤哪些请求?
HashMap<String, String> initParameters = new HashMap<>();
//以下文件不进行统计
initParameters.put("exclusions", "*.js, *.css, /druid/**");
bean.setInitParameters(initParameters);
return bean;
}