使用JdbcTemplate操作数据库
配置数据源
以MySQL作为自定义数据源。首先在pom.xml中去除对h2的依赖。保留spring-boot-starter-data-jpa的依赖,然后增加Mysql的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
配置数据库相关信息
配置application.properties配置文件。在默认情况下,spring boot会使用其绑定的Tomcat的数据源,我们可以对其进行设置。
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springboot_database
spring.datasource.username=root
spring.datasource.password=123456
# spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#最大等待连接中的数量,设置0为没有限
spring.datasource.tomcat.max-idle=10
#最大连接活动数
spring.datasource.tomcat.max-active=50
#最大等待毫秒数,单位ms,超过时间会出错误信息
spring.datasource.tomcat.max-wait=10000
#数据库连接池初始化连接数
spring.datasource.tomcat.initial-size=5
注意这里注释掉了spring.datasource.driver-class-name=com.mysql.jdbc.Driver
驱动类的配置,但是它还是可以连接数源的,这是因为Spring Boot会尽可能地去判断数据源是说明类型的,然后根据默认的情况去匹配驱动类。在它不能匹配的情况下,你可以明确的配置它,这样就不会使用默认的驱动类了。
在配置数据源后,Spring boot通过其自动配置机制配置好了JdbcTemplate,JdbcTemplate模板是spring框架提供的。准确的来说,JdbcTemplate这种方式不算成功,在实际工作中还是比较少使用的,更多的是Hibernate和MyBatis。所以这里只是简单的介绍下它使用的方法。
SQL建表
CREATE TABLE `t_user` (
`id` int(12) NOT NULL AUTO_INCREMENT,
`user_name` varchar(60) NOT NULL,
/** 性别,1-男,2-女**/
`sex` int(3) NOT NULL DEFAULT '1',
`note` varchar(256) DEFAULT NULL,
PRIMARY KEY (`id`)
) ;
用户POJO
package com.lay.pojo;
public class User {
private Long id = null;
private String userName = null;
private SexEnum sex = null;//枚举
private String note = null;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public SexEnum getSex() {
return sex;
}
public void setSex(SexEnum sex) {
this.sex = sex;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
}
其中有个性别枚举类
SexEnum
package com.lay.enumeration;
public enum SexEnum {
MALE(1, "男"), FEMALE(2, "女");
private int id;
private String name;
SexEnum(int id, String name) {
this.id = id;
this.name = name;
}
public static SexEnum getEnumById(int id) {
for (SexEnum sex : SexEnum.values()) {
if (sex.getId() == id) {
return sex;
}
}
return null;
}
public static SexEnum getEnumByName(String name) {
for (SexEnum sex : SexEnum.values()) {
if (sex.getName().equals(name)) {
return sex;
}
}
return null;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
用户服务接口
JdbcTmpUserService
package com.lay.service;
import java.util.List;
import com.lay.pojo.User;
public interface JdbcTmpUserService {
public User getUser(Long id);
public List<User> findUsers(String userName, String note);
public int insertUser(User user);
public int updateUser(User user);
public int deleteUser(Long id);
}
实现用户接口
JdbcTmpUserServiceImpl
package com.lay.service.impl;
import java.sql.ResultSet;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Service;
import com.lay.enumeration.SexEnum;
import com.lay.pojo.User;
import com.lay.service.JdbcTmpUserService;
@Service
public class JdbcTmpUserServiceImpl implements JdbcTmpUserService {
@Autowired
private JdbcTemplate jdbcTemplate = null;
//获取映射关系
private RowMapper<User> getUserMapper() {
//使用lambda表达式创建用户映射关系
RowMapper<User> userRowMapper = (ResultSet rs, int rownum) -> {
User user = new User();
user.setId(rs.getLong("id"));
user.setUserName(rs.getString("user_name"));
int sexId = rs.getInt("sex");
SexEnum sex = SexEnum.getEnumById(sexId);
user.setSex(sex);
user.setNote(rs.getString("note"));
return user;
};
return userRowMapper;
}
//获取对象
@Override
public User getUser(Long id) {
//执行sql
String sql = "select id,user_name,sex,note from t_user where id=?";
//参数
Object[] params = new Object[] {id};
User user = jdbcTemplate.queryForObject(sql, params, getUserMapper());
return user;
}
//查询用户列表
@Override
public List<User> findUsers(String userName, String note) {
String sql = "select id,user_name,sex,note fromt_user" + "where user_name like concat('%',?,'%')" + "and note like concat('%',?,'%')";
//参数
Object[] params = new Object[] {userName, note};
List<User> userList = jdbcTemplate.query(sql, params, getUserMapper());
return userList;
}
//插入数据库
@Override
public int insertUser(User user) {
String sql = "insert into t_user(user_name,sex,note) values(?,?,?)";
return jdbcTemplate.update(sql, user.getUserName(), user.getSex().getId(), user.getNote());
}
//更新数据库
@Override
public int updateUser(User user) {
String sql = "update t_user set user_name=?,sex=?,note=?" + "where id=?";
return jdbcTemplate.update(sql, user.getUserName(), user.getSex().getId(), user.getNote(), user.getId());
}
//删除数据
@Override
public int deleteUser(Long id) {
String sql = "delete from t_user where id=?";
return jdbcTemplate.update(sql, id);
}
}
控制器
JdbcTemplateController
package com.lay.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.lay.enumeration.SexEnum;
import com.lay.pojo.User;
import com.lay.service.JdbcTmpUserService;
@RestController
@RequestMapping(value = "/user")
public class JdbcTemplateController {
@Autowired
JdbcTmpUserService userService;
@RequestMapping(value = "/insert")
public String insertUser() {
User user = new User();
user.setUserName("zhangsan");
user.setSex(SexEnum.getEnumByName("男"));
user.setNote("i love u");
int result = userService.insertUser(user);
return result + "";
}
//qi
}
测试
启动服务,打开浏览器地址输入http://localhost:8080/user/insert