SpringBoot使用JdbcTemplate实现CRUD功能
SpringBoot2.x使用JdbcTemplate实现增删改查,非常适合初学者学习案例。
项目结构
项目结构
第一步:开发环境准备
JDK:1.8 Maven:apache-maven-3.6.0
第二步:配置pom.xml
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> <relativePath/> </parent> <properties> <java.version>1.8</java.version> <!-- 解决maven的pom.xml文件第一行报错 Unknown Error --> <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.46</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <scope>provided</scope> </dependency> </dependencies>
第三步:编写application.yml文件
server: port: 8081 spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC username: root password: 123456
第四步:创建t_student表
create table `t_student` ( sid INT(10) UNSIGNED NOT NULL AUTO_INCREMENT , sno VARCHAR(10) DEFAULT NULL , name VARCHAR(100) DEFAULT NULL , sex VARCHAR(10) DEFAULT NULL, PRIMARY KEY(sid) )ENGINE=INNODB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; insert into `t_student` (`sid`, `sno`, `name`, `sex`) values('1','001','小碗','女'); insert into `t_student` (`sid`, `sno`, `name`, `sex`) values('10','002','小婷','女'); insert into `t_student` (`sid`, `sno`, `name`, `sex`) values('11','003','小文','男'); insert into `t_student` (`sid`, `sno`, `name`, `sex`) values('12','004','小米','男');
第五步:编写启动类
package com.xiaowen; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class JdbcTemplateApplication { public static void main(String[] args) { SpringApplication.run(JdbcTemplateApplication.class, args); } }
SpringBoot2.x使用JdbcTemplate实现增删改查
第六步:编写POJO类
package com.xiaowen.model; import java.io.Serializable; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; /** * 学生实体类 * @author xiaowen * */ @Data @AllArgsConstructor @NoArgsConstructor public class Student implements Serializable { private static final long serialVersionUID = 1L; private Integer sid; private String sno; private String name; private String sex; }
第七步:编写Dao数据层
package com.xiaowen.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Statement; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.PreparedStatementCreator; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.support.GeneratedKeyHolder; import org.springframework.jdbc.support.KeyHolder; import org.springframework.stereotype.Repository; import com.xiaowen.model.Student; /** * Dao数据层 * @author xiaowen * */ @Repository public class StudentDao { @Autowired private JdbcTemplate jdbcTemplate; /** * 查询全部 * @return */ public List<Student> findAll(){ String sql="select *from t_student"; //将结果集数据映射成Student对象 RowMapper<Student> rm=new BeanPropertyRowMapper<>(Student.class); return jdbcTemplate.query(sql, rm); } /** * 更新 * @param student */ public void updateStudent(Student student) { String sql="update t_student set sno=?,name=?,sex=? where sid=?"; jdbcTemplate.update(sql, new Object[] {student.getSno(),student.getName(),student.getSex(),student.getSid()}); } /** * 删除 * @param sid */ public void deleteStudent(Integer sid) { String sql="delete from t_student where sid=?"; jdbcTemplate.update(sql,new Object[] {sid}); } /** * 新增 * @param student * @return */ public Student addStudent(Student student) { String sql="insert into t_student(sno,name,sex) values(?,?,?)"; //插入数据后获取主键对象 KeyHolder holder=new GeneratedKeyHolder(); jdbcTemplate.update(new PreparedStatementCreator() { @Override public PreparedStatement createPreparedStatement(Connection con) throws SQLException { //插入数据后,将被插入数据的主键返回 PreparedStatement pst=con.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS); pst.setString(1, student.getSno()); pst.setString(2, student.getName()); pst.setString(3, student.getSex()); return pst; } },holder); //获取被插入数据库的主键,注入到studet对象 int value = holder.getKey().intValue(); student.setSid(value); return student; } }
第八步:编写service业务逻辑层
package com.xiaowen.service; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.xiaowen.dao.StudentDao; import com.xiaowen.model.Student; /** * service业务逻辑处理层 * @author xiaowen * */ @Service public class StudentService { @Autowired private StudentDao studentDao; public List<Student> findAll(){ return studentDao.findAll(); } public void updateStudent(Student student) { studentDao.updateStudent(student); } public void deleteStudent(Integer sid) { studentDao.deleteStudent(sid); } public Student addStudent(Student student) { return studentDao.addStudent(student); } }
SpringBoot2使用JdbcTemplate
第九步:编写Controller控制层
package com.xiaowen.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.xiaowen.model.Student; import com.xiaowen.service.StudentService; /** * Student控制层 * @author xiaowen * */ @RestController @RequestMapping("/student") public class StudentController { @Autowired private StudentService studentService; /** * 查询 * @return */ @RequestMapping("/findAll") public List<Student> findAll(){ return studentService.findAll(); } /** * 新增 * @param student * @return */ @RequestMapping("/add") public Student add(Student student) { return studentService.addStudent(student); } /** * 更新 * @param student */ @RequestMapping("/update") public void update(Student student) { studentService.updateStudent(student); } /** * 删除 * @param sid */ @RequestMapping("/delete") public void delete(Integer sid) { studentService.deleteStudent(sid); } }
第十步:运行JdbcTemplateApplication类
1、查询功能访问:http://localhost:8081/student/findAll,效果如下
查询功能
2、新增功能访问:http://localhost:8081/student/add?sno=006&name=婷婷&sex=女,效果如下
新增功能
3、更新功能访问:http://localhost:8081/student/update?sid=16&sno=007&name=婷婷001&sex=男,效果如下
更新功能
4、删除功能访问:http://localhost:8081/student/delete?sid=16,查询之后效果如下
删除后并查询