Spring-JdbcTemplate的基础使用

  • Spring对不同的持久化支持(ORM)
ORM持久化技术模板类
JDBCorg.springframework.jdbc.core.JdbcTemplate
Hibernate5.0org.springframework.orm.hibernate5.HibernateTemplate
IBatis(MyBatis)org.springframework.orm.ibatis.SqlMapClientTemplate
JPAorg.springfrmaework.orm.jpa.JpaTemplate

其实Spring的JDBCTemplate有点像DBUtils,但是有时候还没有DBUtils好用。

一、JdbcTemplate的一个简单示例

package com.lasing.test;
import java.util.ArrayList;
import java.util.List;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import  org.springframework.jdbc.datasource.DriverManagerDataSource;
import com.lasing.domain.Student;
public class JDBCTest {
     /**
      * 要连接数据库
      * 1. 创建数据源
      * 2. 创建JdbcTemplete
      * 3. 完成CURD
      * */
     public static void main(String[] args) {
           //1. 创建数据源对象
           DriverManagerDataSource dataSource = new  DriverManagerDataSource();
           //2. 设置连接参数 driver url username password
           dataSource.setDriverClassName("com.mysql.jdbc.Driver");
           dataSource.setUrl("jdbc:mysql://localhost:3306/springdemo");
           dataSource.setUsername("root");
           dataSource.setPassword("123456");
           System.out.println(dataSource);
           //3. 创建JdbcTemplete
           JdbcTemplate jdbcTemplate = new JdbcTemplate();
           //让JdbcTemplete关联数据源
           jdbcTemplate.setDataSource(dataSource);
           
           //4. 创建sql
//         String sql = "SELECT COUNT(*) FROM student";
//         Long count = jdbcTemplate.queryForObject(sql,  Long.class);
//         System.out.println(count);
//         String sql = "INSERT INTO student(name,age)  values('lasing',20)";
//         jdbcTemplate.update(sql);
           String sql = "INSERT INTO student(name,age)  values(?,?)";
           jdbcTemplate.update(sql, "lasing",18);
           
           /**
            * JdbcTemplete
            * update 做添加 修改 删除
            * queryForObject 查询单个对象
            * queryForList 查询返回一个集合
            * */
     }
}

二、JdbcTemplate使用IoC/DI完成三层结构(XML方式)

1. 创建项目并导包

在这里插入图片描述
在这里插入图片描述

2. log4j.properties

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

3. 创建Student

/**
 * Student
 */
package com.lasing.domain;
public class Student {
     private Integer id;
     private String name;
     private Integer age;
     public Integer getId() {
           return id;
     }
     public void setId(Integer id) {
           this.id = id;
     }
     public String getName() {
           return name;
     }
     public void setName(String name) {
           this.name = name;
     }
     public Integer getAge() {
           return age;
     }
     public void setAge(Integer age) {
           this.age = age;
     }
     @Override
     public String toString() {
           return "Student [id=" + id + ", name=" + name + ",  age=" + age + "]";
     }
}

4. 创建StudentDao

/**
 * StudnentDao
 */
package com.lasing.dao;
import java.util.List;
import com.lasing.domain.Student;

public interface StudentDao {
	public int add(Student student);
    public int delete(Integer id);
    public int update(Student student);
    public Student queryByStudentId(Integer id);
    public List<Student> queryAll();
    public Long CountStudnet();
    public List<Student> queryForPage(int currentPage, int pageSize);
}

5. 创建StudentDaoImpl

/**
 * StudentDaoImpl
 */
package com.lasing.dao.impl;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.objenesis.strategy.StdInstantiatorStrategy;
import org.springframework.stereotype.Repository;
import com.lasing.dao.StudentDao;
import com.lasing.domain.Student;

