Spring4学习(三)JdbcTemplate访问数据库

        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

猜你喜欢

转载自blog-chen-lian.iteye.com/blog/2347012