1.引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
2.配置数据集连接信息
spring:
datasource:
username: root
password: 123456
url: jdbc:mysql://localhost:3306/jdbctest?createDatabaseIfNotExist=true&useSSL=false&serverTimezone=GMT%2b8&characterEncoding=utf8&connectTimeout=1000&socketTimeout=15000&autoReconnect=true
#MySQL5.7以上的版本使用com.mysql.cj.jdbc.Driver
#MySQL5.7以下的版本使用com.mysql.jdbc.Driver
driver-class-name: com.mysql.cj.jdbc.Driver
3.操作数据库
自动装配Bean对象
@Autowired
JdbcTemplate jdbcTemplate;
3.1.执行DDL语句
jdbcTemplate通过execute方法执行DDL语句
String sql = "create table sys_user(id int AUTO_INCREMENT,username varchar(255),password varchar(255),age int,PRIMARY KEY (id))ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_0900_ai_ci;";
jdbcTemplate.execute(sql);
System.out.println("创建表成功");
表对应的实体类为
public class SysUser implements Serializable {
public SysUser(){}
public SysUser(Integer id, String username, String password, Integer age){
this.id=id;
this.username=username;
this.password=password;
this.age=age;
}
private Integer id;
private String username;
private String password;
private Integer age;
//省略 get,set方法
@Override
public String toString() {
return "SysUsers{" +
"id=" + id +
"username='" + username + '\'' +
", password='" + password + '\'' +
", age='" + age + '\'' +
'}';
}
}
3.2.添加数据
- 执行update(sql)方法直接插入拼接好的sql数据
- 执行update(sql,Object… args)方法通过占位符的方式插入数据
- 通过KeyHolder+PreparedStatementCreator()配置返回自增的主键信息
//1.插入数据 占位符
String sql = "insert into sys_user (username,password,age) values(?,?,?);";
int ret = jdbcTemplate.update(sql,"王五","123456",18);
if (ret == 0) {
System.out.println("添加失败!");
}
//插入测试数据方便后面分页测试
sql = "insert into sys_user (username,password,age) values('张三','李四',18);";
for (int i = 0; i < 20; i++) {
ret = jdbcTemplate.update(sql);
if (ret == 0) {
System.out.println("添加失败!");
}
}
//2.插入数据并返回主键
KeyHolder keyHolder1 = new GeneratedKeyHolder();
String finalSql = sql;
ret = jdbcTemplate.update(new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
// 设置返回的主键字段名
PreparedStatement ps = con.prepareStatement(finalSql, Statement.RETURN_GENERATED_KEYS);
return ps;
}
}, keyHolder1);
if (ret == 1) {
// 获取到插入数据生成的自增ID
int id = keyHolder1.getKey().intValue();
System.out.println(id);
}
3.3.查询数据
- 执行queryForList()返回map映射好的数据
- 通过实现RowMapper接口手动注入数据到Bean中
- 使用BeanPropertyRowMapper类克隆数据到Bean中
String sql = "select * from sys_user";
//1.使用map封装查询出来的字段名称和字段值
System.out.println("返回map数据");
List<Map<String, Object>> mapList = jdbcTemplate.queryForList(sql);
for (Map<String, Object> map : mapList) {
for (Map.Entry<String, Object> entry : map.entrySet()) {
System.out.println("key=" + entry.getKey() + ",value=" + entry.getValue());
}
}
//2.通过RowMapper获取ResultSet手动赋值给bean
System.out.println("手动注入");
List<SysUser> sysUserList = jdbcTemplate.query(sql, new RowMapper<SysUser>() {
@Override
public SysUser mapRow(ResultSet resultSet, int i) throws SQLException {
SysUser sysUser = new SysUser(resultSet.getInt("id"), resultSet.getString("username"), resultSet.getString("password"), resultSet.getInt("age"));
return sysUser;
}
});
for (SysUser sysUser : sysUserList) {
System.out.println(sysUser.toString());
}
//3.通过BeanPropertyRowMapper 克隆字段
System.out.println("BeanPropertyRowMapper 克隆");
sysUserList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(SysUser.class));
for (SysUser sysUser : sysUserList) {
System.out.println(sysUser.toString());
}
//4.分页查询
Integer totalElements = jdbcTemplate.queryForObject("SELECT count(id) FROM sys_user", Integer.class);
//当前页
Integer currentPage = 1;
//页码大小
Integer pageSize = 5;
sysUserList = jdbcTemplate.query("SELECT * FROM sys_user limit ?,?", new BeanPropertyRowMapper<>(SysUser.class), (currentPage - 1) * pageSize, pageSize);
for (SysUser sysUser : sysUserList) {
System.out.println(sysUser.toString());
}
System.out.println("总记录数=" + totalElements + ",总页数=" + (totalElements % pageSize == 0 ? totalElements / pageSize : totalElements / pageSize + 1));
3.4.修改数据
也可像3.2一样使用占位符方式操作
String sql = "update sys_user set username='李四' where id=1";
int ret = jdbcTemplate.update(sql);
if (ret == 1) {
System.out.println("修改成功");
}
3.5.删除数据
String sql = "delete from sys_user where id=?";
int ret = jdbcTemplate.update(sql, 1);
if (ret == 1) {
System.out.println("删除成功");
}
4.项目配套代码
创作不易,要是觉得我写的对你有点帮助的话,麻烦在gitee上帮我点下 Star
【SpringBoot框架篇】其它文章如下,后续会继续更新。
- 1.搭建第一个springboot项目
- 2.Thymeleaf模板引擎实战
- 3.优化代码,让代码更简洁高效
- 4.集成jta-atomikos实现分布式事务
- 5.分布式锁的实现方式
- 6.docker部署,并挂载配置文件到宿主机上面
- 7.项目发布到生产环境
- 8.搭建自己的spring-boot-starter
- 9.dubbo入门实战
- 10.API接口限流实战
- 11.Spring Data Jpa实战
- 12.使用druid的monitor工具查看sql执行性能
- 13.使用springboot admin对springboot应用进行监控
- 14.mybatis-plus实战
- 15.使用shiro对web应用进行权限认证
- 16.security整合jwt实现对前后端分离的项目进行权限认证
- 17.使用swagger2生成RESTful风格的接口文档
- 18.使用Netty加websocket实现在线聊天功能
- 19.使用spring-session加redis来实现session共享
- 20.自定义@Configuration配置类启用开关
- 21.对springboot框架编译后的jar文件瘦身
- 22.集成RocketMQ实现消息发布和订阅
- 23.集成smart-doc插件零侵入自动生成RESTful格式API文档
- 24.集成FastDFS实现文件的分布式存储
- 25.集成Minio实现文件的私有化对象存储
- 26.集成spring-boot-starter-validation对接口参数校验
- 27.集成mail实现邮件推送带网页样式的消息
- 28.使用JdbcTemplate操作数据库
- 29.Jpa+vue实现单模型的低代码平台
- 30.使用sharding-jdbc实现读写分离和分库分表
- 31.基于分布式锁或xxx-job实现分布式任务调度
- 32.基于注解+redis实现表单防重复提交
- 33.优雅集成i18n实现国际化信息返回
- 34.使用Spring Retry完成任务的重试