只是简单直观的做一个区分。
mysql-connector-java VS spring-boot-starter-jdbc
在这篇Stack Overflow文章上写的非常清楚。mysql-connector-java是MySQL提供实现了JDBC定义的驱动(JDBC是一种规范,定义了Java语言如何去操作数据库,也就是实现相关API,是一种接口规范。mysql-connector-java是MySQL提供实现的JDBC定义的驱动),是Java程序中真正操作MySQL数据库的客户端。简单来说mysql-connector-java允许了通过Java访问MySQL。
// 代码来自上面提到的链接
// 这串代码也是早期我在学习JSP时Java操作MySQL的方式
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) {}
}
}
而spring-boot-starter-jdbc,是Spring提供的,它基于mysql-connector-java,又进行了封装,使得代码更加简单。
// 代码来自上面提到的链接
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。
spring-boot-starter-jdbc VS mybatis-spring-boot-starter
我没有看到明确的文章说Mybatis比JdbcTemplate好的。下面就是Mybatisr的实现方式,更具我个人的感觉,比起JdbcTemplate,很明显要更简洁一些,SQL书写更舒服一些,并且SQL和接口分开在两个地方,方便写SQl,也更方便维护。甚至一些比较简单的SQL可以直接用@Select()
这类注解直接写在接口上。
@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 equipment
WHERE username = #{username}
</select>
</mapper>
其他
这篇文章有三种方式代码的详细实现。