

图片来自于百度图片
内容提前知
1、JdbcTmplate与Spring
2、NamedParameterJdbcTemplate与Spring
JdbcTemplate
Spring提供了多种数据模板,常用的是JdbcTemplate、HibernateTemplate、NamedParameterJdbcTemplate、JpaTemplate、SqlMapClientTemplate。今天我们主要说一说JdbcTemplate。
数据源
大家使用Jdbc连接数据库之前,都需要先配置数据库连接;同理在Spring一样为我们提供了配置数据库连接的方式,主要有jdbc和连接池两种方式。
/////首先加载spring jdbc驱动包以及mysql驱动包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.23</version>
</dependency>
///jdbc方式获取数据源
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setUrl("jdbc:mysql://localhost:3306/springjdbc?useUnicode=true&characterEncoding=utf8&autoReconnect=true");
dataSource.setPassword("xxxx");
dataSource.setUsername("root");
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
return dataSource;
}
而连接池方式连接数据库又提供了多种连接池支持,主要含DBCP、C3P0、BoneCP等,其中第一、第二为我们常使用。
///连接池方式获取数据源
@Bean
public DataSource dataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setUrl("jdbc:mysql://localhost:3306/springjdbc?useUnicode=true&characterEncoding=utf8");
dataSource.setPassword("xxxx");
dataSource.setUsername("root");
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
// 默认
dataSource.setInitialSize(5);
//最大连接数
dataSource.setMaxActive(100);
return dataSource;
}
DBCP详细配置:http://commons.apache.org/proper/commons-dbcp/api-2.4.0/index.html
C3P0详细配置:https://www.mchange.com/projects/c3p0/
JdbcTtemplate
/////在rootconfig中配置jdbcTemplate
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSourc) {
return new JdbcTemplate(dataSourc);
}
/////数据库内容转成对象
public class User {
private int id;
private String loginName;
private String loginPass;
private String userName;
private int sex;
//set 和 get
}
/////RowMapper
public class UserRowMapper implements RowMapper<User> {
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
user.setId(rs.getInt("id"));
user.setLoginName(rs.getString("login_name"));
user.setLoginPass(rs.getString("login_pass"));
user.setSex(rs.getInt("sex"));
user.setUserName(rs.getString("user_name"));
return user;
}
}
/////Dao
@Repository
public class UserDao {
@Autowired
JdbcTemplate jdbcTemplate;
public User findUser(int id) {
String sql = "select * from springjdbc_user where id = ?";
return (User) jdbcTemplate.queryForObject(sql , new Object[] {id} , new int[] {Type.INT} , new UserRowMapper() );
}
}
/////service
@Service
public class UserService {
@Autowired
UserDao userDao;
public User findUser(int id) {
User user;
user = userDao.findUser(id);
return user;
}
}
/////controller
@RestController
public class IndexController {
@Autowired
UserService userService;
@RequestMapping(value="/user/{id}")
public User toindex(@PathVariable("id") int id) {
return userService.findUser(id);
}
}
NamedParameterJdbcTemplate
NamedParameterJdbcTemplate可以使用命名参数。
/////NamedParameterJdbcTemplate
@Bean
public NamedParameterJdbcTemplate namedParameterJdbcTemplate(DataSource dataSource) {
return new NamedParameterJdbcTemplate(dataSource);
}
/////Dao
@Repository
public class UserDao {
@Autowired
NamedParameterJdbcTemplate namedParameterJdbcTemplate;
public User findUser(int id) {
String sql = "select * from springjdbc_user where id = :id";
Map<String , Object> map = new HashMap<String, Object>();
map.put("id", id);
return (User) namedParameterJdbcTemplate.queryForObject(sql, map, new UserRowMapper());
}
}
下期预告
这里只讲到了利用JdbcTemplate进行查询,但是确没有讲到新增、删除等操作,因为这些操作涉及到事务相关知识,因此将在下一期进行讲解,希望不要错过。

如果你对Linux、Java后端、分布式系统感兴趣,扫描上方二维码,欢迎加入我们的知识星球。
文章转载自程序员的日记本,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




