mysql-connector-java和spring-boot-starter-jdbc和mybatis-spring-boot-start
JDBC是什么意思?
JDBC是使用java语言操作mysql数据库的规范,java语言必须按照这个规范写才可以操作mysql数据库。
mysql-connector-java
在最开始的时候 程序中是不允许使用java语言操作mysql数据库的 但是mysql-connector-java打破了这个局面。简单来说就是mysql-connector-java允许了可以通过java去操作mysql数据库。mysql-connector-java相当于是mysql数据库的客户端。
mysql-connector-java是Mysql提供的实现了JDBC定义的驱动,什么是JDBC呢?JDBC是一种规范,定义了Java语言该如何去操作数据库,也就是实现相关的API,是一种java语言操作数据库的接口规范。
相关代码
Connection connection = null;
Statement statement = null;
ResultSet rs = null;
int count;try {connection = dataSource.getConnection();statement = connection.createStatement();rs = statement.executeQuery("select count(*) from foo");if(rs.next()) {count = rs.getInt(0);}
} catch (SQLException exp) {throw new RuntimeException(exp);
} finally {if(connection != null) {try { connection.close(); } catch (SQLException exp) {}}if(statement != null) {try { statement.close(); } catch (SQLException exp) {}}if(rs != null) {try { rs.close(); } catch (SQLException exp) {}}
}
上面的代码是最原始的java操作mysql数据库的结构,可以说很麻烦,因此才有了后面的spring-boot-starter-jdbc。
spring-boot-starter-jdbc
spring-boot-starter-jdbc是Spring提供的,它基于mysql-connector-java又进行了封装,使得java操作mysql的方法更加的简单化了。
其实最主要的还是spring-boot-starter-jdbc中引入了操作mysql数据库的模板JdbcTemplate。我们上面已经说了JDBC其实就是表示一种规范,一种Java操作Mysql的规范 包括怎么连接mysql 怎么接收返回值 这个过程要怎么写?
所以JdbcTemplate类其实就是提供了一种新的JDBC模板,让我们之前的java操作mysql的规范更加的简单化了。
相关代码如下:
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
int count = jdbcTemplate.queryForObject("select count(*) from foo", Integer.class);
// 稍微复杂些的,代码来自下面提到的链接
public Book findBookInfo(String id) {String sql = "select * from tb_book where id=?";Book book = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Book>(Book.class), id);return book;
}
也就是mysql-connector-java提供的是JDBC,而spring-boot-starter-jdbc提供的是更加简化版的JDBC-----JdbcTemplate。
mybatis-spring-boot-starter
mybatis-spring-boot-start是更加简化版的JDBC,它比起spring-boot-starter-jdbc提供的JDBC规范更加的简化。最大的特点就是SQL书写更加的舒服了,可以放到mapper.xml文件里面。而且sql书写可以和接口分开,什么意思呢?比方说mysql-connector-java提供的JDBC,写完sql语句之后 下面就要写调用接口了 如下图:
而spring-boot-starter-jdbc提供的JDBCTemplate新的规范,也是需要把sql语句和接口写在一块的 如下图:
但是如果是mybatis-spring-boot-starter的话,我们就可以把sql语句写到mapper.xml映射文件中,然后接口单独写到动态代理接口中,想要操作数据库的时候,直接调用动态代理接口就可以了 无需再在动态代理接口中传入sql语句,这样是不是方便了很多。
如下:
@Mapper
@Repository
public interface LoginDao {void insertUser(@Param("ID") String ID, @Param("password") String password, @Param("phone") String phone);
}
<mapper namespace="com.dao.LoginDao"><insert id="insertUser">INSERT INTO user(ID,phone,password)VALUES(#{ID},#{phone},#{password});</insert><select id="selectEquipment" resultType="Equipment">SELECT *FROM equipmentWHERE username = #{username}</select>
</mapper>