Spring4使用JdbcTemplate来访问数据库,并记录一下简单增删改查操作。
创建数据库连接的参数配置文件 jdbc.properties文件,classpath路径下conf/datasource目录下配置如下
jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/lian?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false jdbc.username=root jdbc.password=root
Spring配置文件添加配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 使用spring注解 --> <!-- <context:annotation-config/> --> <!-- 下面的配置告诉spring容器自动scanner用注解标注bean --> <context:component-scan base-package="org.lian"/> <!--配置数据源 --> <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driverClassName}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <context:property-placeholder location="/conf/datasource/jdbc.properties"/> </beans>
安装jar包,需要引入Spring-jdbc.jar和Spring-tx.jar此外需要引入apache的两个jar包已经上传。
配置准备工作完毕后就可以编写Java代码来使用JdbcTemplate。
两种使用方式放在两个不同的实现类中具体代码见下
@Repository("musicDao") public class MusicDaoImpl implements MusicDao { private JdbcTemplate jdbcTemplate; @Autowired public void setDataSource(DataSource dataSource) { this.jdbcTemplate = new JdbcTemplate(dataSource); } @Override public String get(Music music) { /** * select name,singer,author,composer,album,duration,style from t_music */ StringBuilder sql = new StringBuilder(); sql.append("select id, name,singer,author,composer,album,duration,style "); sql.append("from t_music "); sql.append("where id=? "); Music bean = (Music) jdbcTemplate.queryForObject(sql.toString(), new String[] { music.getId() }, new MusicMapper()); Gson gson = new Gson(); return gson.toJson(bean); } private static final class MusicMapper implements RowMapper<Music> { @Override public Music mapRow(ResultSet rs, int rowNum) throws SQLException { Music music = new Music(); music.setName(rs.getString("name")); music.setSinger(rs.getString("singer")); music.setAlbum(rs.getString("album")); music.setAuthor(rs.getString("author")); music.setComposer(rs.getString("composer")); music.setDuration(rs.getString("duration")); music.setId(rs.getString("id")); return music; } } /** * * @description TODO * @return */ @Override public int count(Music music) { String sql = "select count(1) from t_music where name=?"; int count = this.jdbcTemplate.queryForObject(sql, Integer.class, music.getName()); // 两个方式都可以 // this.jdbcTemplate.queryForObject(sql, new String[] { music.getName() }, // Integer.class); return count; } /** * * @description TODO 查询列表 * @param music * @return */ @Override public String list(Music music) { /** * 采用匿名内部类 */ StringBuilder sql = new StringBuilder(); sql.append("select id,name,singer,author,composer,album,duration,style "); sql.append("from t_music "); sql.append("where name=?"); List<Music> list = this.jdbcTemplate.query(sql.toString(), new String[] { music.getName() }, new RowMapper<Music>() { @Override public Music mapRow(ResultSet rs, int rowNum) throws SQLException { Music music = new Music(); music.setName(rs.getString("name")); music.setSinger(rs.getString("singer")); music.setAlbum(rs.getString("album")); music.setAuthor(rs.getString("author")); music.setComposer(rs.getString("composer")); music.setDuration(rs.getString("duration")); music.setId(rs.getString("id")); return music; } }); Gson gson = new Gson(); return gson.toJson(list); } @Override public void update(Music music) { /** * update t_music set name='1232',singer='',author='',composer='', album='', * duration='', style='' where id='12' */ StringBuilder sql = new StringBuilder(); sql.append("update t_music set name=? , singer=? , author=? , composer=? , "); sql.append("album= ? , duration=? , style=? "); sql.append("where id= ? "); Object[] params = new Object[] { music.getName(), music.getSinger(), music.getAuthor(), music.getComposer(), music.getAlbum(), music.getDuration(), music.getStyle(), music.getId() }; this.jdbcTemplate.update(sql.toString(), params); } @Override public void add(Music music) { // TODO Auto-generated method stub /** * insert into t_music (id,name,singer,author,composer,album,duration,style) * values('123','Wonderful U','AGA','AGA','AGA','Ginadoll','04:08','慢摇') */ Object[] params = new Object[] { music.getId(), music.getName(), music.getSinger(), music.getAuthor(), music.getComposer(), music.getAlbum(), music.getDuration(), music.getStyle() }; StringBuilder sql = new StringBuilder(); sql.append("insert into t_music "); sql.append("(id,name,singer,author,composer,album,duration,style) "); sql.append("values(?,?,?,?,?,?,?,?)"); this.jdbcTemplate.update(sql.toString(), params); } @Override public void delete(Music music) { String sql = "delete from t_music where id=? "; this.jdbcTemplate.update(sql, music.getId()); } }
@Repository("musicManagerDao") public class MusicManagerDaoImpl implements MusicDao { private NamedParameterJdbcTemplate namedParameterJdbcTemplate; @Autowired public void setDataSource(DataSource dataSource) { this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource); } @Override public String get(Music music) { // TODO Auto-generated method stub StringBuilder sql = new StringBuilder(); sql.append("select id, name,singer,author,composer,album,duration,style "); sql.append("from t_music "); sql.append("where id=:id "); // 一旦创建的map不能被修改 Map<String, String> namedParameters = Collections.singletonMap("id", music.getId()); Music bean = this.namedParameterJdbcTemplate.queryForObject(sql.toString(), namedParameters, new RowMapper<Music>() { @Override public Music mapRow(ResultSet rs, int rowNum) throws SQLException { Music music = new Music(); music.setName(rs.getString("name")); music.setSinger(rs.getString("singer")); music.setAlbum(rs.getString("album")); music.setAuthor(rs.getString("author")); music.setComposer(rs.getString("composer")); music.setDuration(rs.getString("duration")); music.setId(rs.getString("id")); return music; } }); Gson gson = new Gson(); return gson.toJson(bean); } @Override public int count(Music music) { // TODO Auto-generated method stub System.out.println(" MusicManagerDaoImpl.count() "); /** * select count(1) from t_music where name='红色高跟鞋' */ String sql = "select count(1) from t_music where name=:name"; Map<String, String> params = new HashMap<String, String>(); params.put("name", music.getName()); SqlParameterSource namedParameters = new MapSqlParameterSource(params); // SqlParameterSource namedParameters = new MapSqlParameterSource("name", // music.getName()); return this.namedParameterJdbcTemplate.queryForObject(sql, namedParameters, Integer.class); } @Override public String list(Music music) { // TODO Auto-generated method stub StringBuilder sql = new StringBuilder(); sql.append("select id,name,singer,author,composer,album,duration,style "); sql.append("from t_music "); sql.append("where name=:name"); /** * :name 要与参数类属性保持一致 */ SqlParameterSource namedParameters = new BeanPropertySqlParameterSource( music); List<Music> list = this.namedParameterJdbcTemplate.query(sql.toString(), namedParameters, new RowMapper<Music>() { @Override public Music mapRow(ResultSet rs, int rowNum) throws SQLException { Music music = new Music(); music.setName(rs.getString("name")); music.setSinger(rs.getString("singer")); music.setAlbum(rs.getString("album")); music.setAuthor(rs.getString("author")); music.setComposer(rs.getString("composer")); music.setDuration(rs.getString("duration")); music.setId(rs.getString("id")); return music; } }); Gson gson = new Gson(); return gson.toJson(list); } @Override public void update(Music music) { // TODO Auto-generated method stub } @Override public void add(Music music) { // TODO Auto-generated method stub } @Override public void delete(Music music) { // TODO Auto-generated method stub } public static void main(String[] args) { } }
如果需要深入JdbcTemplate,可以参考SpringAPI