Spring学习-07 Spring+SpringMVC+Druid+jdbcTemplate(注解方式)
注意: 是在05(Spring+SpringMVC)完成后的的基础上操作,
07.01 导入依赖(pom.xml
)
- mysql数据库依赖
- jdbctTemplate依赖
- druid依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
07.02 增加数据库配置文件(jdbc.properties
)
# JDBC
# MySQL 8.x: com.mysql.cj.jdbc.Driver
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.connectionURL=jdbc:mysql://127.0.0.1:3306/2019springtest?useUnicode=true&characterEncoding=utf-8&useSSL=false
jdbc.username=root
jdbc.password=root
# JDBC Pool
jdbc.pool.init=1
jdbc.pool.minIdle=3
jdbc.pool.maxActive=20
# JDBC Test
jdbc.testSql=SELECT 'x' FROM DUAL
07.03 druid配置文件(DruidDatasourceConfig.java
)
- 配置datasource
- 数据源配置
com.alibaba.druid.pool.DruidDataSource
- 配置监控统计拦截的filters,不写的话无法监控sql执行
- 数据源配置
- 配置jdbcTemplate
@Configuration //表示配置文件类
@PropertySource(value = {"classpath:jdbc.properties",},ignoreResourceNotFound=true) //添加配置文件
public class DruidDatasourceConfig {
// 参考链接 https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7%BD%AE
@Value("${jdbc.driverClass}")
private String jdbc_driverClassName ;
@Value("${jdbc.connectionURL}")
private String jdbc_url ;
@Value("${jdbc.username}")
private String jdbc_username ;
@Value("${jdbc.password}")
private String jdbc_password ;
@Value("${jdbc.pool.init}")
private Integer jdbc_initialSize ;
@Value("${jdbc.pool.minIdle}")
private Integer jdbc_minIdle ;
@Value("${jdbc.pool.maxWait}")
private Integer jdbc_maxWait ;
@Value("${jdbc.pool.maxActive}")
private Integer jdbc_maxActive ;
@Autowired
private DataSource dataSource;
@Bean(destroyMethod="close",initMethod="init")
public DataSource dataSource() throws SQLException {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(jdbc_url);
dataSource.setDriverClassName(jdbc_driverClassName);
dataSource.setPassword(jdbc_password);
dataSource.setUsername(jdbc_username);
dataSource.setInitialSize(jdbc_initialSize);
dataSource.setMinIdle(jdbc_minIdle);
dataSource.setMaxWait(jdbc_maxWait);
dataSource.setMaxActive(jdbc_maxActive);
dataSource.setValidationQuery("select 1 from dual");
dataSource.setFilters("stat"); //配置以后监控中心才会分析执行的sql
return dataSource;
}
@Bean
public JdbcTemplate jdbcTemplate(){
return new JdbcTemplate(dataSource);
}
}
07.04 druid配置文件(DruidStatFilter.java
)
- 配置Filter ,忽略资源等
@WebFilter(
filterName="druidWebStatFilter",urlPatterns="/*",
initParams={
/** 忽略资源 */
@WebInitParam(name="exclusions", value="*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*,/static/*"),
@WebInitParam(name="profileEnable",value="true"),
/** 监控当前COOKIE的用户 */
@WebInitParam(name="principalCookieName",value="USER_COOKIE"),
/** 监控当前SESSION的用户 */
@WebInitParam(name="principalSessionName",value="USER_SESSION"),
/** 监控单个url访问数据库情况 */
@WebInitParam(name = "profileEnable",value = "true")
}
)
public class DruidStatFilter extends WebStatFilter {
}
07.05 druid配置文件(DruidStatViewServlet.java
)
- 监控配置
@WebServlet(urlPatterns="/druid/*",
initParams={
/** 白名单,如果不配置或value为空,则允许所有 */
@WebInitParam(name="allow",value=""),
/** 黑名单,与白名单存在相同IP时,优先于白名单 */
@WebInitParam(name="deny",value=""),
/** 用户名 */
@WebInitParam(name="loginUsername",value="admin"),
/** 密码 */
@WebInitParam(name="loginPassword",value="admin"),
/** 禁用HTML页面上的“Reset All”功能 */
@WebInitParam(name="resetEnable",value="false")
})
public class DruidStatViewServlet extends StatViewServlet {
}
07.06 测试用Entity(User.java
)
- 使用的lombok支持
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Integer id;
private String username;
private String password;
private String avatar;
private Date created;
private Date updated;
}
07.07 测试用DAO(UserDao.java
)
- 创建方法
finaAll
取得所有的User数据 - 需要实现一个
UserRowMapper
,用来做映射数据
@Repository
public class UserDao {
@Autowired
JdbcTemplate jdbcTemplate;
public List<User> findAll() {
return jdbcTemplate.query("select * from user", new UserRowMapper());
}
class UserRowMapper implements RowMapper<User> {
@Override
public User mapRow(ResultSet rs, int i) throws SQLException {
User user = new User();
user.setId(rs.getInt("id"));
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
user.setAvatar(rs.getString("avatar"));
user.setCreated(rs.getDate("created"));
user.setUpdated(rs.getDate("updated"));
return user;
}
}
}
07.08 测试用Controller(UserController.java
)
- 注入
UserDao
- 创建接口
/user/list
,返回前台JSON数据
@Controller
public class UserController {
@Autowired
private UserDao userDao;
@RequestMapping("/user/list")
@ResponseBody
public List<User> findall() {
return userDao.findAll();
}
}