医药招商网站大全,企业信息公开网查询,wordpress回复邮件提醒,苏州房产网Spring 集成 MyBatis
将 MyBatis 与 Spring 进行整合#xff0c;主要解决的问题就是将 SqlSessionFactory 对象交由 Spring 来管理。所以该整合#xff0c;只需要将 SqlSessionFactory 的对象生成器SqlSessionFactoryBean 注册在 Spring 容器中#xff0c;再将其注入给 Dao…Spring 集成 MyBatis
将 MyBatis 与 Spring 进行整合主要解决的问题就是将 SqlSessionFactory 对象交由 Spring 来管理。所以该整合只需要将 SqlSessionFactory 的对象生成器SqlSessionFactoryBean 注册在 Spring 容器中再将其注入给 Dao 的实现类即可完成整合。
实现 Spring 与 MyBatis 的整合常用的方式扫描的 Mapper 动态代理
Spring 像插线板一样mybatis 框架是插头可以容易的组合到一起。
插线板 spring 插上 mybatis两个框架就是一个整体。 1、MySQL 创建数据库 db1,新建表 student2 2、maven 依赖 pom.xml
dependenciesdependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.12/versionscopetest/scope/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion5.3.26/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-tx/artifactIdversion5.3.26/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-jdbc/artifactIdversion5.3.26/version/dependencydependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.5.11/version/dependency!-- Spring整合MyBatis的依赖 --dependencygroupIdorg.mybatis/groupIdartifactIdmybatis-spring/artifactIdversion2.1.0/version/dependency!-- --------------------- --dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.29/version/dependencydependencygroupIdcom.alibaba/groupIdartifactIddruid/artifactIdversion1.2.8/version/dependency
/dependencies !--插件--
buildresourcesresourcedirectorysrc/main/java/directoryincludesinclude**/*.properties/includeinclude**/*.xml/include/includesfilteringfalse/filtering/resource/resourcespluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdversion3.11.0/versionconfigurationsource1.8/sourcetarget1.8/target/configuration/plugin/plugins
/build
3、定义实体类 Student 代码如下
package com.ambow.pojo;import lombok.Data;Data
public class Student {private int id;private String name;private int age;}
4、定义 StudentDao 接口 代码如下
package com.ambow.dao;import com.ambow.pojo.Student;import java.util.List;public interface StudentDao {int insertStudent(Student student);int updateStudent(Student student);int deleteStudent(int id);Student selectStudentById(int id);ListStudent selectAllStudents();
}
5、定义映射文件 mapper
在 Dao 接口的包中创建 MyBatis 的映射文件 mapper命名与接口名相同本例为 StudentDao.xml
mapper 中的 namespace 取值也为 Dao 接口 的全限定性名。 代码如下
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.ambow.dao.StudentDaoinsert idinsertStudentinsert into student2 values(null,#{name},#{age})/insertupdate idupdateStudentupdate student2 set name #{name},age #{age} where id #{id}/updatedelete iddeleteStudentdelete from student2 where id #{id}/deleteselect idselectStudentById resultTypecom.ambow.pojo.Studentselect * from student2 where id #{id}/selectselect idselectAllStudents resultTypecom.ambow.pojo.Studentselect * from student2/select/mapper
6、定义 Service 接口和实现类
接口定义 代码如下
package com.ambow.service;import com.ambow.pojo.Student;import java.util.List;public interface StudentService {int addStudent(Student student);int modifyStudent(Student student);int removeStudent(int id);Student findStudentById(int id);ListStudent findAllStudents();
}实现类定义 代码如下
package com.ambow.service.impl;import com.ambow.dao.StudentDao;
import com.ambow.pojo.Student;
import com.ambow.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import java.util.List;Service(studentService)
public class StudentServiceImpl implements StudentService {//引入StudentDao的对象Autowiredprivate StudentDao studentDao;public void setStudentDao(StudentDao studentDao) {this.studentDao studentDao;}Overridepublic int addStudent(Student student) {return studentDao.insertStudent(student);}Overridepublic int modifyStudent(Student student) {return studentDao.updateStudent(student);}Overridepublic int removeStudent(int id) {return studentDao.deleteStudent(id);}Overridepublic Student findStudentById(int id) {return studentDao.selectStudentById(id);}Overridepublic ListStudent findAllStudents() {return studentDao.selectAllStudents();}
}7、定义 MyBatis 主配置文件
在 src 下定义 MyBatis 的主配置文件命名为 mybatis.xml
这里有两点需要注意
1主配置文件中不再需要数据源的配置了。因为数据源要交给 Spring 容器 来管理了。
2这里对 mapper 映射文件的注册使用标签即只需给出 mapper 映射文件所在的包即可。因为 mapper 的名称与 Dao 接口名相同 可以使用这种简单注册方式。
这种方式的好处是若有多个映射文件这里的 配置也是不用改变的。当然也可使用原来的标签方式。 8 、修改 Spring 配置文件
1 数据源的配置(掌握)
使用 JDBC 模板首先需要配置好数据源数据源直接以 Bean 的形式配置 在 Spring 配置文件中。根据数据源的不同其配置方式不同
Druid 数据源 DruidDataSource Druid 是阿里的开源数据库连接池。是 Java 语言中最好的数据库连接 池。Druid 能够提供强大的监控和扩展功能。Druid 与其他数据库连接池的 最大区别是提供数据库的
官网GitHub - alibaba/druid: 阿里云计算平台DataWorks(https://help.aliyun.com/document_detail/137663.html) 团队出品为监控而生的数据库连接池阿里云计算平台DataWorks(https://help.aliyun.com/document_detail/137663.html) 团队出品为监控而生的数据库连接池 - GitHub - alibaba/druid: 阿里云计算平台DataWorks(https://help.aliyun.com/document_detail/137663.html) 团队出品为监控而生的数据库连接池https://github.com/alibaba/druid
使用地址Home · alibaba/druid Wiki · GitHub阿里云计算平台DataWorks(https://help.aliyun.com/document_detail/137663.html) 团队出品为监控而生的数据库连接池 - Home · alibaba/druid Wikihttps://github.com/alibaba/druid/wiki/
常见问题
配置连接池 Spring 配置文件 代码如下 !--1.DataSource--bean iddataSource classcom.alibaba.druid.pool.DruidDataSourceproperty namedriverClassName value${jdbc.driver} /property nameurl value${jdbc.url} /property nameusername value${jdbc.username} /property namepassword value${jdbc.password} //bean
2 从属性文件读取数据库连接信息
为了便于维护可以将数据库连接信息写入到属性文件中使 Spring 配置 文件从中读取数据。
属性文件名称自定义但一般都是放在 src 下。 代码如下
jdbc.drivercom.mysql.jdbc.Driver
jdbc.urljdbc:mysql://192.168.2.111:3306/db1
jdbc.usernameroot
jdbc.passwordMysql666!
Spring 配置文件从属性文件中读取数据时需要在的 value 属性中使用${ }将在属性文件中定义的 key 括起来以引用指定属性的值。
该属性文件若要被 Spring 配置文件读取其必须在配置文件中进行注册。 使用context标签。
context:property-placeholder /方式(掌握)
该方式要求在 Spring 配置文件头部加入 spring-context.xsd 约束文件
context:property-placeholder /标签中有一个属性 location用于指定属 性文件的位置。 3 注册 SqlSessionFactoryBean 代码如下 !--2.注册SqlSessionFactoryBean--bean idsqlSessionFactory classorg.mybatis.spring.SqlSessionFactoryBeanproperty namedataSource refdataSource /property nametypeAliasesPackage valuecom.ambow.pojo /property namemapperLocations valueclasspath:com/ambow/dao/*.xml //bean
4 定义 Mapper 扫描配置器 MapperScannerConfigurer
Mapper 扫描配置器 MapperScannerConfigurer 会自动生成指定的基本 包中 mapper 的代理对象。该 Bean 无需设置 id 属性。basePackage 使用分 号或逗号设置多个包。 代码如下 !--3.mapper的扫描配置器 - 生成mapper的代理对象--bean classorg.mybatis.spring.mapper.MapperScannerConfigurerproperty namesqlSessionFactoryBeanName valuesqlSessionFactory /property namebasePackage valuecom.ambow.dao //bean
9、向 Service 注入接口名
向 Service 注入 Mapper 代理对象时需要注意由于通过 Mapper 扫描配置器 MapperScannerConfigurer 生成的 Mapper 代理对象没有名称所以在 向 Service 注入 Mapper 代理时无法通过名称注入。但可通过接口的简单类名注入因为生成的是这个 Dao 接口的对象。 代码如下 !--4.向service层注入Dao--
!-- bean idstudentService classcom.ambow.service.impl.StudentServiceImplproperty namestudentDao refstudentDao //bean--
10、Spring 配置文件全部配置 代码如下
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:contexthttp://www.springframework.org/schema/contextxsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd!--整合把MyBatis中的核心对象放到Spring容器--!--引入属性配置文件--context:property-placeholder locationclasspath:jdbc.properties /context:component-scan base-packagecom.ambow.service /!--1.DataSource--bean iddataSource classcom.alibaba.druid.pool.DruidDataSourceproperty namedriverClassName value${jdbc.driver} /property nameurl value${jdbc.url} /property nameusername value${jdbc.username} /property namepassword value${jdbc.password} //bean!--2.注册SqlSessionFactoryBean--bean idsqlSessionFactory classorg.mybatis.spring.SqlSessionFactoryBeanproperty namedataSource refdataSource /property nametypeAliasesPackage valuecom.ambow.pojo /property namemapperLocations valueclasspath:com/ambow/dao/*.xml //bean!--3.mapper的扫描配置器 - 生成mapper的代理对象--bean classorg.mybatis.spring.mapper.MapperScannerConfigurerproperty namesqlSessionFactoryBeanName valuesqlSessionFactory /property namebasePackage valuecom.ambow.dao //bean!--4.向service层注入Dao--
!-- bean idstudentService classcom.ambow.service.impl.StudentServiceImplproperty namestudentDao refstudentDao //bean--!--注入的过程--!--dataSource - SqlSessionFactoryBean - MapperScannerConfigurer(生成Dao代理对象) - studentService--/beans
项目整体结构如下图 运行测试类test02 运行测试类test03