公众号merlinsea
java原生JDBC访问数据库
- jdbc是Java数据库连接(Java Database Connectivity,简称JDBC)是Java语⾔中⽤来规范客户端程序如何来访问数据库的应⽤程序接⼝,提供了诸如查询和更新数据库中数据的⽅法。
- 原生jdbc的缺点(生产环境中不会用原生jdbc访问数据库)
- 每次要加载驱动,连接信息是硬编码
- sql和java代码耦合⼀起,改动不易
- 参数设置缺少灵活性
- 处理结果集麻烦,不能⾃动映射到实体类
- 连接资源不能复⽤,资源浪费
- 原生jdbc代码实现
- pom.xml依赖包
<!--springboot jdbc 驱动--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!--mysql连接--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
- 业务代码使用jdbc访问数据库的步骤
- 加载JDBC驱动程序
- 创建数据库的连接
- 创建preparedStatement
- 执⾏SQL语句
- 处理结果集
- 关闭JDBC对象资源
public class JdbcApp { public static void main(String [] args) throws Exception { //加载jdbc驱动的类对象 Class.forName("com.mysql.cj.jdbc.Driver"); //连接 String url = "jdbc:mysql://127.0.0.1:3306/classDB?useUnicode=true&characterEncoding=utf-8&useSSL=false"; String username = "root"; String password = "classroot"; //获取连接对象,并连接数据库 Connection connection = DriverManager.getConnection(url,username,password); //获取语句对象 Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery("select * from video"); while (resultSet.next()){ System.out.println("视频标题:"+resultSet.getString("title")); } statement.close(); } }
- spring的jdbcTemplate访问数据库
- JdbcTemplate 是 Spring 对 JDBC 使⽤的⼀个基本的封装。他主要是帮助程序员实现了数据库连接的管理,其余的使⽤⽅式和直接使⽤ JDBC 没有什么⼤的区别。
- 在pom文件中引入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.15</version> </dependency>
- 在application.properties中增加数据库的配置
#通用数据源配置 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/class_mysql?charset=utf8mb4&useSSL=false spring.datasource.username=root spring.datasource.password=liangxxxyyy # Hikari 数据源专用配置 spring.datasource.hikari.maximum-pool-size=20 spring.datasource.hikari.minimum-idle=5
- dao层用jdbcTemplate配合sql语句实现数据库的查询(核心)
/** * 使用jdbcTemplate实现对数据库的增删改查操作 */ @Repository public class UserDaoImpl implements UserDao { @Resource private JdbcTemplate jdbcTemplate; @Override public Boolean add(User user) { String sql = "INSERT INTO user(id,NAME) VALUES(?,?)"; return jdbcTemplate.update(sql, user.getId(), user.getName()) > 0; } @Override public Boolean update(User user) { String sql = "UPDATE user SET NAME = ? WHERE id = ?"; return jdbcTemplate.update(sql, user.getName(), user.getId()) > 0; } @Override public boolean delete(Long id) { String sql = "DELETE FROM user WHERE id = ?"; return jdbcTemplate.update(sql, id) > 0; } @Override public User locate(Long id) { String sql = "SELECT * FROM user WHERE id=?"; SqlRowSet rs = jdbcTemplate.queryForRowSet(sql, id); if (rs.next()) { return generateEntity(rs); } return null; } @Override public List<User> matchName(String name) { String sql = "SELECT * FROM user WHERE NAME LIKE ?"; SqlRowSet rs = jdbcTemplate.queryForRowSet(sql, "%" + name + "%"); List<User> users = new ArrayList<>(); while (rs.next()) { users.add(generateEntity(rs)); } return users; } private User generateEntity(SqlRowSet rs) { User weChatPay = new User(); weChatPay.setId(rs.getLong("id")); weChatPay.setName(rs.getString("NAME")); return weChatPay; } }