一、概述
JdbcTemplate位于spring-jdbc-x.x.x.jar包中,全限定命名 org.springframework.jdbc.core.Jdbctemplate。此外使用JdbcTemplate还需要导入spring-tx-x.x.x.jar包,用于处理事务和异常。
Spring中,JDBC在XML中配置模板如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/testdb"/>
<property name="username" value="root"/>
<property name="password" value="jsonliu@123"/>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="xxx" class="xxx">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
</beans>
上述代码中定义了3个Bean,分别是dataSource、jdbcTemplate和需要注入类的Bean。其中datasurce对应的是DriverManagerDataSource类,用于对数据源进行配置;jdbcTemplate定义了JdbcTempalte相关配置。
dataSource中定义了4个连接数据库的属性:
属性名 | 说明 |
---|---|
driverClassName | 所使用的驱动名称,对应驱动jar包中Driver类。 |
url | 数据源所在地址 |
username | 访问数据库的用户名 |
password | 访问数据库的密码 |
在定义 JdbcTemplate 时,需要将 dataSource 注入到 JdbcTemplate 中。而在其他的类中要使用 JdbcTemplate,也需要将 JdbcTemplate 注入到使用类中(通常注入 dao 类中)
在jdbcTemplate类中,提供了大量查询和更新数据库的方法,例如:query、update
方法 | 说明 |
---|---|
public int update(String sql) | 执行新增、修改、删除等语句,ags表示传入到sql中查询参数 |
public int update(String sql,Object… ags) | |
public void excute(String sql) | 执行任意sql,一般用于执行DDL语句,action表示执行完sql语句后调用的函数 |
public T excute(String sql,PreparedStatementCallback action) | |
public T query(String sql,ResultSetExtractor rse) | 用于执行查询语句,以ResultSetExtractor 作为参数的 query 方法返回值为 Object,使用查询结果需要对其进行强制转型,以 RowMapper 作为参数的 query 方法返回值为 List |
public List query(String sql,RowMapper rse) |
二、实例
由于实例中用到了mysql数据库,还需要加入mysql-connector-java-x.x.x.jar.
public class User {
private int id;
private String name;
private int age;
public User() {
}
public User(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public User(String name, int age) {
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public interface UserDao {
void createUserTable();
void saveUser(User user);
List<User> listUser();
}
public class UserDaoImpl implements UserDao {
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
@Override
public void createUserTable() {
this.jdbcTemplate.execute( "drop table if exists user ; ");
this.jdbcTemplate.execute("CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, " +
"`name` varchar(50) DEFAULT NULL, `age` int(11) DEFAULT NULL, " +
"PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;");
}
@Override
public void saveUser(User user) {
this.jdbcTemplate.update("insert into USER(name,age) values (?,?)",user.getName(),user.getAge());
}
@Override
public List<User> listUser() {
List<User> userList = this.jdbcTemplate.query("select name,age from user", new RowMapper<User>() {
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User(rs.getString("name"), rs.getInt("age"));
return user;
}
});
return userList;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/testdb?serverTimezone=Asia/Shanghai"/>
<property name="username" value="root"/>
<property name="password" value="jsonliu@123"/>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="userDao" class="com.jsonliu.mapper.impl.UserDaoImpl">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
</beans>
public class MainApp4 {
public static void main(String[] args) {
ApplicationContext context=new ClassPathXmlApplicationContext("JdbcTemplateBeans.xml");
UserDao userDao = (UserDao) context.getBean("userDao");
userDao.createUserTable();
userDao.saveUser(new User("王者",12));
userDao.saveUser(new User("荣耀",112));
List<User> users = userDao.listUser();
for (User user:users){
System.out.println("用户姓名:"+user.getName()+",年龄:"+user.getAge());
}
}
}
执行结果: