目录
2、application-dev.properties 数据源配置
一、使用MyBatis操作SQL
1、pom.xml引入依赖
mybatis最新版本jar包依赖:http://mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/index.html
druid最新版本jar包依赖:https://mvnrepository.com/artifact/com.alibaba/druid
<!-- MyBatis依赖:持久层框架,简化了持久层的开发 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<!-- Druid数据源:连接池配置 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.22</version>
</dependency>
<!-- MySql依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
2、application-dev.properties 数据源配置
① mysql服务配置:https://blog.csdn.net/liyb1078422974/article/details/109676322
② ip服务器地址,port对外端口,database数据库名,需要自己替换
# 数据源基本配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://ip:port/database?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=admin
spring.datasource.password=admin
# ######################## Druid数据源配置 ########################
# 初始连接数
spring.datasource.druid.initial-size=5
# 最小连接池数量
spring.datasource.druid.minIdle = 5
# 最大连接池数量
spring.datasource.druid.max-active=20
# 配置获取连接等待超时的时间,单位是毫秒
spring.datasource.druid.max-wait=60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.druid.time-between-eviction-runs-millis=60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.druid.min-evictable-idle-time-millis=300000
# 配置一个连接在池中最大生存的时间,单位是毫秒
spring.datasource.druid.max-evictable-idle-time-millis=900000
# 配置检测连接是否有效
spring.datasource.druid.validation-query=SELECT 1 FROM DUAL
# 在检查闲置连接时同时检查连接可用性
spring.datasource.druid.test-while-idle=true
# 获取连接时,是否测试有效
spring.datasource.druid.test-on-borrow=false
# 归还连接时,是否测试有效
spring.datasource.druid.test-on-return=false
# 打开PSCache,并且指定每个连接上PSCache的大小【在mysql5.5以下的版本中没有PSCache功能,建议关闭掉。】
spring.datasource.druid.pool-prepared-statements=true
# 最大statement缓存
spring.datasource.druid.max-open-prepared-statements=20
# 最大连接池的statement每个连接缓存大小
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
# 配置监控统计拦截的filters, 去掉后监控界面sql无法统计, 'wall'用于防火墙(stat监控统计,slf4j日志监控,wall防御sql注入)
spring.datasource.druid.filters=stat,wall
# Spring监控AOP切入点,如x.y.z.service.*,配置多个英文逗号分隔
spring.datasource.druid.aop-patterns=org.springboot.springboot01.service.*
# ######################## WebStatFilter配置 ########################
# 是否启动过滤器
spring.datasource.druid.web-stat-filter.enabled=true
# 添加过滤规则
spring.datasource.druid.web-stat-filter.url-pattern=/*
# 忽略过滤的格式
spring.datasource.druid.web-stat-filter.exclusions='*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
# ######################## StatViewServlet配置 ########################
spring.datasource.druid.stat-view-servlet.enabled=true
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
spring.datasource.druid.stat-view-servlet.reset-enable=false
# 配置后,则需要账号密码才能访问控制台
spring.datasource.druid.stat-view-servlet.login-username=druid
spring.datasource.druid.stat-view-servlet.login-password=druid123
# IP白名单
spring.datasource.druid.stat-view-servlet.allow=127.0.0.1
# IP黑名单(共同存在时,deny优先于allow)
spring.datasource.druid.stat-view-servlet.deny=192.168.50.1
# ######################## 配置StatFilter ########################
spring.datasource.druid.filter.stat.log-slow-sql=true
# ######################## 如果使用xml方式操作sql,还需要额外的一些配置
# 别名配置,可以简化xml中的实体类引用方式,直接用名称替代全路径
mybatis.type-aliases-package=org.springboot.springboot01.bean
# 驼峰命名规范,为true时,能识别到userName和username
mybatis.configuration.map-underscore-to-camel-case=true
# mapper映射文件(在resources下)
mybatis.mapper-locations=classpath*:org/springboot/springboot01/mapper/*.xml
3、创建测试使用的表
注:当mysql安装时,配置的是大小写敏感就要注意表的大小写。如下
lower_case_table_names = 0 表名存储为给定的大小和比较是区分大小写的
lower_case_table_names = 1 表名存储在磁盘是小写的,但是比较的时候是不区分大小写
lower_case_table_names = 2 表名存储为给定的大小写但是比较的时候是小写的
-- 学生表
CREATE TABLE student (
id int(11) not null AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(32) NOT NULL,
sex CHAR(1) NOT NULL comment '0男, 1女'
);
INSERT INTO student VALUES (1, 'zhangsan', '0');
INSERT INTO student VALUES (2, 'feifei', '1');
INSERT INTO student VALUES (3, 'wangwu', '0 ');
4、测试配置
4-1、新增org.springboot.springboot01.bean、org.springboot.springboot01.mapper、org.springboot.springboot01.service和org.springboot.springboot01.service.impl的包名,并在它们包下在增加各自的内容。
// 在org.springboot.springboot01.bean下,增加实体类Student
public class Student {
private Integer id;
private String name;
private String sex;
// get、set省略......
}
// 在org.springboot.springboot01.mapper下,增加StudentMapper持久操作
@Component
@Mapper
public interface StudentMapper {
@Insert("insert into student(name, sex) values(#{name, jdbcType=VARCHAR}, #{sex, jdbcType=VARCHAR})")
int add(Student student);
@Update({
"update student",
"set name = #{name, jdbcType=VARCHAR}, sex = #{sex, jdbcType=VARCHAR} ",
"where id = #{key, jdbcType=INTEGER}"
})
int update(Student student);
@Delete("delete from student where id = #{key, jdbcType=INTEGER}")
int deleteByKey(Integer key);
@Select("select * from student where id = #{key, jdbcType=INTEGER}")
@Results(id = "student",value= {
@Result(property = "id", column = "id", javaType = Integer.class),
@Result(property = "name", column = "name", javaType = String.class),
@Result(property = "sex", column = "sex", javaType = String.class)
})
Student findOneByKey(Integer key);
}
// 在org.springboot.springboot01.service下,增加接口StudentService
public interface StudentService {
int add(Student student);
int update(Student student);
Student findOneByKey(Integer key);
int deleteByKey(Integer key);
}
// 在org.springboot.springboot01.service.impl下,增加实现类StudentServiceImpl
@Service
public class StudentServiceImpl implements StudentService {
@Resource
private StudentMapper studentMapper;
@Override
public int add(Student student) {
return studentMapper.add(student);
}
@Override
public int update(Student student) {
return studentMapper.update(student);
}
@Override
public Student findOneByKey(Integer key) {
return studentMapper.findOneByKey(key);
}
@Override
public int deleteByKey(Integer key) {
return studentMapper.deleteByKey(key);
}
}
4-2、在org.springboot.springboot01.controller包下的TestController类中,加入测试方法
@RestController
public class TestController {
@Resource
private StudentService studentService;
// @RequestParam(required = true) 表名id必传
@RequestMapping("/getStudentById")
public Student getStudentById(@RequestParam(required = true) Integer id) {
return studentService.findOneByKey(id);
}
}
4-3、整个项目结构
5、测试
5-1、启动后,可访问这个地址:http://127.0.0.1:8080/springboot/getStudentById?id=1
5-2、查看sql监控情况:http://127.0.0.1:8080/springboot/druid/login.html
密码、账号application-dev.propertiesi配置中
登录后,如下所示
5-3、在操作数据库表时,可以通过【SQL监控】查看执行的情况
二、使用JdbcTemplate操作SQL
说明:使用JDBC操作sql坑比较多,还是倾向于使用Mybatis。
1、pom.xml引入依赖
<!-- jdbc使用Hibernate框架 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
2、数据源配置(同上)
3、测试配置
3-1、新增org.springboot.springboot01.dao和org.springboot.springboot01.dao.impl包名,并在它们包下在增加各自的内容。
// 在org.springboot.springboot01.dao包名下,新增接口StudentDao
public interface StudentDao {
/**
* 查询所有学生信息
*
* @return List<Student>
*/
List<Student> listStudent();
}
// 在org.springboot.springboot01.dao.impl包名下,新增接口StudentDaoImpl
@Repository
public class StudentDaoImpl implements StudentDao {
@Resource
private JdbcTemplate jdbcTemplate;
@Override
public List<Student> listStudent() {
String sql = "select * from student";
return jdbcTemplate.query(sql, new Object[]{}, new BeanPropertyRowMapper(Student.class));
}
}
// 其它原有的包下的接口、实现类,加入方法
public interface StudentService {
// 省略...... 原有的方法
List<Student> listStudent();
}
@Service
public class StudentServiceImpl implements StudentService {
// 省略...... 原有的引用
@Resource
private StudentDao studentDao;
// 省略...... 原有的方法
@Override
public List<Student> listStudent() {
return studentDao.listStudent();
}
}
3-2、在org.springboot.springboot01.controller包下的TestController类中,加入测试方法
@RestController
public class TestController {
// 省略原有引用......
@Resource
private StudentService studentService;
// 省略原有方法......
@RequestMapping("/listStudent")
public List<Student> listStudent() {
return studentService.listStudent();
}
}
3-3、整个项目结构