public class StudentDaoImpl implements StudentDao{
	private JdbcTemplate jdbcTemplate;
	public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
		this.jdbcTemplate = jdbcTemplate;
	}
	public Long CountStudnet() {
		String sql = "SELECT COUNT(*) FROM student";
		Long count = jdbcTemplate.queryForObject(sql, Long.class);
		return count;
	}
	@Override
	public int add(Student student) {
		String sql = "INSERT INTO student(name,age) values(?,?)";
		Object[] objs = {student.getName(), student.getAge()};
		int res = jdbcTemplate.update(sql, objs);
		return res;
	}
	@Override
	public int delete(Integer id) {
		String sql = "DELETE FROM student where id=?";
		Object[] objs = {id};
		int res = jdbcTemplate.update(sql, objs);
		return res;
	}
	@Override
	public int update(Student student) {
		String sql = "UPDATE student set name=?,age=? where id=?";
		Object[] objs = {student.getName(), student.getAge(),student.getId()};
		int res = jdbcTemplate.update(sql, objs);
		return res;
	}
	@Override
	public Student queryByStudentId(Integer id) {
		String sql = "SELECT * FROM student where id=?";
		Object[] objs = {id};
		return jdbcTemplate.queryForObject(sql, new RowMapper<Student>() {
			@Override
			public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
				Integer sid = rs.getInt("id");
				String name = rs.getString("name");
				int age = rs.getInt("age");
				Student student = new Student();
				student.setId(sid);
				student.setName(name);
				student.setAge(age);
				return student;
			}
		}, objs);
	}
	@Override
	public List<Student> queryAll() {
		String sql = "SELECT * FROM student";
		return jdbcTemplate.query(sql, new RowMapper<Student>() {
			public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
				Integer sid = rs.getInt("id");
				String name = rs.getString("name");
				int age = rs.getInt("age");
				Student student = new Student();
				student.setId(sid);
				student.setName(name);
				student.setAge(age);
				return student;
			}
		});
	}
	@Override
	public List<Student> queryForPage(int currentPage, int pageSize) {
		String sql = "SELECT * FROM student limit ?,?";
		Object[] objs = {(currentPage-1)*pageSize,pageSize};
		return jdbcTemplate.query(sql,objs ,new RowMapper<Student>() {
			public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
				Integer sid = rs.getInt("id");
				String name = rs.getString("name");
				int age = rs.getInt("age");
				Student student = new Student();
				student.setId(sid);
				student.setName(name);
				student.setAge(age);
				return student;
			}
		});
	}
}

6. 创建Studentservice

/**
 * StudentService
 */
 package com.lasing.service;
import java.util.List;
import com.lasing.domain.Student;

public interface StudentService {
	public int add(Student student);
	public int delete(Integer id);
	public int update(Student student);
	public Student queryByStudentId(Integer id);
	public List<Student> queryAll();
	public Long CountStudnet();
	public List<Student> queryForPage(int currentPage, int pageSize);
}

7. 创建StudentServiceImpl

/**
 * StudentServiceImpl
 */
package com.lasing.service.impl;
import java.util.List;
import com.lasing.dao.StudentDao;
import com.lasing.domain.Student;
import com.lasing.service.StudentService;

public class StudentServiceImpl implements StudentService{
	private StudentDao studentDao;
	public void setStudentDao(StudentDao studentDao) {
		this.studentDao = studentDao;
	}

	@Override
	public int add(Student student) {
		return this.studentDao.add(student);
	}

	@Override
	public int delete(Integer id) {
		return this.studentDao.delete(id);
	}

	@Override
	public int update(Student student) {
		return this.studentDao.update(student);
	}

	@Override
	public Student queryByStudentId(Integer id) {
		return this.studentDao.queryByStudentId(id);
	}

	@Override
	public List<Student> queryAll() {
		return this.studentDao.queryAll();
	}

	@Override
	public Long CountStudnet() {
		return this.studentDao.CountStudnet();
	}

	@Override
	public List<Student> queryForPage(int currentPage, int pageSize) {
		return this.studentDao.queryForPage(currentPage, pageSize);
	}
}

8. 创建StudentController

/**
 * StudentController
 */
package com.lasing.controller;
import java.util.List;
import com.lasing.domain.Student;
import com.lasing.service.StudentService;

public class StudentController {
	private StudentService studentService;
	public void setStudentService(StudentService studentService) {
		this.studentService = studentService;
	}
	public void addStd() {
		Student student = new Student();
		student.setName("lasing");
		student.setAge(20);
		int res = studentService.add(student);
		String out = res==0?"fail to add":"success";
		System.out.println(out);
	}
	public void updateStd() {
		Student student = new Student();
		student.setId(10);
		student.setName("cheng");
		student.setAge(18);
		int res = studentService.update(student);
		String out = res==0?"fail to add":"success";
		System.out.println(out);
	}
	public void deleteStdById() {
		int res = studentService.delete(10);
		String out = res==0?"fail to add":"success";
		System.out.println(out);
	}
	public void stdCount() {
		Long count = studentService.CountStudnet();
		System.out.println(count);
	}
	public void queryAll() {
		List<Student> list = studentService.queryAll();
		for (Student student : list) {
			System.out.println(student);
		}
	}
	public void queryByStdId() {
		Student std = studentService.queryByStudentId(8);
		System.out.println(std.toString());
	}
	public void queryForPage() {
		List<Student> list = studentService.queryForPage(2, 3);
		for (Student student : list) {
			System.out.println(student);
		}
	}
}

