Spring学习之JdbcTemplate

本文将使用JdbcTemplate来实现对数据库的一些基本操作。

目录

概念与准备工作

JdbcTemplate操作数据库(添加、修改、删除操作)

JdbcTempate操作数据库(查询)

JdbcTemplate操作数据库(批量操作)


概念与准备工作

概念:Spring对Jdbc进行了封装,使用JdbcTemplate方便实现对数据库的操作

准备工作:

①:引入相关jar包

 

 

 

对应Maven地址

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.26</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.2.9.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>5.2.9.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-orm</artifactId>
      <version>5.2.9.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.2.6</version>
    </dependency>

②:在spring配置文件中配置数据库连接池(具体实现可看IOC学习笔记)

③:配置JdbcTemplate对象,注入DataSource

<!--JdbcTemplate对象-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <!--注入dataSource-->
        <property name="dataSource" ref="dataSource"></property>
    </bean>

④:创建service类,创建dao类,在dao注入jdbcTemplate对象

注意:需要开启组件扫描

service

@Service
public class UserService {
    //注入dao
    @Autowired
    private UserDao userDao;
}

dao

@Repository
public class UserDaoImp implements UserDao {
    //注入JdbcTemplate
    @Autowired
    private JdbcTemplate jdbcTemplate;
}

创建相应数据库

CREATE DATABASE user_db
​
CREATE TABLE t_user(
user_id BIGINT(20),
username VARCHAR(100),
ustatus VARCHAR(50)
)

JdbcTemplate操作数据库(添加、修改、删除操作)

对应数据库表创建实体类

public class User {
    private String userId;
    private String username;
    private String Ustatus;
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getUstatus() {
        return Ustatus;
    }
    public void setUstatus(String ustatus) {
        Ustatus = ustatus;
    }
}

编写service和dao

在service中创建添加用户的方法

    //添加User的方法
    public void addBook(User user){
        userDao.add(user);
    }  

在dao实现add方法并进行数据库添加操作

调用 JdbcTemplate 对象里面的 update 方法可以实现添加操作

方法由两个参数:

①:sql语句

②:可变参数,设置sql语句的值(可将可变参数放在数组里,将数组传进方法里;也可以直接放在方法中)

    @Override
    public void add(User user) {
        //创建 sql 语句
        String sql = "insert into t_user values (?,?,?)";
        //创建可变参数值
        Object[] args = {user.getUserId(), user.getUsername(), user.getUstatus()};
//        int update = jdbcTemplate.update(sql, user.getUserId(), user.getUsername(), user.getUstatus());
        int update = jdbcTemplate.update(sql, args);
        System.out.println(update);
    }

编写测试代码

    @Test
    public void testJdbcTemplate(){
        ApplicationContext context = new FileSystemXmlApplicationContext("G:\\SpringStudy\\Spring-JdbcTemplate\\src\\bean1.xml");
        UserService userService = context.getBean("userService", UserService.class);
        User user = new User();
        user.setUserId("201911111111");
        user.setUsername("李嘉fai");
        user.setUstatus("失信");
        userService.addUser(user);
    }

结果

 

修改和删除方法基本一致

    @Override
    public void update(User user) {
        String sql = "update t_user set username=?,ustatus=? where user_id=?";
        Object[] args = {user.getUsername(),user.getUstatus(),user.getUserId()};
        int update = jdbcTemplate.update(sql, args);
        System.out.println(update);
    }
​
    @Override
    public void delete(String id) {
        String sql = "delete from t_user where user_id=?";
        int update = jdbcTemplate.update(sql, id);
        System.out.println(update);
    }

修改测试

//修改
        User user = new User();
        user.setUserId("201911111111");
        user.setUsername("fai gay");
        user.setUstatus("严重失信");
        userService.updateUser(user);

 

删除测试

//删除
        String id = "201911111111";
        userService.deleteUser(id);

 

JdbcTempate操作数据库(查询)

查询返回某个值

查询表里面由多少条记录,使用 queryForObject 方法

 

两个参数

①:sql语句

②:返回值类型的 Class

查询方法

    @Override
    public int selectCount() {
        String sql = "select count(*) from t_user";
        Integer integer = jdbcTemplate.queryForObject(sql, Integer.class);
        return integer;
    }

测试

//查询条数
        System.out.println("一共 " + userService.findCount() + " 条");

 

查询返回对象

查询用户的详细信息,使用如下方法

 

三个参数

①:sql语句

②:RowMapper(接口,返回不同类型的数据,使用这个接口里面的实现类完成数据封装)

③:可变参数

查询方法

    @Override
    public User findUserInfo(String id) {
        String sql = "select * from t_user where user_id=?";
        User user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), id);
        return user;
    }

测试

//查询表中User
        System.out.println(userService.findOne("201911111111"));

 

查询返回集合

查询用户列表分页,使用 query 方法

 

三个参数

①:sql语句

