Spring企业应用之数据库连接JDBC

Java原生方式使用JDBC

第一步:加载及注册驱动程序

使用Class.forName("指定数据库的驱动程序")方法加载注册驱动,例如可用下面代码来加载mysql的驱动程序:

Class.forName("com.mysql.jdbc.Driver");

这里使用了桥接模式的设计模式,将抽象和实现分离,通过这种方式java代码可以定义抽象标准,接着由各个数据库厂商自己去实现驱动程序。

第二步:创建数据库连接对象

通过DriverManager类创建数据库连接对象Connection,例如可用下面代码来获取mysql数据库连接

Connection con = DriverManager.getConnection("jdbc:mysql://ip:port/name", username, password);

第一步加载驱动程序时,已经将驱动注册至DriverManager的registeredDrivers集合中了,因此DriverManager就可以获取到指定的数据库连接。

第三步:创建Statement对象

通过Connection对象的createStatement()方法可以创建一个Statement对象

Statemnet stmt = con.createStatement();

第四步:调用Statement对象的相关方法执行对应的SQL语句

通过executeUpdate方法来做数据更新,包括插入和删除等操作,下面是一条简单的插入代码:

stmt.executeUpdate("INSERT INTO user(name, age) " + "VALUES ('WOA', 18)");

通过executeQuery方法进行数据的查询,查询结果会得到ResultSet对象,ResultSet对象具有可以指向当前数据行的指针,通过next方法使得指针指向下一行,然后将数据以列序号或者字段名取出。如果next返回null,则表示下一行中没有数据存在。

ResultSet rs = stmt.executeQuery("SELECT * FROM user");

第五步:关闭数据库连接

使用完数据库后,可通过Connection的close方法及时关闭数据库连接,避免长时间占用资源。

通过Spring的JdbcTemplate来使用JDBC

Spring对java使用JDBC的操作做了大量的封装,消除了冗余代码,使得开发量大大减少。
下面看一个简单的例子:

实体类

public class User {
        private int id;
        private String name;
        private int age;
        private String sex;

        //省略构造函数和set/get方法
}

创建表与实体间的映射

public class UserRowMapper implements RowMapper {
	
	@Nullable
	@Override
	public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
		User person = new User(rs.getInt("id"), rs.getString("name"), rs.getInt("age"), rs.getString("sex"));
		
		return person;
	}
}

创建数据库操作接口

public interface UserService {

	void save(User user);

	List<User> getUsers();
}

创建数据库操作接口实现类

public class UserServiceImpl implements UserService {

	private JdbcTemplate jdbcTemplate;

	/**
	 * 设置数据源
	 *
	 * @param dataSource
	 */
	public void setDataSource(DataSource dataSource) {
		this.jdbcTemplate = new JdbcTemplate(dataSource);
	}

	@Override
	public void save(User user) {
		jdbcTemplate.update("SQL语句");
	}

	@Override
	public List<User> getUsers() {
		List<User> list = jdbcTemplate.query("SQL语句", new UserRowMapper());
		return list;
	}
}

本质是将数据源传递给Spring封装的JdbcTemplate对象,然后可以通过JdbcTemplate对象对数据库进行CRUD操作。JdbcTemplate对象的命名方式是Spring常用的方式,通过同步回调的方式来实现类似模板模式的效果。

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×