使用jdbcTemplate操作数据库


返回目录

为简化jdbc操作,可以直接使用spring提供的JdbcTeamplate进行数据库的操作。

1. 配置依赖

相关数据库SQL

/* 用户表 */
drop database if exists boot0107;
create database boot0107;
use boot0107;

/* 创建用户表*/
create table if not exists tb_user(
    id varchar(36) comment '主键' not null,
    name varchar(50) comment '用户名',
    age int COMMENT '年龄',
    birthday datetime comment '出生日期',
		primary key (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 comment '用户表' ;


insert into tb_user(id,name,age,birthday) values('1','张三',15,str_to_date('2019-01-23','%Y-%m-%d'));
insert into tb_user(id,name,age,birthday) values('2','李四',17,str_to_date('2012-03-21','%Y-%m-%d'));
insert into tb_user(id,name,age,birthday) values('3','王五',23,str_to_date('2010-11-23','%Y-%m-%d'));
insert into tb_user(id,name,age,birthday) values('4','赵六',35,str_to_date('2009-07-23','%Y-%m-%d'));
insert into tb_user(id,name,age,birthday) values('5','王二麻子',79,str_to_date('2018-12-23','%Y-%m-%d'));

添加maven依赖

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

添加数据库相关配置

spring:
  datasource:
    url: "jdbc:mysql://127.0.0.1:3306/boot0107?useSSL=false&useunicode=true&characterEncoding=utf8&autoReconnect=true\
              &rewriteBatchedStatements=true&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull"
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver

2. 编写service

编写简单的增删改查,具体说明请看代码中注释

@Service("userService")
public class UserService {
    private static final Logger log = LoggerFactory.getLogger(UserService.class);
    @Resource
    private JdbcTemplate jdbcTemplate;

    public void addUser(User user){
        jdbcTemplate.update("insert into tb_user(id,name,age,birthday) values(?,?,?,?)",user.getId(),user.getName(),
                user.getAge(),user.getBirthday());
    }

    /**
     * 按照指定字段更新
     * @param params map类型参数
     * @param tableName 需要进行更新的数据库表
     * @param idName 主键字段名称
     */
    public void updateUser(Map<String,Object> params,String tableName,String idName){
        StringBuilder sqlBuff = new StringBuilder("update "+tableName+" set ");
        List<Object> paramsList =new ArrayList<>();
        for(Map.Entry entry:params.entrySet()){
            String key = entry.getKey().toString();
            if(!key.equals(idName)){
                sqlBuff.append(key+"=?,");
                paramsList.add(entry.getValue());
            }
        }
        paramsList.add(params.get(idName));
        String sql = sqlBuff.substring(0,sqlBuff.length()-1)+" where "+idName+" = ?";
        if(log.isInfoEnabled()){
            log.info("执行SQL。 sql->{},params-->{}",sql,paramsList.toArray());
        }
        jdbcTemplate.update(sql, paramsList.toArray());
    }

    /**
     * 按照主键进行删除
     * @param params 主键拼接的列表
     * @param tableName 需要进行更新的数据库表
     * @param idName 主键字段名称
     */
    public void deleteUser(List<Object> params,String tableName,String idName){
        if(params==null ||params.size()==0){
            return;
        }
        StringBuilder sqlBuff = new StringBuilder("delete from "+tableName+" where "+idName+" in ( ");
        int length = params.size();
        for(int i=0;i<length;i++){
            sqlBuff.append("?,");
        }
        String sql = sqlBuff.substring(0,sqlBuff.length()-1)+")";
        if(log.isDebugEnabled()){
            log.debug("执行SQL。 sql->{},params-->{}",sql,params.toArray());
        }
        jdbcTemplate.update(sql, params.toArray());
    }

    /**
     * @param idList  需要进行查询的id列表,使用RowMapper接口
     * @return
     */
    public List<User> queryList(List<Object> idList){
        StringBuilder sqlBuff  =new StringBuilder("select * from tb_user ");
        String sql =null;
        if(idList!=null&&idList.size()>0){
            int length = idList.size();
            if(length>0){
                sqlBuff.append("where id in ( ");
                for(int i=0;i<length;i++){
                    sqlBuff.append("?,");
                }
                sql = sqlBuff.substring(0,sqlBuff.length()-1)+")";
            }
        }else{
            sql = sqlBuff.toString();
        }
       List<User> retList = jdbcTemplate.query(sql, idList.toArray(), (rs,i)->{
           User user = new User();
           user.setId(rs.getString("id"));
           user.setBirthday(rs.getDate("birthday").toLocalDate());
           user.setName(rs.getString("name"));
           user.setAge(rs.getInt("age"));
           return user;
       });

       return retList;
    }

    /**
     * @param idList  需要进行查询的id列表,使用BeanPropertyRowMapper接口
     * @return
     */
    public List<User> queryList2(List<Object> idList){
        StringBuilder sqlBuff  =new StringBuilder("select * from tb_user ");
        String sql =null;
        if(idList!=null&&idList.size()>0){
            int length = idList.size();
            if(length>0){
                sqlBuff.append("where id in ( ");
                for(int i=0;i<length;i++){
                    sqlBuff.append("?,");
                }
                sql = sqlBuff.substring(0,sqlBuff.length()-1)+")";
            }
        }else{
            sql = sqlBuff.toString();
        }
        List<User> retList = jdbcTemplate.query(sql, idList.toArray(), new BeanPropertyRowMapper<>(User.class));

        return retList;
    }
}

3. 测试

@SpringBootTest
public class UserTest {

    @Autowired
    private UserService userService;


    @Test
    @DisplayName("user:add")
    public void test1(){
        User user = new User();
        user.setId("pid666");
        user.setAge(38);
        user.setName("张三9");
        user.setBirthday(LocalDate.of(2001,1,15));
        userService.addUser(user);
    }

    @Test
    @DisplayName("user:udpate")
    public void test2(){
        Map<String,Object> params = new HashMap<>();
        params.put("id","1");
        params.put("name","太祖长拳");
        params.put("birthday",LocalDate.of(2020,7,7));
        userService.updateUser(params,"tb_user","id");
    }

    @Test
    @DisplayName("user:delete")
    public void test3(){
        String tableName = "tb_user";
        String idName = "id";
        userService.deleteUser(null,tableName,idName);
        userService.deleteUser(Arrays.asList("pid666"),tableName,idName);

    }

    @Test
    @DisplayName("user:query")
    public void test4(){
        System.out.println("------------------");
        List<User> list = userService.queryList(Arrays.asList("1","3","4"));
        Optional.ofNullable(list).orElse(new ArrayList<>())
                .stream().forEach(System.out::println);
    }

    @Test
    @DisplayName("user:query by BeanPropertyRowMapper")
    public void test5(){
        System.out.println("------------------");
        List<User> list = userService.queryList(Arrays.asList("1","3","4"));
        Optional.ofNullable(list).orElse(new ArrayList<>())
                .stream().forEach(System.out::println);
    }

}

代码链接:https://gitee.com/johnny/learn-demo/tree/master/springboot-demo/boot01-07-jdbctemplate

JdbcTemplate是Spring框架提供的一个用于简化数据库操作的工具类。它封装了JDBC的细节,提供了一组简洁的API来执行SQL语句并处理结果集。下面是使用JdbcTemplate进行数据库操作的基本步骤: 1. 配置数据源:在Spring配置文件配置数据源,例如使用`org.springframework.jdbc.datasource.DriverManagerDataSource`类配置一个基于驱动程序管理的数据源。 2. 创建JdbcTemplate对象:在Spring配置文件创建一个`org.springframework.jdbc.core.JdbcTemplate`对象,并将数据源注入到该对象。 3. 编写SQL语句:根据需求编写SQL语句,可以使用占位符来代替参数。 4. 执行SQL语句:使用JdbcTemplate对象的方法执行SQL语句,例如`update()`方法用于执行INSERT、UPDATE和DELETE语句,`query()`方法用于执行SELECT语句。 5. 处理结果集:根据需要处理查询结果集,可以使用`RowMapper`接口来映射每一行的数据到Java对象。 下面是一个简单的示例代码: ```java import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; public class UserDao { private JdbcTemplate jdbcTemplate; public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public void addUser(User user) { String sql = "INSERT INTO user (id, name, age) VALUES (?, ?, ?)"; jdbcTemplate.update(sql, user.getId(), user.getName(), user.getAge()); } public User getUserById(int id) { String sql = "SELECT * FROM user WHERE id = ?"; RowMapper<User> rowMapper = new UserRowMapper(); return jdbcTemplate.queryForObject(sql, rowMapper, id); } } class User { private int id; private String name; private int age; // 省略getter和setter方法 } class UserRowMapper implements RowMapper<User> { @Override public User mapRow(ResultSet rs, int rowNum) throws SQLException { User user = new User(); user.setId(rs.getInt("id")); user.setName(rs.getString("name")); user.setAge(rs.getInt("age")); return user; } } ``` 以上代码演示了如何使用JdbcTemplate进行数据库操作,包括插入数据和查询数据。你可以根据具体的需求进行扩展和修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值