1、JDBC
-
创建项目:勾选JDBC API && MySQL Driver驱动
-
创建application.yaml文件
-
编写data信息
spring: datasource: username: root password: 2019 url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8 driver-class-name: com.mysql.cj.jdbc.Driver
-
会自动产生一个
datasource
的对象 -
在测设类自动装配这个对象测试查看数据源(默认:HikariDataSource)
DataSource dataSource; @Autowired public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; } @Test void contextLoads() throws SQLException { System.out.println(dataSource.getClass()); // 获得数据库链家 Connection connection = dataSource.getConnection(); System.out.println(connection); connection.close(); }
-
SpringBoot已经配置好模板了(jdbcTemplate)
-
创建Controller 自动装配jdbcTemplate模板
jdbcTemplate.queryForList(sql);
查询jdbcTemplate.update(sql);
增删改
JdbcTemplate jdbcTemplate; @Autowired public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } /** 查询数据库的所有信息 * 返回参数:List泛型集合,执行为Map集合,Map的泛型为String,Object */ @GetMapping("/userList") public List<Map<String,Object>> userList(){ String sql = "select * from userguang"; return jdbcTemplate.queryForList(sql); } @GetMapping("/addUser") public List<Map<String, Object>> addUser(){ String sql = "insert into userguang(id,name,pwd) values(6,'Jake','2020')"; int update = jdbcTemplate.update(sql); String sql1 = "select * from userguang"; return jdbcTemplate.queryForList(sql1); } @GetMapping("/updUser/{id}") public List<Map<String,Object>> updUser(@PathVariable("id") int id){ String sql = "update userguang set name = ?,pwd = ? where id = "+id; // 封装 Object[] objects = new Object[2]; objects[0] = "小明"; objects[1] = "2019"; jdbcTemplate.update(sql,objects); String sql1 = "select * from userguang"; return jdbcTemplate.queryForList(sql1); } @GetMapping("/Dr/{id}") public List<Map<String,Object>> delUser(@PathVariable("id") int id){ String sql = "delete from userguang where id = ?"; jdbcTemplate.update(sql,id); String sql1 = "select * from userguang"; return jdbcTemplate.queryForList(sql1); }
2、Druid
Druid简介
Druid是阿里巴巴开源平台上一个数据库连接池实现,结合了C3P0、DBCP、PROXOOL等DB池的有点,同时加入了日志监控。
Druid可以很好的控制DB池连接和SQL执行的情况,专门用来监控DB连接连接池的
SpringBoot 2.0以上默认使用Hikari数据源,Hikari与Driud都是当前java web最优先的数据源。
com.alibaba.druid.pool.DruidDataSource基本配置参数:
配置 | 缺省值 | 说明 |
---|---|---|
name | 配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来。 如果没有配置,将会生成一个名字,格式是:“DataSource-” + System.identityHashCode(this) | |
jdbcUrl | 连接数据库的url,不同数据库不一样。例如: mysql : jdbc:mysql://10.20.153.104:3306/druid2 oracle : jdbc:oracle:thin:@10.20.149.85:1521:ocnauto | |
username | 连接数据库的用户名 | |
password | 连接数据库的密码。如果你不希望密码直接写在配置文件中,可以使用ConfigFilter。详细看这里:https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter | |
driverClassName | 根据url自动识别 | 这一项可配可不配,如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassName(建议配置下) |
initialSize | 0 | 初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时 |
maxActive | 8 | 最大连接池数量 |
maxIdle | 8 | 已经不再使用,配置了也没效果 |
minIdle | 最小连接池数量 | |
maxWait | 获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。 | |
poolPreparedStatements | false | 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。 |
maxOpenPreparedStatements | -1 | 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100 |
validationQuery | 用来检测连接是否有效的sql,要求是一个查询语句。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会其作用。 | |
testOnBorrow | true | 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 |
testOnReturn | false | 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能 |
testWhileIdle | false | 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 |
timeBetweenEvictionRunsMillis | 有两个含义: 1) Destroy线程会检测连接的间隔时间2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明 | |
numTestsPerEvictionRun | 不再使用,一个DruidDataSource只支持一个EvictionRun | |
minEvictableIdleTimeMillis | ||
connectionInitSqls | 物理连接初始化的时候执行的sql | |
exceptionSorter | 根据dbType自动识别 | 当数据库抛出一些不可恢复的异常时,抛弃连接 |
filters | 属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有: 监控统计用的filter:stat日志用的filter:log4j防御sql注入的filter:wall | |
proxyFilters | 类型是List<com.alibaba.druid.filter.Filter>,如果同时配置了filters和proxyFilters,是组合关系,并非替换关系 |
导入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.3</version>
</dependency>
创建Druid的配置类与yaml绑定
/**
* 比作:web.xml
* @author Andy
*/
@Configuration
public class DruidConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource druidDataSource(){
return new DruidDataSource();
}
/**
* 后台监控功能
* @return
*/
@Bean
public ServletRegistrationBean statViewServlet(){
ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
// 后台需要有人登陆
HashMap<String, String> initParameters = new HashMap<>();
// 增加配置
initParameters.put("loginUsername","admin");
initParameters.put("loginPassword","2019");
// 允许谁能访问
initParameters.put("allow","");
/**initParameters.put("Aaron","192.168.255.255");*/
// 初始化参数
bean.setInitParameters(initParameters);
return bean;
}
/**
* filler 过滤器
*/
@Bean
public FilterRegistrationBean webStatFilter(){
FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<>();
bean.setFilter(new WebStatFilter());
HashMap<Object, Object> map = new HashMap<>();
// 这些东西不进行配置
map.put("exclusions","*.js,*.css,/druid/*");
// 可以过滤那些请求呢
bean.setFilter(map);
return bean;
}
}
3、Mybatis
-
创建项目勾选web、jdbcAPI、MysqlDriver
-
在pom.xml导入整合Mybatis的依赖
mybatis-spring-boot-starter
-
创建MVC(实体类、业务层、数据访问层、Controller控制器)
- 数据访问层(mapper)
- 单个注解:
@Mapper
- 扫描类:·
@MapperScan("xxx/xxx/xxx")
- 单个注解:
- 数据访问层(mapper)
-
在properties或者yaml中映射xml的mapper文件
-
yaml方法
mybatis: mapper-locations: classpath:mybatis/mapper/*.xml
-
properties
mybatis-mapper-locations: classpath:mybatis/mapper/*.xml
-
-
在Controller控制器中写处理请求,打印数据库的数据
-
运行项目,在浏览器发送请求,测试是否能输出数据库的数据