Maison Java javaDidacticiel Introduction aux méthodes de la base de données JDBC au Spring

Introduction aux méthodes de la base de données JDBC au Spring

May 11, 2017 am 10:08 AM
java jdbc spring 连接池

Cet article présente principalement la construction du framework JDBC de base basé sur Spring ; l'ajout, la suppression, la modification et l'interrogation de JDBC basé sur Spring, etc., qui a une très bonne valeur de référence ; . Voyons cela avec l'éditeur ci-dessous

Pool de connexions à la base de données

Pour une application de base de données simple, l'accès à la base de données n'étant pas très fréquent, vous pouvez simplement lorsque vous avez besoin d'accéder à la base de données, vous créez une nouvelle connexion et la fermez lorsque vous avez terminé. Cela n'entraînera aucune surcharge de performances. Mais pour une application de base de données complexe, la situation est complètement différente. L'établissement et la fermeture fréquents de connexions réduiront considérablement les performances du système, car l'utilisation des connexions est devenue un goulot d'étranglement des performances du système.

En établissant un pool de connexions à la base de données et un ensemble de politiques de gestion de l'utilisation des connexions, l'effet de réutilisation des connexions peut être obtenu, de sorte qu'une connexion à la base de données puisse être en toute sécurité et réutilisée efficacement, évitant ainsi besoin d'une base de données La surcharge liée à l'établissement et à la fermeture fréquents de connexions. Le principe de base du

pool de connexions à la base de données est de maintenir un certain nombre de connexions à la base de données dans le pool d'objets internes et d'exposer les méthodes d'acquisition et de retour des connexions à la base de données à l'extérieur. Par exemple : les utilisateurs externes peuvent obtenir la connexion via la méthode getConnection, puis renvoyer la connexion via la méthode releaseConnection après utilisation. Notez que la connexion n'est pas fermée pour le moment, mais est recyclée par le gestionnaire de pool de connexions et préparée pour la suivante. utiliser.

Avantages apportés par la technologie du pool de connexions aux bases de données :

1. Réutilisation des ressources

En raison de Les connexions à la base de données sont réutilisées, évitant ainsi une surcharge de performances causée par la création et la libération fréquentes de liens. D'autre part, sur la base de la réduction de la consommation du système, cela améliore également la stabilité de l'environnement d'exploitation du système (réduit la fragmentation de la mémoire et le traitement temporaire de la base de données/le nombre de threads)

2. Vitesse de réponse du système plus rapide

Pendant le processus d'initialisation du pool de connexions à la base de données, plusieurs pools de connexions à la base de données sont souvent créés et placés dans le pool pour la sauvegarde. À ce stade, l'initialisation de la connexion est terminée. Pour le traitement des demandes métier, les connexions disponibles existantes sont directement utilisées pour éviter la surcharge de temps liée au processus d'initialisation et de libération de la connexion à la base de données, réduisant ainsi le temps de réponse global du système

3. Gestion unifiée des connexions pour éviter les fuites de connexion à la base de données

Dans une implémentation de pool de connexions à la base de données relativement complète, la récupération forcée peut être basée sur le paramètre de délai d'expiration d'occupation de connexion prédéfini. La connexion occupée évite ainsi les fuites de ressources qui peuvent survenir lors des opérations régulières de connexion à la base de données.

Il existe actuellement de nombreux produits de pool de connexions à des bases de données, notamment :

1, dbcp

dbcp, le pool de connexions à la base de données produit par Apache, est recommandé par l'équipe de développement Spring. Il est activement développé et est un produit de pool de connexions à la base de données extrêmement largement utilisé. Cependant, depuis Internet

2, c3p0

le pool de connexions à la base de données recommandé par l'équipe de développement Hibernate, qui implémente la liaison des sources de données et JNDI

3. Proxool

Proxool a une bonne réputation et il n'y a pas de commentaires négatifs (par exemple, dbcp n'est pas utilisé par Hibernate). car Hibernate pense qu'il y a trop de bugs. Recommandé) est également le pool de connexions à la base de données recommandé par l'équipe de développement d'Hibernate, mais il n'y a pas beaucoup d'utilisateurs et le développement n'est pas assez actif. Ce pool de connexions fournit la fonction de surveillance du pool de connexions, qui est pratique et facile à utiliser, ce qui facilite la détection des fuites du pool de connexions

