Spring集成MyBatis
将mybatis与spring进行整合,主要解决的问题就是讲SqlSessionFactory对象交由spring来管理,所以,该整合,只需要将SqlSessionFactory的对象生成器SqlSessionFactoryBean注册在spring容器中,再将其注入给Dao的实现类即可完成整合。实现spring与mybatis的整合常用的方式:扫描的Mapper动态代理spring就像插线板一样
将mybatis与spring进行整合,主要解决的问题就是讲SqlSessionFactory对象交由spring来管理,所以,该整合,只需要将SqlSessionFactory的对象生成器SqlSessionFactoryBean注册在spring容器中,再将其注入给Dao的实现类即可完成整合。
实现spring与mybatis的整合常用的方式:扫描的Mapper动态代理
spring就像插线板一样,mybatis框架是插头,可以很容易的组合到一起。mybatis插头插入spring插线板就是一个整体。
我们需要spring创建以下对象
1.独立的连接池对象,使用阿里的druid连接池
2.SqlSessionFactory对象
3.创建出dao对象
上面三个对象的创建,使用xml的bean标签
Spring集成MyBatis实现步骤:
先准备创建数据库,新建表
第一步:
新建maven项目
第二步:
加入maven的依赖
1.spring的依赖
2.mybatis依赖
3.mysql驱动
4.spring的事务的依赖
5.mybatis和spring集成的依赖:mybatis官方提供的,用来在spring项目中常见mybatis的SqlSessionFactory,dao对象的
<dependencies>
<!--测试单元依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!--spring核心ioc依赖-->
<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>
<resources>
<resource>
<directory>src/main/java</directory><!--所在的目录-->
<includes><!--包括目录下的.properties,.xml文件都会扫描到-->
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
第三步:
创建Student实体类
package com.bjpowernode.domain;
public class Student {
//属性名和列名一样
private Integer id;
private String name;
private String email;
private Integer age;
//无参构造
public Student() {
}
//有参构造
public Student(Integer id, String name, String email, Integer age) {
this.id = id;
this.name = name;
this.email = email;
this.age = age;
}
//set、get方法
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 String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", email='" + email + '\'' +
", age=" + age +
'}';
}
}
第四步:
创建dao接口和mapper文件
第五步:
创建mybatis主配置文件
<?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:控制mybatis全局行为-->
<settings>
<!--设置mybatis输出日志-->
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<!--类别名-->
<typeAliases>
<package name="com.bjpowernode.domain"/>
</typeAliases>
<mappers>
<!--一个mapper标签指定一个文件的位置。
从类路径开始的路径信息。 target/clasess
指定sql映射文件的位置,使用包的方式,一次性全部把包中的映射文件全部读取到
-->
<package name="com.bjpowernode.dao"/>
</mappers>
</configuration>
第六步:
创建Service接口和实现类,属性是dao
Service接口实现类 定义StudentDao属性
package com.bjpowernode.service.impl;
import com.bjpowernode.dao.StudentDao;
import com.bjpowernode.domain.Student;
import com.bjpowernode.service.StudentService;
import java.util.List;
public class StudentServiceImpl implements StudentService {
//引用类型
private StudentDao studentDao;
//使用set注入赋值
public void setStudentDao(StudentDao studentDao) {
this.studentDao = studentDao;
}
@Override
public int addStudent(Student student) {
int num = studentDao.insertStudent(student);
return num;
}
@Override
public List<Student> selectStudent() {
List<Student> studentList = studentDao.selectStudent();
return studentList;
}
}
第七步:
创建spring的配置文件:声明mybatis的对象交给spring创建
1.数据源
2.SqlSessionFactory
3.Dao对象
4.声明自定义的service
<?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.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<!--连接池最多可以连接多少数据库,默认20-->
<property name="maxActive" value="20"/>
</bean>
<!--声明mybatis中提供的SqlSessionFactoryBean类,这个类内部创建SqlSessionFactory-->
<bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--set注入,把数据库连接池赋给了dataSource属性-->
<property name="dataSource" ref="MyDataSource"/>
<!--
mybatis主配置文件的位置,因为是在spring中指定mybatis主配置文件,所以要用classpath:
configLocation:属性是Resource类型的,负责读取配置文件
赋值使用 value 指定文件的路径
-->
<property name="configLocation" value="classpath:mybatis.xml"/>
</bean>
<!--创建dao对象,使用SqlSession的getMapper(StudentDao.class)
MapperScannerConfigurer:在内部调用getMapper()生成每个dao接口的代理对象
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--指定SqlSessionFactory对象的id-->
<property name="sqlSessionFactoryBeanName" value="SqlSessionFactory"/>
<!--指定包名,包名是dao接口的包名
MapperScannerConfigurer会扫描这个包中所有的接口,
把每个接口都执行一次getMapper()方法,得到每个接口的dao对象
创建好的dao对象放入spring容器中
创建好的dao对象名称就是接口名首字母小写,例如studentDao
-->
<property name="basePackage" value="com.bjpowernode.dao"/>
</bean>
<!--声明Service-->
<bean id="ServiceStudent" class="com.bjpowernode.service.impl.StudentServiceImpl">
<property name="studentDao" ref="studentDao"/>
</bean>
</beans>
第八步:
创建测试类,获取Service对象,通过service调用dao完成数据库的访问
/*使用Service*/
@Test
public void test03(){
//读取spring主配置文件
String in = "applicationContext.xml";
ApplicationContext ac = new ClassPathXmlApplicationContext(in);
StudentService service = (StudentService) ac.getBean("ServiceStudent");
Student student = new Student(4002,"裴元虎","peiyuanhu@163.com",26);
int i = service.addStudent(student);
System.out.println("添加"+i+"行数据");
}
@Test
public void test04(){
//读取spring主配置文件
String in = "applicationContext.xml";
ApplicationContext ac = new ClassPathXmlApplicationContext(in);
StudentService service = (StudentService) ac.getBean("ServiceStudent");
List<Student> studentList = service.selectStudent();
for (Student stu:studentList) {
System.out.println(">>>>"+stu);
}
}
--------------------------------------------------------------------------------
为了方便修改数据库连接信息,我们自己定义个文件专门放数据库连接信息
第一步:
创建数据库连接信息jdbc.properties文件
jdbc.url=jdbc:mysql://localhost:3306/bjpowernode?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=123456
第二步:
在spring主配置配置文件中指定连接数据库信息文件
<!--数据库配置信息,写在一个单独的文件里,执行文件的路径-->
<context:property-placeholder location="classpath:jdbc.properties"/>
第三步:
在主配置文件中用${}指定连接信息
例如,${jdbc.url}就是jdbc.properties文件中=号左边的值
<property name="url"
value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
更多推荐
所有评论(0)