Integración de spring + mybatis

1. Diagrama de estructura del proyecto
Inserte la descripción de la imagen aquí2. Paquete Jar
1. La versión del controlador de la base de datos MySQL debe ser 5.1.46 y superior
2. El cuadro rojo es el
Inserte la descripción de la imagen aquí
archivo de configuración de primavera necesario
beans.xml del paquete Jar
1. Marcador de posición $ {}, no Escritura incorrecta
2. La <? Xml version = "1.0" encoding = "UTF-8"?> Del archivo xml debe estar en la primera línea; de lo contrario, se informará un error
3. No puede haber espacios entre el controlador y la URL
4. Se requiere el nombre de usuario y la contraseña de la base de datos Escribe bien

<?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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
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.3.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
http://www.springframework.org/schema/aop 
http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd"> 
 
 <!-- 加载do.properties文件 -->
<context:property-placeholder location="classpath:do.properties"/>
         
         
         <!-- 配置数据源 -->
 <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"> 

<!-- 数据库驱动 -->
     <property name="driverClassName" value="${jdbc.driver}" /> 

<!-- 连接字符串 -->
     <property  name="url"  value="${jdbc.url}" />  
 
 <!-- 数据库用户名和密码 -->
     <property name="username" value="${jdbc.username}" /> 
	 <property name="password" value="${jdbc.password}" />
	
	 <property name="maxTotal" value="${jdbc.maxTotal}" /> 
	 <property name="maxIdle" value="${jdbc.maxIdle}" />
	 <property name="initialSize" value="${jdbc.initialSize}" /> 
	  
 </bean> 
 
  <!-- 声明事务管理器,依赖于数据源 -->
  <bean 
         id="transactionManager"
         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  		
  		<property name="dataSource" ref="dataSource" /> 
  
  </bean>
  
   <!-- 基于annotation(注解)的声明式事务 -->
  <tx:annotation-driven transaction-manager="transactionManager" />
  
  
  <!-- 配置mybatis工厂 -->
  <bean id="sqlSessionFactory"
        class="org.mybatis.spring.SqlSessionFactoryBean">
          
          <!-- 注入数据源 -->
          <property name="dataSource" ref="dataSource" />
          
          <!-- 加载mybatis配置文件 -->
          <property name="configLocation"
                    value="classpath:mybatis-config.xml" /> 
 
  </bean>
  
  <!--   传统Dao模式开发--> 
 <bean id="customerDao" class="com.itheima.dao.impl.CustomerDaoImpl"> 

	<property name="sqlSessionFactory" ref="sqlSessionFactory" /> 

</bean>

 
<bean id="customerMapper" 
class="org.mybatis.spring.mapper.MapperFactoryBean">
	
	<!--  value=包+接口 -->
	<property name="mapperInterface"
	          value="com.mapper.CustomerMapper"/>
	          
	<property name="sqlSessionFactory" ref="sqlSessionFactory" /> 
</bean>

<!--  mapper代理开发(基于MapperScannerConfigurer)-->

 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
       
       <!-- 加载包;value=包名(不要写到类);不必引用sqlSessionFactory-->
       <property name="basePackage" value="com.mapper" />
 </bean>

</beans>         

Notas y especificaciones de desarrollo del agente del asignador (MFB y MSC):
1. El nombre de la interfaz del asignador debe ser coherente con el archivo asignado por el asignador.
2. El espacio de nombres en el archivo Mapper.xml es el mismo que la ruta de clase de la interfaz del asignador (es decir, el archivo de interfaz y la asignación El archivo debe colocarse en el mismo paquete)
Si se siguen los dos anteriores, no es necesario introducir mapper.xml en mybatis-config
3. El nombre del método en la interfaz Mapper debe ser coherente con cada declaración de ejecución definida en mapper.xml
4. El parámetro debe ser consistente con parameterType
5. El tipo de retorno debe ser consistente con resultType

hacer.propiedades
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/emis
jdbc.username=root
jdbc.password=root
jdbc.maxTotal=30 
jdbc.maxIdle=10
jdbc.initialSize=5

mybatis-conlig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<mappers>	  
		  <mapper resource="mapper/Customer.xml"/> <!-- 加载映射文件 -->      
	</mappers>
</configuration>

Archivo de asignación Customer.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
 <mapper namespace="mc">
   
   <select id="findID"  parameterType="Integer"
           resultType="com.itheima.po.Customer">
    select * from customer where id=#{id}
   </select>
   

 </mapper>

El nombre del atributo de la clase de entidad
debe ser coherente con el nombre del atributo en la base de datos

package com.itheima.po;

public class Customer {
	
	private int id;
	private String name;
	private String jobs;
	private String phone;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getJobs() {
		return jobs;
	}
	public void setJobs(String jobs) {
		this.jobs = jobs;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	
	public String toString()
	{
		return id+","+name+","+jobs+","+phone+"\n";	
	}
}

//Dao接口
package com.itheima.dao;

import com.itheima.po.Customer;

public interface CustomerDao {
	
	public Customer findID(Integer id);

}

//Dao实现类
package com.itheima.dao.impl;

import org.mybatis.spring.support.SqlSessionDaoSupport;

import com.itheima.dao.CustomerDao;
import com.itheima.po.Customer;

public class CustomerDaoImpl extends SqlSessionDaoSupport
implements CustomerDao{

	@Override
	public Customer findID(Integer id) {
		return 
		this.getSqlSession().selectOne
		("mc.findID", id); //命名空间+SQL执行语句的id
	}

}

Clase de prueba


import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.itheima.dao.CustomerDao;
import com.itheima.po.Customer;
import com.mapper.CustomerMapper;


public class Test1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		ApplicationContext applicationContext = new
				ClassPathXmlApplicationContext("beans.xml");
        
		//传统的Dao模式
		//根据容器中的id获取bean
//		CustomerDao cd = (CustomerDao) applicationContext.getBean("customerDao");
//        
//		Customer c = cd.findID(1);
		
//		mapper接口开发(MapperFactoryBean和MapperScannerConfigurer类)
		
//      通过className.class获取bean
		CustomerMapper cm =  applicationContext.getBean(CustomerMapper.class);
		
		Customer c = cm.findId(1);
		System.out.println(c);
	}

}

Supongo que te gusta

Origin blog.csdn.net/m0_46267375/article/details/106481228
Recomendado
Clasificación