springboot数据层开发
文章目录
1、数据源自动管理
引入jdbc的依赖和springboot的应用场景
在pom文件中添加以下这些依赖来进行数据库的连接和管理
<!-- 提供 Spring Boot 对 JDBC 的支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- DBCP2 提供数据库连接池实现 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
</dependency>
<!-- MySQL 的 JDBC 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
使用YAML方式配置,创建application.yaml
#server:
# port: 8085
spring:
datasource:
username: root
password: 2020
#数据库连接的url
url: jdbc:mysql://localhost:3306/boot_demo
driver-class-name: com.mysql.jdbc.Driver
#数据库连接池的类型
type: com.zaxxer.hikari.HikariDataSource
在默认情况下,数据库连接可以使用DataSource池进行自动配置
也可以自己指定数据源配置,通过type来选取使用哪种数据源
#server:
# port: 8085
spring:
datasource:
username: root
password: 2020
#数据库连接的url
url: jdbc:mysql://localhost:3306/boot_demo
driver-class-name: com.mysql.jdbc.Driver
#数据库连接池的类型
type: com.zaxxer.hikari.HikariDataSource
# type: org.apache.commons.dbcp2.BasicDataSource
2、配置druid数据源
引入druid的依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.9</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
</dependency>
修改application.yaml中数据库连接池的类型
并添加一些其他配置要求
spring:
datasource:
username: root
password: 2020
url: jdbc:mysql://localhost:3306/boot_demo
driver-class-name: com.mysql.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
initialSize: 5
#初始时连接池中创建的连接数量
minIdle: 5
#连接池中的最小空闲连接数
maxActive: 20
#最大活跃连接数
maxWait: 60000
#连接池中连接的最大等待时间
timeBetweenEvictionRunsMillis: 60000
#定时检查空闲连接的间隔时间
minEvictableIdleTimeMillis: 300000
#连接在连接池中保持空闲而不被驱逐的最小时间
validationQuery: SELECT 1 FROM DUAL
#检测连接是否有效的 SQL 查询
testWhileIdle: true
#是否在空闲时检查连接的有效性
testOnBorrow: false
#是否在获取连接时检查连接的有效性
testOnReturn: false
#是否在归还连接时检查连接的有效性
poolPreparedStatements: true
#是否启用预编译语句池
filters: stat,wall,log4j
# 监控统计 防火墙 日志记录
maxPoolPreparedStatementPerConnectionSize: 20
#每个连接的最大 PSCache 数量
useGlobalDataSourceStat: true
#是否启用全局监控
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
#将相同的 SQL 合并统计;慢查询的阈值为 500 毫秒
创建数据源的注册类
@Configuration
//创建数据源注册类
public class DruidConfig {
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource dataSource(){
return new DruidDataSource();
}
}
配置druid运行期监控
@Configuration
//创建数据源注册类
public class DruidConfig {
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource dataSource(){
return new DruidDataSource();
}
//1.配置druid运行期监控
@Bean
public ServletRegistrationBean statViewServlet() {
// 创建 Servlet 注册对象,设置访问路径为 /druid/*
ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
// 配置监控页面的参数
Map<String, String> initParams = new HashMap<>();
// 设置登录用户名
initParams.put("loginUsername", "root");
// 设置登录密码
initParams.put("loginPassword", "2020");
// 设置允许访问的 IP,空字符串表示允许所有 IP
initParams.put("allow", "");
// 设置拒绝访问的 IP
initParams.put("deny", "192.168.15.21");
// 将参数绑定到 Servlet 注册对象
bean.setInitParameters(initParams);
return bean;
}
//2.配置web监控的filter
@Bean
public FilterRegistrationBean webStatFilter() {
// 创建过滤器注册对象
FilterRegistrationBean bean = new FilterRegistrationBean();
// 设置过滤器为 Druid 的 WebStatFilter
bean.setFilter(new WebStatFilter());
// 配置过滤器的初始化参数
Map<String, String> initParams = new HashMap<>();
// 排除静态资源和监控页面路径
initParams.put("exclusions", "*.js,*.css,/druid/*");
// 将初始化参数绑定到过滤器注册对象
bean.setInitParameters(initParams);
// 设置过滤器作用的 URL 模式,过滤所有请求路径
bean.setUrlPatterns(Arrays.asList("/*"));
return bean;
}
}
在浏览器输入http://localhost:8080/druid打开监控页面
3、Spring Boot整合JDBCTemplate
新建数据库boot_demo并创建表my_user
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for my_user
-- ----------------------------
DROP TABLE IF EXISTS `my_user`;
CREATE TABLE `my_user` (
`pid` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
`p_addr` varchar(255) DEFAULT NULL,
`gender` int(11) DEFAULT NULL,
`birth` date DEFAULT NULL,
PRIMARY KEY (`pid`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of my_user
-- ----------------------------
INSERT INTO `my_user` VALUES ('1', 'zhangsan', '123', '北京', '1', '2020-06-14');
创建TestController
@Controller
public class TestController {
@Autowired
JdbcTemplate jdbcTemplate;
@ResponseBody
@RequestMapping("query")
public List<Map<String,Object>> query(){
List<Map<String,Object>> maps= jdbcTemplate.queryForList("SELECT * FROM tx_user");
return maps;
}
}
启动springboot访问http://localhost:8080/query
Springboot中提供了JdbcTemplateAutoConfiguration
的自动配置
org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,
JdbcTemplateAutoConfiguration源码:
4、Spring Boot整合mybatis注解版
引入mybatis相关依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
配置数据源相关属性
这里不再赘述,可以查看配置druid数据源章节
创建数据库表
新建一个tx_person表
创建JavaBean
public class TxPerson {
private int pid;
private String pname;
private String pAddr;
private int gender;
private Date birth;
public TxPerson(int pid, String pname, String pAddr, int gender, Date birth) {
this.pid = pid;
this.pname = pname;
this.pAddr = pAddr;
this.gender = gender;
this.birth = birth;
}
public TxPerson() {
}
public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public String getpAddr() {
return pAddr;
}
public void setpAddr(String pAddr) {
this.pAddr = pAddr;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
@Override
public String toString() {
return "TxPerson{" +
"pid=" + pid +
", pname='" + pname + '\'' +
", pAddr='" + pAddr + '\'' +
", gender=" + gender +
", birth=" + birth +
'}';
}
}
创建mapper
@Mapper
public interface TxPersonMapper {
@Select("select * from tx_person")
public List<TxPerson> getPersons();
@Select("select * from tx_person t where t.pid = #{id}")
public TxPerson getPersonById(int id);
@Options(useGeneratedKeys =true, keyProperty = "pid")
@Insert("insert into tx_person(pid, pname, p_addr,gender, birth)" +
" values(#{pid}, #{pname}, #{pAddr},#{gender}, #{birth})")
public void insert(TxPerson person);
@Delete("delete from tx_person where pid = #{id}")
public void delete(int id);
}
单元测试
@SpringBootTest
class Springboot04ApplicationTests {
@Autowired
private TxPersonMapper txPersonMapper;
@Autowired
private ApplicationContext context;
@Test
public void contextLoads() throws SQLException{
// 获取 DataSource Bean
DataSource bean = (DataSource) context.getBean("dataSource");
System.out.println(bean);
}
@Test
public void testMybatis() throws SQLException{
TxPerson p = txPersonMapper.getPersonById(1);
System.out.println(p);
}
}
解决驼峰模式和数据库中下划线不能映射的问题
在配置类中设置MyBatis的映射规则
@Configuration
public class MybatisConfig {
@Bean
public ConfigurationCustomizer getCustomizer(){
return new ConfigurationCustomizer() {
@Override
public void customize(org.apache.ibatis.session.Configuration configuration) {
configuration.setMapUnderscoreToCamelCase(true);
}
};
}
}
查询结果
TxPerson{pid=1, pname='张三', pAddr='北京', gender=1, birth=Thu Jun 14 00:00:00 CST 2018}
通过扫描器注解来扫描
我们可以不再接口上加@Mapper
注解,通过在启动类上添加@MapperScan
注解去指定MyBatis扫描的Mapper接口的包路径
@SpringBootApplication
@MapperScan("com.qcby.springboot04.mapper")
public class Springboot04Application {
public static void main(String[] args) {
SpringApplication.run(Springboot04Application.class, args);
}
}
Mapper接口存放在com.qcby.springboot04.mapper
下
5、Spring Boot整合MyBatis配置文件
创建sqlMapConfig.xml配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
</configuration>
创建映射文件PersonMapper.xml
<?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="cn.tx.mapper.TxPersonMapper">
<select id="getPersons" resultType="TxPerson">
select * from tx_person
</select>
</mapper>
在application.yaml中配置mybatis的信息
mybatis:
#配置MyBatis全局配置文件的路径
config-location: classpath:mybatis/sqlMapConfig.xml
#配置MyBatis映射文件的路径
mapper-locations: classpath:mybatis/mapper/*.xml
#配置类型别名路径,model类所在的包
type-aliases-package: com.qcby.springboot04.model
/mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.tx.mapper.TxPersonMapper">
<select id="getPersons" resultType="TxPerson">
select * from tx_person
</select>
</mapper>
在application.yaml中配置mybatis的信息
mybatis:
#配置MyBatis全局配置文件的路径
config-location: classpath:mybatis/sqlMapConfig.xml
#配置MyBatis映射文件的路径
mapper-locations: classpath:mybatis/mapper/*.xml
#配置类型别名路径,model类所在的包
type-aliases-package: com.qcby.springboot04.model
原文地址:https://blog.csdn.net/jlihan/article/details/145052561
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!