이 글에서는 Spring 기반의 기본 JDBC 프레임워크 구성을 주로 소개하며, 구성 파일에서 데이터를 읽는 등의 JDBC 추가, 삭제, 수정 등이 매우 좋은 참조 가치가 있습니다. . 아래 에디터로 살펴보겠습니다
데이터베이스 연결 풀
간단한 데이터베이스 애플리케이션의 경우 데이터베이스에 대한 액세스가 자주 발생하지 않기 때문에 단순히 데이터베이스에 액세스해야 할 경우 새 연결을 생성하고 완료되면 닫으면 성능 오버헤드가 발생하지 않습니다. 그러나 복잡한 데이터베이스 애플리케이션의 경우 상황은 완전히 다릅니다. 연결을 자주 설정하고 닫으면 시스템 성능이 크게 저하됩니다. 연결을 사용하면 시스템 성능에 병목 현상이 발생하기 때문입니다.
데이터베이스 연결 풀과 일련의 연결 사용 관리 정책을 수립함으로써 연결 재사용 효과를 얻을 수 있으므로 데이터베이스 연결을 안전하게 효율적으로 재사용할 수 있습니다. 데이터베이스 필요성 빈번한 연결 설정 및 종료로 인한 오버헤드.
데이터베이스 연결 풀의 기본 원칙은 내부 개체 풀에서 일정 수의 데이터베이스 연결을 유지하고 데이터베이스 연결 획득 및 반환 방법을 외부에 노출하는 것입니다. 예를 들어, 외부 사용자는 getConnection 메소드를 통해 연결을 얻은 후 사용 후 releaseConnection 메소드를 통해 연결을 반환할 수 있습니다. 이때 연결은 닫히지 않고 연결 풀 관리자에 의해 재활용되어 다음을 준비합니다. 사용.
데이터베이스 연결 풀 기술의 이점:
1. 리소스 재사용
으로 인해 데이터베이스 연결을 재사용하므로 빈번한 링크 생성 및 해제로 인해 발생하는 많은 성능 오버헤드가 방지됩니다. 시스템 소모 감소를 바탕으로 한편, 시스템 운영 환경의 안정성도 향상시킵니다. (메모리 조각화 및 데이터베이스 임시 처리/스레드 수 감소)
2. 시스템 응답 속도 향상
데이터베이스 연결 풀 초기화 과정에서 여러 개의 데이터베이스 연결 풀이 생성되어 백업을 위해 풀에 배치되는 경우가 많습니다. 이 시점에서 연결 초기화가 완료되었습니다. 비즈니스 요청 처리를 위해 기존 사용 가능한 연결을 직접 사용하여 데이터베이스 연결 초기화 및 해제 프로세스의 시간 오버헤드를 방지함으로써 전체 시스템 응답 시간을 줄입니다
3. 데이터베이스 연결 누출 방지를 위한 통합 연결 관리
비교적 완전한 데이터베이스 연결 풀 구현에서는 미리 설정된 연결 점유 시간 초과 설정을 기반으로 강제 복구가 가능합니다. 따라서 점유된 연결은 일반 데이터베이스 연결 작업에서 발생할 수 있는 리소스 누출을 방지합니다.
현재 주로 다음을 포함한 많은 데이터베이스 연결 풀 제품이 있습니다.
1, dbcp
dbcp는 Apache에서 제작한 데이터베이스 연결 풀 제품으로 Spring 개발팀에서 권장하는 제품으로 활발히 개발되고 있으며 매우 널리 사용되는 데이터베이스 연결 풀 제품입니다. 그러나 인터넷에서는
2, c3p0
Hibernate 개발팀에서 권장하는 데이터베이스 연결 풀, 즉 데이터 소스 바인딩을 구현합니다. JNDI
3. Proxool
Proxool은 평판이 좋고 부정적인 댓글이 없습니다(예: dbcp는 Hibernate에서 사용되지 않습니다). Hibernate는 버그가 너무 많다고 생각하기 때문에 권장)도 Hibernate 개발팀에서 권장하는 데이터베이스 연결 풀이지만 사용자가 많지 않고 개발이 활발하지 않습니다. 본 커넥션풀은 커넥션풀 모니터링 기능을 제공하여 사용이 편리하고 커넥션풀 누수 감지가 용이하다
Spring 기반의 기본 JDBC 프레임워크 구축
먼저 Spring을 사용하여 JDBC를 구현합니다. 데이터베이스 연결 풀은 Spring 개발팀에서 권장하는 DBCP를 사용합니다. DBCP에는 먼저 세 가지 jar 패키지를 다운로드해야 합니다.
1. jar. 공식 홈페이지에서 다운로드 가능합니다.
2. commons.pool-1.6.jar을 다운로드하려면 여기를 클릭하세요.
.collections4-4.0.jar, 공식 웹사이트
이 세 개의 jar 패키지를 다운로드한 후 이를 자신의 프로젝트로 가져오십시오(참고: MySql 패키지) dbcp와 pool 모두 dbcp2와 pool2 버전이 있지만 Apache 공식 웹사이트에서 다운로드할 수 있지만 dbcp1과 pool1의 버전 다운로드 주소가 여기에 제공됩니다. MyEclipse10에 포함된 기본 JRE가 버전 1.6이라는 점을 고려하여 dbcp1 및 pool1은 JDK1.6에서 실행할 수 있으므로 dbcp1 및 pool1을 다운로드하여 사용하세요. 여기 pool1이 있습니다. dbcp2와 pool2를 원할 경우 Apache 공식 홈페이지에서 다운로드할 수 있습니다. 단, dbcp2는 pool2와 쌍을 이루어야 하며, dbcp1은 pool1과 쌍을 이루어야 한다는 점에 유의하시기 바랍니다.
JDBC에 대해서는 이전에 작성한 적이 있습니다. 데이터베이스 생성 및 엔터티 클래스는 모두 원본 기사에서 사용되었습니다. 여기서는 기본 JDBC를 Spring JDBC로 옮깁니다. . 더 많은 기능을 추가하세요. 학생 관리 카테고리는입니다.
public class StudentManager { private JdbcTemplate jdbcTemplate; private static StudentManager instance = new StudentManager(); public static StudentManager getInstance() { return instance; } public JdbcTemplate getJdbcTemplate() { return jdbcTemplate; } public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } }
Spring의 XML 구성 파일의 이름은 jdbc.xml이고 jdbc.xml은 다음과 같이 작성됩니다.
<?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-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd"> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <!-- 驱动包名 --> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <!-- 数据库地址 --> <property name="url" value="jdbc:mysql://localhost:3306/school?useUnicode=true&characterEncoding=utf8;" /> <!-- 用户名 --> <property name="username" value="root" /> <!-- 密码 --> <property name="password" value="root" /> <!-- 最大连接数量 --> <property name="maxActive" value="150" /> <!-- 最小空闲连接 --> <property name="minIdle" value="5" /> <!-- 最大空闲连接 --> <property name="maxIdle" value="20" /> <!-- 初始化连接数量 --> <property name="initialSize" value="30" /> <!-- 连接被泄露时是否打印 --> <property name="logAbandoned" value="true" /> <!-- 是否自动回收超时连接 --> <property name="removeAbandoned" value="true" /> <!-- 超时等待时间(以秒为单位) --> <property name="removeAbandonedTimeout" value="10" /> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource" /> </bean> <bean id="studentManager" class="com.xrq.jdbc.StudentManager" factory-method="getInstance"> <property name="jdbcTemplate" ref="jdbcTemplate" /> </bean> </beans>
main함수는 :
public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("jdbc.xml"); System.out.println(StudentManager.getInstance()); System.out.println(StudentManager.getInstance().getJdbcTemplate()); }
는 문제 없이 실행됩니다. StudentManager의 참조 주소와 StudentManager의 속성 jdbcTemplate의 참조 주소를 얻습니다. 이는 전체 연결 및 주입을 보여줍니다. 괜찮아요.
JDBCTemple은 Spring의 가장 기본적인 JDBC 템플릿으로, JDBC와 간단한 인덱스매개변수쿼리를 사용하여 데이터베이스에 대한 간단한 액세스를 제공합니다. JDBCTemplate 외에도 Spring은 NamedParameterJdbcTemplate과 SimpleJdbcTemplate이라는 두 가지 클래스도 제공합니다. 전자는 인덱스를 사용하는 대신 쿼리를 실행할 때 SQL의 명명된 매개변수에 값을 바인딩할 수 있습니다. 후자는 autoboxing, generics 및 <와 같은 Java 5 기능을 활용합니다. 🎜>가변 매개변수 JDBC 템플릿 사용을 단순화하는 목록입니다. 어떤 것을 사용할지는 개인의 취향에 따라 달라지는데, 여기서는 JdbcTemplate을 사용하므로 학생 관리 클래스에 JdbcTemplate을 추가합니다.
추가: 1. dbcp는 사용자 구성을 위한 다양한 매개변수를 제공합니다. 각 매개변수의 의미는 온라인에서 확인할 수 있습니다. >2. dbcp의 url 속성에 주의하세요. url은 데이터베이스 연결 주소를 의미합니다. 는
특수 문자를 만나면 변환해야 합니다. 이므로 여기서 "&"는 "&"가 되며, 그렇지 않으면 오류가 보고됩니다. Spring 기반 JDBC 추가, 삭제, 수정 및 확인
위 부분 Spring JDBC의 기본 프레임워크가 구축되는 과정에서 Java 코드가 CRUD를 구현하는 방법을 살펴보겠습니다. 이 과정에서 jdbc.xml은 변경할 필요가 없습니다. 1. 학생 정보를 추가합니다. 코드는
// 添加学生信息 public boolean addStudent(Student student) { try { jdbcTemplate.update("insert into student values(null,?,?,?)", new Object[]{student.getStudentName(), student.getStudentAge(), student.getStudentPhone()}, new int[]{Types.VARCHAR, Types.INTEGER, Types.VARCHAR}); return true; } catch (Exception e) { return false; } }
2. ID
를 기준으로 지정된 학생 정보를 삭제합니다. 코드는// 根据Id删除单个学生信息 public boolean deleteStudent(int id) { try { jdbcTemplate.update("delete from student where studentId = ?", new Object[]{id}, new int[]{Types.INTEGER}); return true; } catch (Exception e) { return false; } }
// 根据学生Id查询单个学生信息 public Student getStudent(int id) { try { return (Student)jdbcTemplate.queryForObject("select * from student where studentId = ?", new Object[]{id}, new int[]{Types.INTEGER}, new RowMapper<Student>(){ public Student mapRow(ResultSet rs, int arg1) throws SQLException { Student student = new Student(rs.getInt(1), rs.getString(2), rs.getInt(3), rs.getString(4)); return student; } }); } // 根据Id查询学生信息抛异常, 不管什么原因, 认为查询不到该学生信息, 返回null catch (DataAccessException e) { return null; } }
5. 모든 학생 정보를 쿼리합니다. 코드는 // 查询所有学生信息
public List<Student> getStudents()
{
List<Map<String, Object>> resultList = jdbcTemplate.queryForList("select * from student");
List<Student> studentList = null;
if (resultList != null && !resultList.isEmpty())
{
studentList = new ArrayList<Student>();
Map<String, Object> map = null;
for (int i = 0; i < resultList.size(); i++)
{
map = resultList.get(i);
Student student = new Student(
(Integer)map.get("studentId"), (String)map.get("studentName"),
(Integer)map.get("studentAge"), (String)map.get("studentPhone")
);
studentList.add(student);
}
}
return studentList;
}
1. 개인적인 경험으로 볼 때 마지막 쿼리를 제외하고는 다른 모든 쿼리에 try...catch... 블록을 추가하는 것이 좋습니다. 작업이 실패하면
예외가 발생합니다, 이를 잡으면 작업이 실패했음을 알 수 있으며, 작업이 성공했는지 실패했는지 알 수 없습니다. 🎜>
2. 정보를 추가하거나 업데이트하는 것은 권장하지 않습니다. 운영되는 각 필드는 형식 매개변수로 사용되는 것이 좋습니다. 이는 <에 더 가깝습니다. 🎜>객체지향
의 설계 원칙. 둘째, 형식 매개변수 목록의 필드가 너무 많으면 오류가 발생하기 쉽습니다3. placeholders?, 각 자리 표시자의 필드를 지정하려면 매개변수 유형이 있는
overloaded메소드를 선택하는 것이 좋습니다. 마지막으로 제가 원하는 것은 여기서 말하는 것은 jdbcTemplate의 기본 사용법입니다. jdbcTemplate에는 많은 메서드가 있으므로 하나씩 자세히 설명하지 않고 Spring
API<를 확인해 보세요. 🎜> 문서.<?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-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd"> <context:property-placeholder location="classpath:db.properties"/> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <!-- 驱动包名 --> <property name="driverClassName" value="${mysqlpackage}" /> <!-- 数据库地址 --> <property name="url" value="${mysqlurl}" /> <!-- 用户名 --> <property name="username" value="${mysqlname}" /> <!-- 密码 --> <property name="password" value="${mysqlpassword}" /> <!-- 最大连接数量 --> <property name="maxActive" value="150" /> <!-- 最小空闲连接 --> <property name="minIdle" value="5" /> <!-- 最大空闲连接 --> <property name="maxIdle" value="20" /> <!-- 初始化连接数量 --> <property name="initialSize" value="30" /> <!-- 连接被泄露时是否打印 --> <property name="logAbandoned" value="true" /> <!-- 是否自动回收超时连接 --> <property name="removeAbandoned" value="true" /> <!-- 超时等待时间(以秒为单位) --> <property name="removeAbandonedTimeout" value="10" /> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource" /> </bean> <bean id="studentManager" class="com.xrq.jdbc.StudentManager" factory-method="getInstance"> <property name="jdbcTemplate" ref="jdbcTemplate" /> </bean> </beans>
Java 무료 동영상 튜토리얼
2.JAVA 튜토리얼 매뉴얼
3. 🎜 >Java 주석 종합 분석위 내용은 Spring의 JDBC 데이터베이스 메소드 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!