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