②:RowMapper(接口,返回不同类型的数据,使用这个接口里面的实现类完成数据封装)

③:可变参数

查询方法

    @Override
    public List<User> findAllUser() {
        String sql = "select * from t_user";
        List<User> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<User>(User.class));
        return query;
    }

测试

//查询用户列表
        System.out.println(userService.findAll("201911111111"));

JdbcTemplate操作数据库(批量操作)

批量操作:操作表里面的多条记录,使用如下方法

 

参数

①:sql语句

②:List 集合,添加的多条记录数据

批量添加方法

    @Override
    public void batchAddUser(List<Object[]> batchArgs) {
        String sql = "insert into t_user values (?,?,?)";
        int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
        System.out.println(Arrays.toString(ints));
    }

测试

        //批量添加
        List<Object[]> list = new ArrayList<>();
        Object[] u1 = {"2019000000","369","酒桶像坨s"};
        Object[] u2 = {"2019222222","wink","#wink状态"};
        Object[] u3 = {"2019333333","Rookie","尽力了"};
        list.add(u1);
        list.add(u2);
        list.add(u3);
        userService.batchAdd(list);

 

批量修改方法

    @Override
    public void batchUpdateUser(List<Object[]> batchArgs) {
        String sql = "update t_user set username=?,ustatus=? where user_id=?";
        int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
        System.out.println(Arrays.toString(ints));
    }

测试

        //批量修改
        List<Object[]> list = new ArrayList<>();
        Object[] u1 = {"JDG.369","叛逆期了","2019000000"};
        Object[] u2 = {"IG.wink","wink在干嘛","2019222222"};
        Object[] u3 = {"V5.Rookie","Rookie尽力了","2019333333"};
        list.add(u1);
        list.add(u2);
        list.add(u3);
        userService.batchUpdate(list);

 

批量删除方法

    @Override
    public void batchDeleteUser(List<Object[]> batchArgs) {
        String sql = "delete from t_user where user_id=?";
        int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
        System.out.println(Arrays.toString(ints));
    }

测试

        //批量删除
        List<Object[]> list = new ArrayList<>();
        Object[] u1 = {"2019000000"};
        Object[] u2 = {"2019222222"};
        Object[] u3 = {"2019333333"};
        list.add(u1);
        list.add(u2);
        list.add(u3);
        userService.batchDelete(list);

  

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
package com.org.dao.impl; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.PreparedStatementCreator; import org.springframework.jdbc.core.RowCallbackHandler; import org.springframework.jdbc.support.GeneratedKeyHolder; import org.springframework.stereotype.Repository; import com.org.JdbcTempBaseDao; import com.org.dao.IUserDao; import com.org.model.User; @Repository @SuppressWarnings("all") public class UserDaoImpl extends JdbcTempBaseDao implements IUserDao { @Override public List<User> getUserList() { String sql="select * from user "; final List<User> list= new ArrayList<User>(); jdbcTemplate.query(sql, new RowCallbackHandler(){ @Override public void processRow(ResultSet rs) throws SQLException { User u=new User(); u.setId(rs.getInt("id")); u.setUsername(rs.getString("username")); u.setPassword(rs.getString("password")); u.setCreateDate(rs.getString("createDate")); u.setModifyDate(rs.getString("modifyDate")); u.setType(rs.getString("type")); list.add(u); } }); return list; } @Override public List<User> getUserLists(Map<String, Object> map) { return null; } @Override public Integer getUserCount(Map<String, Object> map) { String sql = "select count(1) from User where id=? "; return getJdbcTemplate().queryForObject(sql, Integer.class,map); } @Override public User getUserById(Integer primaryKeyId) { String sql = "select id,username, password, createDate, modifyDate,type from User where id=?"; List<User> userList = getJdbcTemplate().query(sql, new BeanPropertyRowMapper(User.class), primaryKeyId); if(userList.size() == 0) { return null; } return userList.get(0); } @Override public void delUserById(Integer primaryKeyId) { String sql = "delete from user where id=?"; getJdbcTemplate().update(sql, primaryKeyId); } @Override public User addUser(final User entity) { final String sql = "insert into User(username, password, createDate, modifyDate,type) values(?,?,?,?,?)"; GeneratedKeyHolder keyHolder = new GeneratedKeyHolder(); getJdbcTemplate().update(new PreparedStatementCreator() { @Override public PreparedStatement createPreparedStatement(Connection connection) throws SQLException { PreparedStatement psst = connection.prepareStatement(sql, new String[]{"id"}); psst.setString(1, entity.getUsername()); psst.setString(2, entity.getPassword()); psst.setString(3, entity.getCreateDate()); psst.setString(4, entity.getModifyDate()); psst.setString(5, entity.getType()); return psst; } }, keyHolder); entity.setId(keyHolder.getKey().intValue()); return entity; } @Override public void editUser(User entity) { String sql="update user set username=?,password=?"; jdbcTemplate.update(sql, User.class,entity); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值