9. 修改applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 导入头文件 -->
<beans
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns="http://www.springframework.org/schema/beans"
     xmlns:context="http://www.springframework.org/schema/context"
     xmlns:aop="http://www.springframework.org/schema/aop"
     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
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop.xsd ">
     <bean id="dataSource"  class="org.springframework.jdbc.datasource.DriverManagerDataSource">
           <!-- 注入相关属性 -->
           <property name="driverClassName"  value="com.mysql.jdbc.Driver"/>
           <property name="url"  value="jdbc:mysql://localhost:3306/springdemo"/>
           <property name="username" value="root"/>
           <property name="password" value="123456"/>
     </bean>
     <bean id="jdbcTemplete"  class="org.springframework.jdbc.core.JdbcTemplate">
           <property name="dataSource" ref="dataSource"/>
     </bean>
     
     <!-- dao -->
     <bean id="studentDao"  class="com.lasing.dao.impl.StudentDaoImpl">
           <property name="jdbcTemplate" ref="jdbcTemplete"/>
     </bean>
     <!-- service -->
     <bean id="studentService"  class="com.lasing.service.impl.StudentServiceImpl">
           <property name="studentDao" ref="studentDao"/>
     </bean>
     <!-- controller -->
     <bean id="studentController"  class="com.lasing.controller.StudentController">
           <property name="studentService"  ref="studentService"/>
     </bean>
</beans>

10. 测试

package com.lasing.test;
import org.springframework.context.ApplicationContext;
import  org.springframework.context.support.ClassPathXmlApplicationContext;
import com.lasing.controller.StudentController;
import com.lasing.dao.impl.StudentDaoImpl;
public class Test {
     public static void main(String[] args) {
           ApplicationContext applicationContext = new  ClassPathXmlApplicationContext(
                     "classpath:applicationContext.xml");
           StudentController studentController =  (StudentController)  applicationContext.getBean("studentController");
           System.out.println(studentController);
//         studentController.updateStd();
//         studentController.addStd();
//         studentController.deleteStdById();
//         studentController.stdCount();
//         studentController.queryByStdId();
//         studentController.queryAll();
           studentController.queryForPage();
     }
}

三、JdbcTemplate(注解方式)

1. 创建项目并导包

项目结构图
在这里插入图片描述

2. 修改StudentDaoImpl(其实只是加了个@Repository注解)

package com.lasing.dao.impl;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;

import com.lasing.dao.StudentDao;
import com.lasing.domain.Student;
@Repository
public class StudentDaoImpl implements StudentDao{
	@Autowired
	private JdbcTemplate jdbcTemplate;
	public Long CountStudnet() {
		String sql = "SELECT COUNT(*) FROM student";
		Long count = jdbcTemplate.queryForObject(sql, Long.class);
		return count;
	}
	@Override
	public int add(Student student) {
		String sql = "INSERT INTO student(name,age) values(?,?)";
		Object[] objs = {student.getName(), student.getAge()};
		int res = jdbcTemplate.update(sql, objs);
		return res;
	}
	@Override
	public int delete(Integer id) {
		String sql = "DELETE FROM student where id=?";
		Object[] objs = {id};
		int res = jdbcTemplate.update(sql, objs);
		return res;
	}
	@Override
	public int update(Student student) {
		String sql = "UPDATE student set name=?,age=? where id=?";
		Object[] objs = {student.getName(), student.getAge(),student.getId()};
		int res = jdbcTemplate.update(sql, objs);
		return res;
	}
	@Override
	public Student queryByStudentId(Integer id) {
		String sql = "SELECT * FROM student where id=?";
		Object[] objs = {id};
		return jdbcTemplate.queryForObject(sql, new RowMapper<Student>() {
			@Override
			public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
				Integer sid = rs.getInt("id");
				String name = rs.getString("name");
				int age = rs.getInt("age");
				Student student = new Student();
				student.setId(sid);
				student.setName(name);
				student.setAge(age);
				return student;
			}
		}, objs);
	}
	@Override
	public List<Student> queryAll() {
		String sql = "SELECT * FROM student";
		return jdbcTemplate.query(sql, new RowMapper<Student>() {
			public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
				Integer sid = rs.getInt("id");
				String name = rs.getString("name");
				int age = rs.getInt("age");
				Student student = new Student();
				student.setId(sid);
				student.setName(name);
				student.setAge(age);
				return student;
			}
		});
	}
	@Override
	public List<Student> queryForPage(int currentPage, int pageSize) {
		String sql = "SELECT * FROM student limit ?,?";
		Object[] objs = {(currentPage-1)*pageSize,pageSize};
		return jdbcTemplate.query(sql,objs ,new RowMapper<Student>() {
			public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
				Integer sid = rs.getInt("id");
				String name = rs.getString("name");
				int age = rs.getInt("age");
				Student student = new Student();
				student.setId(sid);
				student.setName(name);
				student.setAge(age);
				return student;
			}
		});
	}
}