Création du framework de base JDBC basé sur Spring

Parlons-en d'abord. Utilisez Spring pour implémenter JDBC. Le pool de connexions à la base de données utilise DBCP recommandé par l'équipe de développement de Spring et nécessite trois packages jar :

1. jar. Il est disponible sur le site officiel. Cliquez sur J'ai téléchargé

2.commons.pool-1.6.jar, qui est disponible sur le site officiel. Cliquez ici pour télécharger

3. .collections4-4.0.jar, disponible sur le site officiel

Après avoir téléchargé ces trois packages jar, veuillez les importer dans votre propre projet (remarque : n'oubliez pas d'importer le MySql package). Bien que dbcp et pool aient des versions dbcp2 et pool2, elles sont disponibles sur le site officiel d'Apache. Elles peuvent être téléchargées, mais l'adresse de téléchargement de la version de dbcp1 et pool1 est fournie ici. L'une des raisons est que dbcp2 et pool2. ne peut s'exécuter que dans JDK 1.7 et supérieur, tandis que dbcp1 et pool1 peuvent s'exécuter dans JDK 1.6 Run, étant donné que le JRE par défaut fourni avec MyEclipse10 est la version 1.6, alors téléchargez et utilisez dbcp1 et pool1 ici. Si vous voulez dbcp2 et pool2, vous pouvez les télécharger depuis le site officiel d'Apache. Cependant, veuillez noter que dbcp2 doit être associé à pool2 et que dbcp1 doit être associé à pool1. Ils ne peuvent pas être utilisés de manière interchangeable.

JDBC, j'ai déjà écrit un article. La création de base de données et les classes d'entités sont toutes utilisées dans l'article original. Ici, je viens de déplacer le JDBC natif vers Spring JDBC. . Ajoutez plus de fonctions, la catégorie de gestion des étudiants est :

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;
 }
}
Copier après la connexion

Le fichier de configuration XML de Spring s'appelle jdbc.xml, et jdbc.xml s'écrit comme :

<?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>
Copier après la connexion

fonction principale est :

public static void main(String[] args)
{ 
 ApplicationContext ac = 
  new ClassPathXmlApplicationContext("jdbc.xml");
 System.out.println(StudentManager.getInstance());
 System.out.println(StudentManager.getInstance().getJdbcTemplate());
}
Copier après la connexion

fonctionne sans aucun problème. J'obtiens l'adresse de référence de StudentManager et l'adresse de référence de l'attribut jdbcTemplate dans StudentManager, indiquant que toute la connexion et l'injection ne posent aucun problème.

JDBCTemple est le modèle JDBC le plus basique de Spring, utilisant JDBC et de simples indexparamètresrequête pour fournir un accès simple à la base de données. En plus de JDBCTemplate, Spring propose également deux classes : NamedParameterJdbcTemplate et SimpleJdbcTemplate. La première peut lier des valeurs aux paramètres nommés dans SQL lors de l'exécution de requêtes au lieu d'utiliser des index. La seconde profite des fonctionnalités de Java 5 telles que l'autoboxing, les génériques et <. 🎜>Paramètre variable liste pour simplifier l'utilisation des modèles JDBC. Lequel utiliser dépend des préférences personnelles. JdbcTemplate est utilisé ici, donc JdbcTemplate est ajouté à la classe de gestion des étudiants.

De plus :

1. dbcp fournit de nombreux paramètres pour la configuration utilisateur. La signification de chaque paramètre est écrite dans le . Pour connaître la signification de chaque paramètre, vous pouvez la vérifier en ligne <🎜. >

2. Faites attention à l'attribut url de dbcp. L'url fait référence à l'adresse de connexion à la base de données doit être convertie lorsque vous rencontrez des

caractères spéciaux

Signification <🎜. >, donc le "&" devient ici "&", sinon une erreur sera signalée Ajouter, supprimer, modifier et vérifier JDBC en fonction de Spring

Partie ci-dessus du framework de base de Spring JDBC est construit. Voyons comment le code Java implémente CRUD Dans ce processus, jdbc.xml n'a pas besoin d'être modifié.

1. Ajoutez des informations sur l'étudiant, le code est :

2. Supprimez les

informations sur l'étudiant spécifiées en fonction de l'identifiant

, le code est :

.
// 添加学生信息
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;
 }
}
Copier après la connexion

