一文吃透Spring集成MyBatis
作者:几分醉意.
💖集成思路
spring能集成很多的框架,是spring一个优势功能。通过集成功能,让开发人员使用其他框架更方便。集成使用的是spring ioc 核心技术。
✨怎么使用MyBatis
使用mybatis,需要创mybatis框架中的某些对象,使用这些对象,就能使用mybatis提供的功能了。
分析: mybatis执行sql语句,需要使用那些对象?
1. 需要有Dao接口的代理对象,例如StudentDao接口,需要一个它的代理对象,使用 SqlSession.getMapper(StudentDao.class),得到dao代理对象。
2. 需要有SqlSessionFactory,创建SqlSessionFactory对象,才能使用openSession(得到SqlSession对象。
3. 数据源DataSource对象,使用一个更强大,功能更多的连接池对象代替mybatis自己的PooledDataSource。
✨集成的步骤
实现步骤:
1.使用的mysql库, 使用学生表 student2(id int 主键列, 自动增长,
name varchar(80),
age int)2.创建maven项目
3.加入依赖gav
spring依赖, mybatis依赖, mysql驱动。 junit依赖
mybatis-spring依赖(mybatis网站上提供的,用来在spring项目中,创建mybatis对象)
spring有关事务的依赖。mybatis和spring整合的时候, 事务是自动提交的。
4.创建实体类Student
5.创建Dao接口和mapper文件写sql语句
6.写mybatis主配置文件
7.创建service接口和他的实现类
8.创建spring的配置文件
1)声明数据源DataSource,使用的阿里的Druid连接池
2) 声明SqlSessionFactoryBean类,在这个类内部创建的是SqlSessionFactory对象。
3)声明MapperScannerConfiguration类,在内部创建dao代理对象,
创建的对象都放在spring容器中。4)声明Service对象,把3)的中dao赋值给service属性
9.测试dao访问数据库
✨pom加入依赖
<dependencies> <!--测试--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <!--spring依赖--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.5.RELEASE</version> </dependency> <!--spring事务依赖--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>5.2.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.2.5.RELEASE</version> </dependency> <!--mybatis依赖--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.1</version> </dependency> <!--mybatis和spring集成--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.1</version> </dependency> <!--mysql驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.9</version> </dependency> <!--阿里的连接池--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.12</version> </dependency> </dependencies> <build> <!--用mybatis就要用到这个插件 编译java目录下,除了java文件,还编译xml和properties文件--> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources> </build> </project>
✨创建MyBatis使用代码
1.创建实体类,生成get、set和toString方法。
public class Student { private Integer id; private String name; private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Student{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}'; } }
2.创建Dao接口,在里面写方法。
public interface StudentDao { //添加操作 int insertStudent(Student student); //查询操作 List<Student> selectStudents(); }
3.创建mapper文件,写SQL。
<?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="youfei1_v.Dao.StudentDao"> <!-- 使用insert,update,select标签写sql --> <insert id="insertStudent" > insert into student2(name,age) values (#{name},#{age}) </insert> <select id="selectStudents" resultType="youfei1_v.domain.Student"> select id,name ,age from student2 </select> </mapper>
4.创建Mybatis主配置文件。
注意:Spring集成MyBatis,MyBatis主配置文件里面不需要指定数据源了,下面会介绍在哪里指定。基本上Mybatis主配置文件里面就设置个日志、别名和其它的mapper文件。
<?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> <!--设置日志--> <settings> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings> <!--指定其它mapper文件的位置,目的是找到其它文件的sql语句--> <mappers> <!--使用mapper的resource属性指定mapper文件的路径。 这个路径是从类路径根目录开始 使用注意:mapper文件的路径使用 / 分割路径 一个mapper resource 指定一个mapper文件 --> <!--<mapper resource="youfei1_v/dao/StudentDao.xml"/>--> <!--name:mapper文件所在的包名 满足要求才能使用这种方式: 1.mapper文件和dao接口在同一目录 2.mapper文件和dao接口名称一致 --> <package name="youfei1_v.Dao"/> </mappers> </configuration>
✨创建Service类
1.创建service接口。
public interface StudentService { int addStudent(Student student); List<Student> queryStudent(); }
2.实现service接口。
public class StudentServiceImpl implements StudentService { private StudentDao studentDao; //创建这个dao对象和set方法 public void setStudentDao(StudentDao studentDao) { this.studentDao = studentDao; } @Override public int addStudent(Student student) { int rows = studentDao.insertStudent(student); //方法中调用studentDao对象的方法 return rows; } @Override public List<Student> queryStudent() { List<Student> students = studentDao.selectStudents(); return students; } }
✨创建Spring配置文件和测试集成MyBatis
1.创建Spring配置文件。
<?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.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <!--加载外部的属性配置文件--> <context:property-placeholder location="classpath:jdbc.properties"/> <!--声明数据源DataSource 德鲁伊--> <bean id="myDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="url" value="jdbc:mysql://localhost:3306/springdb"/> <property name="username" value="root"/> <property name="password" value="123456"/> </bean> <!--声明SqlSessionFactoryBean,在这个类的内部,创建SqlSessionFactory bean的id就代表创建SqlSessionFactory对象--> <bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!--指定数据源--> <property name="dataSource" ref="myDataSource" /> <!--用的是什么数据源的id--> <!--指定mybatis主配置文件 Resource可以直接使用 value属性赋值。 --> <property name="configLocation" value="classpath:mybatis.xml" /> </bean> <!-- 相当于:SqlSessionFactory factory = new SqlSessonFactoryBuider.build(classpath:mybatis.xml) --> <!--声明MapperScannerConfigurer SqlSession.getMapper(StudentDao.class) MapperScannerConfigurer作用是: 循环basePackage所表示的包,把包中的每个接口都找到,调用SqlSession.getMapper 把每个dao接口都创建出dao对象 ,dao代理对象放在容器中。 ApplicationContext ctx = .... SqlSessionFactory sqlSessionFactory = ctx.getBean("factory"); SqlSession session = sqlSessionFactory.openSession(); for(接口: com.bjpowernode.dao){ 接口 对象 = session.getMapper(接口) springMap.put(接口名的首字母小写, 对象) //创建dao代理,这个dao代理的对象的名字是这个接口的首字母小写。也就是bean的id } --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!--指定SqlSessionFactory对象的名称--> <property name="sqlSessionFactoryBeanName" value="factory" /> <!--指定基本包,dao接口所在的包名--> <property name="basePackage" value="youfei1_v.Dao" /><!--创建dao代理,这个dao代理的对象的名字是这个接口名的首字母小写。也就是bean的id--> </bean> <!--声明service--> <bean id="studentService" class="youfei1_v.service.impl.StudentServiceImpl"> <property name="studentDao" ref="studentDao" /> <!--set注入:把dao代理赋值给StudentServiceImpl类中的StudentDao对象--> </bean> <!--ref用的就是上面的创建出来的dao代理,的id值,这个id值就是接口名的首字母小写--> <!--ref="studentDao" :studentDao指的是Student这个接口的代理。上面那个bean,创建出Student接口的代理,这个代理的id就是接口名字小写studentDao--> </beans>
2.测试
✨使用外部属性配置文件
1.创建一个.properties的文件
2.在spring配置文件中引用
以上就是一文吃透Spring集成MyBatis的详细内容,更多关于Spring集成MyBatis的资料请关注脚本之家其它相关文章!