3. 修改StudentServiceImpl(@Service)

/**
 * StudentDaoImpl
 */
package com.lasing.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.lasing.dao.StudentDao;
import com.lasing.domain.Student;
import com.lasing.service.StudentService;

@Service
public class StudentServiceImpl implements StudentService{
	@Autowired
	private StudentDao studentDao;
	@Override
	public int add(Student student) {
		return this.studentDao.add(student);
	}

	@Override
	public int delete(Integer id) {
		return this.studentDao.delete(id);
	}

	@Override
	public int update(Student student) {
		return this.studentDao.update(student);
	}

	@Override
	public Student queryByStudentId(Integer id) {
		return this.studentDao.queryByStudentId(id);
	}

	@Override
	public List<Student> queryAll() {
		return this.studentDao.queryAll();
	}

	@Override
	public Long CountStudnet() {
		return this.studentDao.CountStudnet();
	}

	@Override
	public List<Student> queryForPage(int currentPage, int pageSize) {
		return this.studentDao.queryForPage(currentPage, pageSize);
	}
}

3. 修改StudentController(@Controller)

/**
 * StudentController
 */
package com.lasing.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import com.lasing.domain.Student;
import com.lasing.service.StudentService;
@Controller
public class StudentController {
	@Autowired
	private StudentService studentService;
	public void addStd() {
		Student student = new Student();
		student.setName("lasing");
		student.setAge(20);
		int res = studentService.add(student);
		String out = res==0?"fail to add":"success";
		System.out.println(out);
	}
	public void updateStd() {
		Student student = new Student();
		student.setId(10);
		student.setName("cheng");
		student.setAge(18);
		int res = studentService.update(student);
		String out = res==0?"fail to add":"success";
		System.out.println(out);
	}
	public void deleteStdById() {
		int res = studentService.delete(10);
		String out = res==0?"fail to add":"success";
		System.out.println(out);
	}
	public void stdCount() {
		Long count = studentService.CountStudnet();
		System.out.println(count);
	}
	public void queryAll() {
		List<Student> list = studentService.queryAll();
		for (Student student : list) {
			System.out.println(student);
		}
	}
	public void queryByStdId() {
		Student std = studentService.queryByStudentId(8);
		System.out.println(std.toString());
	}
	public void queryForPage() {
		List<Student> list = studentService.queryForPage(2, 3);
		for (Student student : list) {
			System.out.println(student);
		}
	}
}

4. 创建db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/springdemo
username=root
password=123456

5. 修改applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 导入头文件 -->
<beans 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns="http://www.springframework.org/schema/beans" 
	xmlns:context="http://www.springframework.org/schema/context" 
	xmlns:aop="http://www.springframework.org/schema/aop" 
	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 
		http://www.springframework.org/schema/aop 
		http://www.springframework.org/schema/aop/spring-aop.xsd ">
	<!-- 解析db.properties -->
	<context:property-placeholder location="classpath:db.properties" system-properties-mode="FALLBACK"/>
	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<!-- 注入相关属性 -->
		<property name="driverClassName" value="${driver}"/>
		<property name="url" value="${url}"/>
		<property name="username" value="${username}"/>
		<property name="password" value="${password}"/>
	</bean>
	<bean id="jdbcTemplete" class="org.springframework.jdbc.core.JdbcTemplate">
		<property name="dataSource" ref="dataSource"/>
	</bean>
	
	<!-- 扫描 -->
	<context:component-scan base-package="com.lasing.domain,com.lasing.service,com.lasing.dao,com.lasing.controller"/>
</beans>

6. 测试

/**
 * Test
 */
package com.lasing.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.lasing.controller.StudentController;

public class Test {
	@SuppressWarnings("resource")
	public static void main(String[] args) {
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
				"classpath:applicationContext.xml");
		StudentController studentController = (StudentController) applicationContext.getBean("studentController");
		System.out.println(studentController);
//		studentController.updateStd();
//		studentController.addStd();
//		studentController.deleteStdById();
//		studentController.stdCount();
//		studentController.queryByStdId();
		studentController.queryAll();
//		studentController.queryForPage();
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值