Spring SpringMvc JdbcTemplate NamedParameterJdbcTemplate

最近进入新的公司,别人数据库层直接使用Spring的JdbcTemplate和NamedParameterJdbcTemplate,之前mybatis,hibernate都用,写了个demo用了一下感觉这个也比较好用

1.环境搭建: Spring4.1.6+Springmvc+mysql5.6+eclipse4.2

项目的创建使用eclipse就不说了

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.share</groupId>
  <artifactId>jdbc</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <properties>
		<!-- spring的版本号 -->
		<org.springframework.version>4.1.6.RELEASE</org.springframework.version>
		<!-- mybatis版本号 
		<mybatis.version>3.3.0</mybatis.version>-->
  </properties>
  
  <dependencies>
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-beans</artifactId>
  		<version>${org.springframework.version}</version>
  	</dependency>
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-core</artifactId>
  		<version>${org.springframework.version}</version>
  	</dependency>
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-web</artifactId>
  		<version>${org.springframework.version}</version>
  	</dependency>
  	<dependency>  
         <groupId>org.springframework</groupId>  
         <artifactId>spring-oxm</artifactId>  
         <version>${org.springframework.version}</version>  
     </dependency>  
     <dependency>  
         <groupId>org.springframework</groupId>  
         <artifactId>spring-tx</artifactId>  
         <version>${org.springframework.version}</version>  
     </dependency>  

     <dependency>  
         <groupId>org.springframework</groupId>  
         <artifactId>spring-jdbc</artifactId>  
         <version>${org.springframework.version}</version>  
     </dependency>  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-context-support</artifactId>  
            <version>${org.springframework.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-test</artifactId>  
            <version>${org.springframework.version}</version>  
        </dependency>  
        <dependency>
        	<groupId>org.springframework</groupId>
        	<artifactId>spring-context</artifactId>
        	<version>${org.springframework.version}</version>
        </dependency>
        <dependency>
        	<groupId>org.springframework</groupId>
        	<artifactId>spring-expression</artifactId>
        	<version>${org.springframework.version}</version>
        </dependency>
        <dependency>
        	<groupId>org.springframework</groupId>
        	<artifactId>spring-orm</artifactId>
        	<version>${org.springframework.version}</version>
        </dependency>
        <dependency>
        	<groupId>org.springframework</groupId>
        	<artifactId>spring-webmvc</artifactId>
        	<version>${org.springframework.version}</version>
        </dependency>
        
        <!-- 导入Mysql数据库链接jar包 -->  
        <dependency>  
            <groupId>mysql</groupId>  
            <artifactId>mysql-connector-java</artifactId>  
            <version>5.1.35</version>  
        </dependency>
        <dependency>
        	<groupId>com.mchange</groupId>
        	<artifactId>c3p0</artifactId>
        	<version>0.9.5-pre10</version>
        </dependency>
            <!-- JSTL标签类 -->  
        <dependency>  
            <groupId>jstl</groupId>  
            <artifactId>jstl</artifactId>  
            <version>1.2</version>  
        </dependency>  
        <!-- 日志文件管理包 -->  
        <!-- log start -->  
        <dependency>  
            <groupId>log4j</groupId>  
            <artifactId>log4j</artifactId>  
            <version>1.2.17</version>
        </dependency>  
          
          
        <!-- 格式化对象,方便输出日志 -->  
        <dependency>  
            <groupId>com.alibaba</groupId>  
            <artifactId>fastjson</artifactId>  
            <version>1.1.41</version>  
        </dependency>  
  
  
        <dependency>  
            <groupId>org.slf4j</groupId>  
            <artifactId>slf4j-api</artifactId>  
            <version>1.7.12</version>  
        </dependency>  
  
        <!-- log end -->  
        <!-- 映入JSON -->  
        <dependency>  
            <groupId>org.codehaus.jackson</groupId>  
            <artifactId>jackson-mapper-asl</artifactId>  
            <version>1.9.13</version>  
        </dependency>  
        <!-- 上传组件包 -->  
        <dependency>  
            <groupId>commons-fileupload</groupId>  
            <artifactId>commons-fileupload</artifactId>  
            <version>1.3.1</version>  
        </dependency>  
        <dependency>  
            <groupId>commons-io</groupId>  
            <artifactId>commons-io</artifactId>  
            <version>2.4</version>  
        </dependency>  
        <dependency>  
            <groupId>commons-codec</groupId>  
            <artifactId>commons-codec</artifactId>  
            <version>1.9</version>  
        </dependency>
        <dependency>
        	<groupId>org.apache.tomcat</groupId>
        	<artifactId>tomcat-servlet-api</artifactId>
        	<version>8.0.23</version>
        </dependency>
        
        <dependency>
        	<groupId>org.springframework</groupId>
        	<artifactId>spring-support</artifactId>
        	<version>2.0.8</version>
        </dependency>
        <dependency>
        	<groupId>org.apache.commons</groupId>
        	<artifactId>commons-lang3</artifactId>
        	<version>3.4</version>
        </dependency>
  </dependencies>
</project>

 2.配置文件的创建

jdbc.properties(数据库配置文件)

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/learn?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=root

 beans.xml(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:mvc="http://www.springframework.org/schema/mvc"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
			http://www.springframework.org/schema/beans/spring-beans.xsd 
			http://www.springframework.org/schema/mvc 
			http://www.springframework.org/schema/mvc/spring-mvc.xsd 
			http://www.springframework.org/schema/context 
			http://www.springframework.org/schema/context/spring-context.xsd 
			http://www.springframework.org/schema/aop 
			http://www.springframework.org/schema/aop/spring-aop.xsd 
			http://www.springframework.org/schema/tx 
			http://www.springframework.org/schema/tx/spring-tx.xsd ">
		
	<!-- 支持注解 -->
	<context:annotation-config/>
			 
    <!-- 组件扫描 -->
    <context:component-scan base-package="com.share.*"/>
        
    <!--数据库配置:配置jdbc.properties  -->
    <context:property-placeholder location="classpath:jdbc.properties"/>
	
	<!-- 3、配置dataSource数据源c3p0 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="${jdbc.driverClassName}"/>
		<property name="jdbcUrl" value="${jdbc.url}"/>
		<property name="user" value="${jdbc.username}"/>
		<property name="password" value="${jdbc.password}"/>
		
		<!-- <property name="maxPoolSize" value="${c3p0.pool.maxPoolSize}"/>
		<property name="minPoolSize" value="${c3p0.pool.minPoolSize}"/>
		<property name="initialPoolSize" value="${c3p0.pool.initialPoolSize}"/>
		<property name="acquireIncrement" value="${c3p0.pool.acquireIncrement}"/> -->
	</bean>
	
	<!-- JDBCTemplate注入 -->
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">  
        <property name = "dataSource" ref="dataSource"/>  
	</bean>
	<!-- namedParameterJdbcTemplate注入,此处在构造器中 -->
	<bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
		<constructor-arg ref="dataSource"/>
	</bean>    	
</beans>

 springmvc.xml(springmvc配置文件)

<?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:mvc="http://www.springframework.org/schema/mvc"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" 
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
						http://www.springframework.org/schema/beans/spring-beans.xsd 
						http://www.springframework.org/schema/mvc 
						http://www.springframework.org/schema/mvc/spring-mvc.xsd 
						http://www.springframework.org/schema/context 
						http://www.springframework.org/schema/context/spring-context.xsd 
						http://www.springframework.org/schema/aop 
						http://www.springframework.org/schema/aop/spring-aop.xsd 
						http://www.springframework.org/schema/tx 
						http://www.springframework.org/schema/tx/spring-tx.xsd ">
				
		<!-- 支持注解驱动 -->
		<mvc:annotation-driven/>	
		
		<!-- 组件扫描的包 -->	
		<context:component-scan base-package="com.share.*"/>
		<!-- 静态资源目录 -->
		<mvc:resources mapping="/js/**" location="/js/" />
		<mvc:resources mapping="/images/**" location="/images/" />
		<mvc:resources mapping="/css/**" location="/css/" />
		<mvc:resources mapping="/common/**" location="/common/" />
		
		
		<!-- 配置视图解析器 -->
		<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		
			<!-- 通过setter方法注入前缀 -->
			<property name="prefix" value="/WEB-INF/pages/"/>
			<!-- 通过setter方法注入后缀 -->				
			<property name="suffix" value=".jsp"></property>
		</bean>

		<!-- 文件上传配置 -->
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="20971520"/><!--byte为单位,最高上传20M-->
        <property name="defaultEncoding" value="UTF-8"/>
        <property name="resolveLazily" value="true"/>
    </bean>
    
    <!-- 配置文件上传异常,文件超出上传限制时抛出异常信息,跳到异常页面 -->
    <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    	<property name="exceptionMappings">
    		<props>
    			<!-- 遇到MaxUploadSizeExceededException异常时,自动跳转到/WEB-INF/jsp/error_fileupload.jsp页面 -->
    			  <prop  key="org.springframework.web.multipart.MaxUploadSizeExceededException">error_fileupload</prop>    
    		</props>
    	</property>
    </bean>
    	
</beans>

 log4j.xml

log4j.rootLogger=INFO,stdout,file

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss,SSS} [%c]-[%p] %m%n 

log4j.appender.file=org.apache.log4j.DailyRollingFileAppender 
#log4j.appender.file.File=${spring_springmvc_jpa.root}/shirodemo.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout 
log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n

log4j.logger.org.hibernate.tool.hbm2ddl=info

 实体类:User.java

public class User implements Serializable {

		private static final long serialVersionUID = 1L;

		private long id;//用户id
		private String username;//用户名
		private int age;//用户年龄
		private Date birthday;//用户生日

		public long getId() {
			return id;
		}

		public void setId(long id) {
			this.id = id;
		}

		public User() {
			super();
		}

		public String getUsername() {
			return username;
		}

		public void setUsername(String username) {
			this.username = username;
		}

		public int getAge() {
			return age;
		}

		public void setAge(int age) {
			this.age = age;
		}

		public Date getBirthday() {
			return birthday;
		}

		public void setBirthday(Date birthday) {
			this.birthday = birthday;
		}

		public User(String username, int age, Date birthday) {
			super();
			this.username = username;
			this.age = age;
			this.birthday = birthday;
		}

		@Override
		public String toString() {
			return "User [username=" + username + ", age=" + age + ", birthday="
					+ birthday + "]";
		}

}

 dao层:BaseDao.java

package com.share.dao;

/**
 * 基本dao
 * @author share
 *
 */
@Repository
public class BaseDao {
	@Autowired
	private JdbcTemplate jdbcTemplate;
	@Autowired
	private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
	
	/**
	 * 查询所有用户
	 * @param sql
	 * @return
	 */
	public List<Map<String, Object>> queryAll(String sql) {
		System.out.println(jdbcTemplate + "&&" + namedParameterJdbcTemplate);
		return jdbcTemplate.queryForList(sql);
	}
	
	/**
	 * 添加用户
	 * @param user
	 * @return
	 */
	public int addUser(User user) {
		StringBuffer sqlKey = new StringBuffer("insert into user (");
		StringBuffer sqlValue = new StringBuffer(" values ( ");
		Map<String, Object> paramMap = new HashMap<String, Object>();
		if(StringUtils.isNotBlank(user.getUsername())) {
			sqlKey.append(" username, ");
			sqlValue.append(" :username, ");
			paramMap.put("username", user.getUsername());
		}
		if(StringUtils.isNotBlank(String.valueOf(user.getAge()))) {
			sqlKey.append(" age");
			sqlValue.append(" :age ");
			paramMap.put("age", user.getAge());
		}
		sqlKey.append(" ) ");
		sqlValue.append(" ) ");
		sqlKey.append(sqlValue);
		return namedParameterJdbcTemplate.update(sqlKey.toString(), paramMap);
		
	}
	
	/**
	 * 查找用户
	 */
	public User findUserByName(String username) {
		String sql = "select * from user where username = ?";
		User user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), username);//此处需要在实现RowMapper接口了
		System.err.println(user.getUsername() + "::" + user.getAge());
		Map<String, Object> queryForMap = jdbcTemplate.queryForMap(sql, username);
		System.out.println("=========");
		for (Map.Entry<String, Object> map : queryForMap.entrySet()) {
			System.out.println(map.getKey() + "**" + map.getValue());
		}
		return user;
		
	}
}

 service层BaseService.java

