Springboot单元测试和Jdbctemplate的使用

1、搭建springboot项目,加入mysql和jdbc依赖

                <!--mysql-->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
		<!--jdbc-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>

2、在application.yml中配置数据库连接

#数据库配置
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/db_test
    username: root
    password: root

mysql中student表数据:



3、单元测试

如果使用的springboot版本是1.4.0之前的,需要将@SpringBootTest改为@SpringApplicationConfiguration和@WebAppConfiguration

(1)查询

从数据库中查询id为2的数据

在使用jdbctemplate的queryForObject方法查询时,如果结果集为空或者结果集size大于2,将会抛出异常,如果想在结果集为空时,返回null,需要继承jdbctemplate重写该方法。

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class JDBCTest {


    @Autowired
    private JdbcTemplate jdbcTemplate;//创建jdbctemplate对象,并使用spring的自动注入完成实例化

    @Test
    public void selectTest1() {
        Student student;
        String sql = "select * from student where id=?";//sql语句
        Object[] params = new Object[]{2};//设置参数
        //使用queryForObject方法查询,当查询结果为空或者结果size大于2时,会抛出异常
        student = (Student) jdbcTemplate.queryForObject(sql, params, new RowMapper() {
            //重写mapRow方法,resultSet为查询的结果集
            @Override
            public Object mapRow(ResultSet resultSet, int i) throws SQLException {
                Student stu = new Student();
                stu.setId(resultSet.getInt("id"));
                stu.setAge(resultSet.getInt("age"));
                stu.setName(resultSet.getString("name"));
                return stu;
            }
        });
        System.out.println(student.getId());
        System.out.println(student.getAge());
        System.out.println(student.getName());
    }
}
输出结果

2
19
lysin


如果不想重写mapRow方法,可以使用execute方法,并创建一个PreparedStatementCallback匿名类,重写doInPrepareStatement方法,然后使用JDBC中的PreparedStatement执行查询。

   @Test
    public void selectTest2() {
        Student student;
        String sql = "select * from student where id=?";//sql语句
        //使用queryForObject方法查询,当查询结果为空或者结果size大于2时,会抛出异常
        student = (Student) jdbcTemplate.execute(sql,new PreparedStatementCallback(){
            @Override
            public Object doInPreparedStatement(PreparedStatement preparedStatement) throws SQLException, DataAccessException {
                preparedStatement.setInt(1,1);//设置第一个参数为1
                ResultSet resultSet=preparedStatement.executeQuery();//执行查询
                if(resultSet.next()){
                    Student stu = new Student();
                    stu.setId(resultSet.getInt("id"));
                    stu.setAge(resultSet.getInt("age"));
                    stu.setName(resultSet.getString("name"));
                    return stu;//当查询结果有多条,也可以创建list返回
                }else{
                    return null;
                }

            }
        });
        if(student!=null){
            System.out.println(student.getId());
            System.out.println(student.getAge());
            System.out.println(student.getName());
        }else {
            System.out.println("未找到数据");
        }
    }
输出:

未找到数据

(2)查询

将id为2的name改为aaa

    @Test
    public void updateTest(){
        int result=0;
        String sql="update student set name=? where id=?";
        Object[] params = new Object[]{"aaaaa",2};//设置参数
        result=jdbcTemplate.update(sql,params);//返回受影响的行数
        System.out.println(result);
    }
输出结果:

1
数据库记录:

+----+------+--------+
| id | age  | name   |
+----+------+--------+
|  2 |   19 | aaaaa  |
|  3 |   21 | wangwu |
+----+------+--------+

(3)插入

 @Test
    public void insertTest(){
        int result=0;
        String sql="insert into student(id,age,name) values(?,?,?)";
        Object[] params = new Object[]{4,21,"wangwu"};//设置参数
        result=jdbcTemplate.update(sql,params);//通过update方法实现插入功能
        System.out.println(result);
    }
+----+------+--------+
| id | age  | name   |
+----+------+--------+
|  2 |   19 | aaaaa  |
|  3 |   21 | wangwu |
|  4 |   21 | wangwu |
+----+------+--------+
(4)删除

删除id为2的数据

   @Test
    public void deleteTest(){
        int result=0;
        String sql="delete from student where id=?";
        Object[] params = new Object[]{2};//设置参数
        result=jdbcTemplate.update(sql,params);//通过update方法实现插入功能
        System.out.println(result);
    }
+----+------+--------+
| id | age  | name   |
+----+------+--------+
|  3 |   21 | wangwu |
|  4 |   21 | wangwu |
+----+------+--------+


参考:

http://www.cnblogs.com/caoyc/p/5630622.html

http://blog.csdn.net/view1933/article/details/7579169

http://www.cnblogs.com/ilinuxer/p/6481228.html

http://blog.csdn.net/zknxx/article/details/53244255

http://n-meng.iteye.com/blog/1055870

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值