[JAVA] Je souhaite établir une connexion lorsqu'une base de données est créée à l'aide de Spring et MyBatis

Que veux-tu faire

Méthode de réalisation

--static_db utilise normalement le fichier de configuration XML (spring-servlet.xml) --dynamic_db génère dynamiquement SqlSessionFactory sans ** utiliser le fichier de configuration XML **

la mise en oeuvre

Différentes versions

Définition des informations de connexion static_db

spring-servlet.xml


  <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://10.0.0.101:3306/static_db" />
    <property name="username" value="root" />
    <property name="password" value="password" />
  </bean>

  <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="sample.da.mapper" />
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
  </bean>

  <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" name="sqlSessionFactory">
    <property name="dataSource" ref="dataSource"></property>
    <property name="mapperLocations" value="classpath*:sample/da/mapper/*.xml"/>
  </bean>

  <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
  </bean>
  <tx:annotation-driven transaction-manager="transactionManager"/>

Accès à static_db

Utiliser une instance DI Mapper

@Service
public class StaticDb01AccessService {

	@Autowired
	private UsersMapper usersMapper;
	
	public void insert() {
		Users record = new Users();
		record.setNum("001");
		record.setName("Ichiro Tanaka");
		record.setCreated(new Date());
		record.setUpdated(new Date());
		usersMapper.insert(record);
	}
}

Accès à dynamic_db

Générer manuellement SqlSessionFactory et Mapper

@Service
public class DynamicDbAccessService {

	//Par exemple, 10.0.0.115 dynamique_Appelé lors de la création de la base de données
	public void insert(String endpoint) throws Exception {
		DataSource dataSource = getDataSource(endpoint); // endpoint「10.0.0.115」
		
		TransactionFactory trxFactory = new JdbcTransactionFactory();
		
		Environment env = new Environment("dynamic_db", trxFactory, dataSource);
		
		Configuration config = new Configuration(env);
		TypeAliasRegistry aliases = config.getTypeAliasRegistry();
		aliases.registerAlias("user", Users.class);
		
		config.addMapper(UsersMapper.class);
		
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(config);
		SqlSession session = factory.openSession();
		
		try {
			UsersMapper usersMapper = session.getMapper(UsersMapper.class);
			
			Users record = new Users();
			record.setNum("001");
			record.setName("Ichiro Tanaka");
			record.setCreated(new Date());
			record.setUpdated(new Date());
			
			usersMapper.insert(record);
			
			session.commit();
		} catch (Exception e) {
			session.rollback();
		} finally {
			session.close();
		}
	}

	private DataSource getDataSource(String endpoint) {
		BasicDataSource dataSource = new BasicDataSource();
		dataSource.setDriverClassName("com.mysql.jdbc.Driver");
		dataSource.setUrl(String.format("jdbc:mysql://%s/dynamic_db", endpoint));
		dataSource.setUsername("root");
		dataSource.setPassword("password");
		return dataSource;
	}
}

Recommended Posts

Je souhaite établir une connexion lorsqu'une base de données est créée à l'aide de Spring et MyBatis
Lorsque je soutiens l'internationalisation avec Spring Boot, je suis accro à ne pas traduire une langue spécifique
J'ai essayé d'utiliser une connexion à une base de données dans le développement Android
Je veux trouver un chemin relatif dans une situation où Path est utilisé
Je veux faire une liste avec kotlin et java!
Je veux appeler une méthode et compter le nombre
Je veux créer une fonction avec kotlin et java!
Lors de la création du pool de connexions JDBC
ProxyFactory est pratique lorsque vous souhaitez tester AOP avec Spring!
J'ai essayé d'utiliser Spring + Mybatis + DbUnit
Éléments à prendre en compte lors de l'exécution d'un travail spécifié à l'aide de Spring Batch
Je voulais animer une ligne lors de l'utilisation de realm et RecyclerView sur Android, mais j'ai abandonné
Je souhaite télécharger un fichier sur Internet en utilisant Ruby et l'enregistrer localement (avec prudence)
J'ai résumé les points à noter lors de l'utilisation combinée des ressources et des ressources
Lorsque j'ai exécuté un pot créé à l'aide de WildFly Swarm, j'ai obtenu une InvocationTargetException.
Une histoire à laquelle j'étais accro lors du test de l'API à l'aide de MockMVC
Je veux afficher des images avec REST Controller de Java et Spring!
Je voudrais résumer Apache Wicket 8 car c'est une bonne idée
Je souhaite afficher un message d'erreur lors de l'inscription dans la base de données
"Professeur, je souhaite implémenter une fonction de connexion au printemps" ① Hello World
Je souhaite développer une application web!
Je veux écrire un joli build.gradle
Je veux écrire un test unitaire!
Lorsque j'ai défini un bean de portée de session dans Spring Boot, il se comportait étrangement et devait être ajusté.
Faisons une application TODO avec Java 2 Je veux créer un modèle avec Spring Initializr et créer Hello world
[Java] J'ai installé JDBC et essayé de me connecter avec servlet + MySQL. (Il existe une version utilisant DAO / Bean)
Correspond à une propriété dont le type devient un tableau lorsqu'il est vide à l'aide de JsonDeserializer
Une histoire où j'ai essayé de faire une vidéo en liant Traitement et Resolume
Je souhaite pouvoir lire des fichiers en utilisant refile avec administrate [rails6]
[Java] J'ai essayé de me connecter en utilisant le pool de connexion avec Servlet (tomcat) & MySQL & Java
Lorsque vous souhaitez notifier une erreur quelque part lors de l'utilisation de graphql-spring-boot avec Spring Boot
Je veux obtenir récursivement la superclasse et l'interface d'une certaine classe
Présentation de ce que j'ai fait lorsque je voulais ajouter un en-tête et un pied de page à RecyclerView
[Ruby] Je veux faire un saut de méthode!
Mémo lors du tâtonnement et du développement à l'aide de JavaFX
Je veux écrire une simple répétition d'une chaîne de caractères
Je souhaite concevoir une structure pour la gestion des exceptions
J'ai essayé de lier JavaFX et Spring Framework.
J'ai essayé d'implémenter un serveur en utilisant Netty
J'ai essayé de créer une fonction / écran d'administrateur de site commercial avec Java et Spring
[MyBatis] Je souhaite mapper une requête de requête à une table qui a une relation un-à-plusieurs avec un bean imbriqué.
Ce à quoi j'étais accro lors du développement d'une application Spring Boot avec VS Code
Notez que j'étais accro au traitement par lots avec Spring Boot
Lors de la création d'une application personnelle, je me demandais si je devais la faire en utilisant haml
J'ai essayé d'utiliser Wercker pour créer et publier une image Docker qui lance GlassFish 5
Un site facile à comprendre lorsque j'ai commencé à apprendre Spring Boot
Je souhaite utiliser PowerMock dans une classe qui combine des tests paramétrés et des tests ordinaires
Une histoire à laquelle j'étais accro lors de l'obtention d'une clé qui a été automatiquement essayée sur MyBatis
Je souhaite l'implémenter en plus lors de l'utilisation de kotlin sur un site exécutant Java
Je veux appeler une méthode d'une autre classe
Je veux juger la gamme en utilisant le diplôme mensuel
Je veux utiliser une petite icône dans Rails
Un mémorandum lors de la tentative de création d'une interface graphique à l'aide de JavaFX
Je souhaite surveiller un fichier spécifique avec WatchService
J'ai créé un serveur et un client Restful au printemps.
Je souhaite définir une fonction dans la console Rails
[Introduction à Spring Boot] Soumettez un formulaire à l'aide de thymeleaf