/**
 * @author caifan
 *
 * 2015年6月20日
 */
@Service
public class BaseService {
	@Autowired
	private BaseDao baseDao;
	
	/**
	 * 基本service
	 * @return
	 */
	public List<Map<String, Object>> findAllUser() {
		String sql = "select * from user order by age desc";
		List<Map<String,Object>> queryForList = baseDao.queryAll(sql);
		for (Map<String, Object> maps : queryForList) {
			System.out.println( "------------");
			for (Map.Entry<String, Object> map : maps.entrySet()) {
				System.out.println(map.getKey() + ":" + map.getValue());
			}
			System.out.println( "------------");
		}
		return queryForList;
	}
	
	/**
	 * 添加用户
	 * @param user
	 * @return
	 */
	public int addUser(User user) {
		return baseDao.addUser(user);
	}
	
	public User findByName(String username) {
		return baseDao.findUserByName(username);
		
	}
	
}

控制层: UserController.java

/**
 * 
 */
package com.share.controller;

import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.share.domain.User;
import com.share.service.BaseService;

/**
 * @author caifan
 *
 * 2015年6月20日
 */
@Controller
public class UserController {
	@Autowired
	private BaseService baseService;
	
	@RequestMapping(value="/alluser") 
	public String findAllUser(HttpServletRequest request) {
		List<Map<String, Object>> userList = baseService.findAllUser();
		request.setAttribute("userList", userList);
		return "alluser";
	}
	
	@RequestMapping(value="/adduser") 
	public String addUser(HttpServletRequest request) {
		User user = new User();
		user.setUsername("tom");
		user.setAge(22);
		int userResult = baseService.addUser(user);
		System.out.println(userResult);
		request.setAttribute("user", user);
		return "adduser";
	}
	
	@RequestMapping(value="/finduser")
	public String findUser(HttpServletRequest request) {
		String username = "tom";
		User user = baseService.findByName(username);
		request.setAttribute("user", user);
		return "findUser";
	}
}

 附件中的jsp仅用于测试

 

猜你喜欢

转载自shareisattitude.iteye.com/blog/2221135