3. Mettre à jour les informations sur l'étudiant en fonction de l'identifiant , le code est :

// 根据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;
 }
}
Copier après la connexion

4. Interroger les informations sur l'étudiant en fonction de l'identifiant, le code est : .

5. Pour interroger toutes les informations sur les étudiants, le code est :
// 根据Id更新指定学生信息
public boolean updateStudent(int Id, Student student)
{
 try
 {
 jdbcTemplate.update("update student set studentName = ?, studentAge = ?, studentPhone = ? where studentId = ?", 
  new Object[]{student.getStudentName(), student.getStudentAge(), student.getStudentPhone(), Id},
  new int[]{Types.VARCHAR, Types.INTEGER, Types.VARCHAR, Types.INTEGER});
 return true;
 }
 catch (Exception e)
 {
 return false;
 }
}
Copier après la connexion

Il s'agit d'une simple opération CRUD Avec ces 5 comme base, le reste peut être étendu sur la base de. ces 5, je ne continuerai donc pas à écrire en détail. Poursuivant, permettez-moi de parler de quelques points à noter :
// 根据学生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;
 }
}
Copier après la connexion

1 Par expérience personnelle, à l'exception de la dernière requête, il est recommandé d'ajouter try. ..catch... bloque les autres, car dans Lorsque l'opération échoue, une exception

sera levée
// 查询所有学生信息
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;
}
Copier après la connexion
Si vous l'attrapez, vous saurez que l'opération a échoué. Sinon, le programme sera terminé. , et vous ne saurez pas si l'opération a réussi ou échoué

2. Lors de l'ajout ou de la mise à jour d'informations, il n'est pas recommandé d'utiliser chaque champ à opérer comme paramètre formel. être une classe d'entité Student. Ceci est plus conforme aux

orientés objetprincipes de conception

, deuxièmement, il existe de nombreux champs dans la liste des paramètres formels, ce qui peut facilement conduire à des erreurs

3. Pour les méthodes de mise à jour et de requête, s'il y a des espaces réservés ?, il est recommandé de choisir surcharge avec les types de paramètres Méthode, précisez le type de champ de chaque espace réservé, tout comme ce que j'ai écrit dans le code ci-dessus

Enfin, voici les

utilisations de base de jdbcTemplate, il existe de nombreuses méthodes dans jdbcTemplate , je n'entrerai pas dans les détails une par une. Vous pouvez l'essayer vous-même, ou. vous pouvez consulter la documentation Spring API

.

Lire les données dans le fichier de configuration

Avant, nous avons configuré certaines propriétés de la connexion à la base de données dans db.properties, ce qui facilite la modification, mais ici est-il codé en dur dans jdbc.xml, nous devons donc réfléchir à un moyen de lire la configuration à partir de db.properties. Le contexte aide les développeurs à y parvenir. Jetez un œil à la façon dont jdbc.xml est écrit :

<🎜. > 【Recommandations associées】

1

Tutoriel vidéo gratuit Java

<?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>
Copier après la connexion

2

Manuel du didacticiel JAVA

3. .

Analyse complète des annotations Java

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Générateur de nombres aléatoires en Java Générateur de nombres aléatoires en Java Aug 30, 2024 pm 04:27 PM

Guide du générateur de nombres aléatoires en Java. Nous discutons ici des fonctions en Java avec des exemples et de deux générateurs différents avec d'autres exemples.

Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Horodatage à ce jour en Java Horodatage à ce jour en Java Aug 30, 2024 pm 04:28 PM

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

Créer l'avenir : programmation Java pour les débutants absolus Créer l'avenir : programmation Java pour les débutants absolus Oct 13, 2024 pm 01:32 PM

Java est un langage de programmation populaire qui peut être appris aussi bien par les développeurs débutants que par les développeurs expérimentés. Ce didacticiel commence par les concepts de base et progresse vers des sujets avancés. Après avoir installé le kit de développement Java, vous pouvez vous entraîner à la programmation en créant un simple programme « Hello, World ! ». Une fois que vous avez compris le code, utilisez l'invite de commande pour compiler et exécuter le programme, et « Hello, World ! » s'affichera sur la console. L'apprentissage de Java commence votre parcours de programmation et, à mesure que votre maîtrise s'approfondit, vous pouvez créer des applications plus complexes.

See all articles