每一个成功人士的背后,必定曾经做出过勇敢而又孤独的决定。
放弃不难,但坚持很酷~
本文主要介绍spring boot如何使用JDBCTemplate来访问Mysql,对单表做简单的增删改查操作。 环境说明:
创建数据库,创建数据表,并生成一些测试数据。
CREATE DATABASE spring_boot_study;
USE spring_boot_study;
DROP TABLE IF EXISTS `user_manage`;
CREATE TABLE `user_manage` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_name` varchar(20) NOT NULL,
`password` varchar(20) NOT NULL,
`telPhone` varchar(20) NOT NULL,
`cdate` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `user_manage` VALUES ('1', 'admin', '12345678', '1761581****', '2017-09-11 15:03:49');
INSERT INTO `user_manage` VALUES ('2', 'tom', '12345678', '178********', '2017-09-17 10:19:06');
INSERT INTO `user_manage` VALUES ('3', 'seven', 'admin111', '176********', '2017-10-27 20:33:40');
INSERT INTO `user_manage` VALUES ('4', 'Mary', '11111111', '1786281****', '2017-12-12 16:33:53');
根据个人喜好选择配置文件的类型,在这里我选择配置application.yml,主要对datasource进行一些配置说明。
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/spring_boot_study?allowMultiQueries=true&serverTimezone=GMT%2B8
username: root
password: root
server:
port: 8081
servlet:
context-path: /spring-boot-study
至少引入下面三个依赖:
<!--引入JDBC的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--引入mysql连接-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--引入web依赖,可以使用@RequestMapping,@RestController等注解-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
我们如果要制作API接口的话,需要编写四个层:实体(Entity)层;DAO层;Service层;Controller层。
public class UsersEntity {
private int id;
private String userName;
private String password;
private String telPhone;
private String cdate;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getTelPhone() {
return telPhone;
}
public void setTelPhone(String telPhone) {
this.telPhone = telPhone;
}
public String getCdate() {
return cdate;
}
public void setCdate(String cdate) {
this.cdate = cdate;
}
@Override
public String toString() {
return "UsersEntity{" +
"id=" + id +
", userName='" + userName + '\'' +
", password='" + password + '\'' +
", telPhone='" + telPhone + '\'' +
", cdate='" + cdate + '\'' +
'}';
}
}
由接口和实现类组成:
public interface UsersDAO {
/**
* @description: 获取表中所有信息。
* @return: java.util.List<com.study.spring.entity.UsersEntity>
*/
List<UsersEntity> usersList();
/**
* @description: 通过name来查询信息
* @param: name
* @return: com.study.spring.entity.UsersEntity
*/
UsersEntity findUserOne(String name);
/**
* @description: 向表中插入一条数据
* @param: usersEntity
* @return: void
*/
void saveUser(UsersEntity usersEntity);
/**
* @description: 更新表中单条数据
* @param: usersEntity
* @return: void
*/
void updateUser(UsersEntity usersEntity);
/**
* @description: 删除表中单条数据
* @param: name
* @return: void
*/
void removeUser(String name);
}
实现类:
@Repository
public class UsersDaoImpl implements UsersDAO {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public List<UsersEntity> usersList() {
List<UsersEntity> list = jdbcTemplate.query("select * from user_manage", new Object[]{}, new BeanPropertyRowMapper(UsersEntity.class));
return list;
}
@Override
public UsersEntity findUserOne(String name) {
List<UsersEntity> list = jdbcTemplate.query("select * from user_manage where user_name = ?", new Object[]{name}, new BeanPropertyRowMapper(UsersEntity.class));
if (list != null && list.size() > 0) {
UsersEntity usersEntity = list.get(0);
return usersEntity;
} else {
return null;
}
}
@Override
public void saveUser(UsersEntity usersEntity) {
jdbcTemplate.update("insert into user_manage(user_name, password, telPhone) values(?, ?, ?)",
usersEntity.getUserName(), usersEntity.getPassword(), usersEntity.getTelPhone());
}
@Override
public void updateUser(UsersEntity usersEntity) {
jdbcTemplate.update("UPDATE user_manage SET password=?, telPhone=? WHERE user_name=?",
usersEntity.getPassword(), usersEntity.getTelPhone(), usersEntity.getUserName());
}
@Override
public void removeUser(String name) {
jdbcTemplate.update("DELETE FROM user_manage WHERE user_name = ?", name);
}
}
说明:
由接口与实现类组成:
public interface UsersService {
/**
* @description: 获取表中所有信息。
* @return: java.util.List<com.study.spring.entity.UsersEntity>
*/
List<UsersEntity> usersList();
/**
* @description: 通过name来查询信息
* @param: name
* @return: com.study.spring.entity.UsersEntity
*/
UsersEntity findUserOne(String name);
/**
* @description: 向表中插入一条数据
* @param: usersEntity
* @return: void
*/
void saveUser(UsersEntity usersEntity);
/**
* @description: 更新表中单条数据
* @param: usersEntity
* @return: void
*/
void updateUser(UsersEntity usersEntity);
/**
* @description: 删除表中单条数据
* @param: name
* @return: void
*/
void removeUser(String name);
}
实现类:
@Service
public class UsersServiceImpl implements UsersService {
@Autowired
private UsersDAO usersDao;
@Override
public List<UsersEntity> usersList() {
return usersDao.usersList();
}
@Override
public UsersEntity findUserOne(String name) {
return usersDao.findUserOne(name);
}
@Override
public void saveUser(UsersEntity usersEntity) {
usersDao.saveUser(usersEntity);
}
@Override
public void updateUser(UsersEntity usersEntity) {
usersDao.updateUser(usersEntity);
}
@Override
public void removeUser(String name) {
usersDao.removeUser(name);
}
}
说明:
@RestController
@RequestMapping("users")
public class UsersController {
@Autowired
private UsersService usersService;
/**
* @description: 获取表中所有信息。
* @return: java.util.List<com.study.spring.entity.UsersEntity>
*/
@RequestMapping(value = "list", method = RequestMethod.GET)
public List<UsersEntity> list() {
return usersService.usersList();
}
/**
* @description: 通过name来查询信息
* @param: name
* @return: com.study.spring.entity.UsersEntity
*/
@RequestMapping(value = "{name}", method = RequestMethod.GET)
public UsersEntity findUserOne(@PathVariable("name") String name){
return usersService.findUserOne(name);
}
/**
* @description: 向表中插入一条数据
* @param: usersEntity
* @return: java.util.Map<java.lang.String,java.lang.Boolean>
*/
@RequestMapping(value = "save", method = RequestMethod.POST)
public Map<String,Boolean> save(UsersEntity usersEntity) {
Map<String,Boolean> map = new HashMap<>();
try {
usersService.saveUser(usersEntity);
map.put("status",true);
} catch (Exception e) {
map.put("status",false);
}
return map;
}
/**
* @description: 更新表中数据
* @return: void
*/
@RequestMapping(value = "update", method = RequestMethod.PUT)
public Map<String,Boolean> update(UsersEntity usersEntity) {
Map<String,Boolean> map = new HashMap<>();
try {
usersService.updateUser(usersEntity);
map.put("status",true);
} catch (Exception e) {
map.put("status",false);
}
return map;
}
@RequestMapping(value = "remove", method = RequestMethod.DELETE)
public Map<String,Boolean> remove(@RequestParam(value = "userName",required = true) String name) {
Map<String,Boolean> map = new HashMap<>();
try {
usersService.removeUser(name);
map.put("status",true);
} catch (Exception e) {
e.printStackTrace();
map.put("status",false);
}
return map;
}
}
说明:
通过Jrebel v2018.2.2
来启动spring boot
程序,可以实现热部署(代码修改即时生效)。
查询所有
浏览器访问:http://localhost:8081/spring-boot-study/users/list,如下图所示:
条件查询:根据name查询单条信息
浏览器访问:http://localhost:8081/spring-boot-study/users/tom,如下图所示:
这里我们使用Postman工具,来测试增加、更新、删除信息。 增加一条信息
更新一条信息:
删除一条信息
Spring4之后新加入的注解,原来返回json需要@ResponseBody和@Controller配合。 即@RestController是@ResponseBody和@Controller的组合注解。
当使用@RequestMapping URI template 样式映射时, 即 someUrl/{paramId}, 这时的paramId可通过 @Pathvariable注解绑定它传过来的值到方法的参数上。具体可见上述实例的删除代码逻辑。
这是一个非常常见的注解。 比如在上述代码示例中所示:在Controller层,需要使用@Autowired来调用Service层;在Service层,需要使用@Autowired来调用DAO层;在DAO层实现类中,通过@Autowired来调用JdbcTemplate。
前面说了那么多,用几句话来概括一下。
在以后,我会抽出时间来学习并分享spring boot的基本用法。除了大数据服务组件之外,现在非常火爆的spring boot框架也不能落下,一起学习吧。
源码已上传至https://github.com/841809077/spring-boot-study
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有