使用技术:ioc
为什么使用ioc:ioc能够创建对象,能把mybatis和spring集成在一起,像一个框架。
可以把mybatis框架中的对象交给spring统一创建,开发人员从spirng中获取对象。
开发人员就不用同时面对两个或多个框架了,仅仅只面对一个spring。
mybatis使用步骤:
1.定义dao接口,StudentDao
2.定义mapper文件,StudentDao.xml
3.定义mybatis的主配置文件mybatis.xml
4.创建dao的代理对象,StudentDao dao=SqlSession.getMapper(StudentDao.class)
;
List<Student> students=dao.selectStudents();
要使用dao对象,需要使用getMapper方法,
怎么能使用getMapper()方法,需要哪些条件:
1.获取SqlSession对象,需要使用SqlSessionFactory的openSession()方法。
2.创建SqlSessionFactory对象。通过读取mybatis主配置文件,能创建SqlSessionFactory对象
mybatis主配置文件:
1.数据库信息
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--数据库的驱动类名-->
<property name="driver" value="${jdbc.driver}"/>
<!--连接数据库的url字符串-->
<property name="url" value="${jdbc.url}"/>
<!--访问数据库的用户名-->
<property name="username" value="${jdbc.username}"/>
<!--访问数据库的密码-->
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
实际开发中,并不会使用mybatis自带的连接池POOLED,我们会使用独立的连接池类,替换掉mybatis自带的,把连接池也交给spring创建
2.mapper文件的位置
<mappers>
<mapper resource="mapper/Empmapper.xml"/>
</mappers>
===========================================================================
通过以上说明,我们需要让spring创建以下对象
1.独立的连接池对象,使用阿里的druid连接池
2.SqlSessionFactory对象
3.创建出dao对象
===========================================================================
1.集成spring和mybatis框架步骤
1.1、新建maven项目
1.2、加入maven依赖:
- spring依赖
- mybatis依赖
- mysql驱动
- spring事务的依赖
- 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>
<!--aspectj依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
</dependencies>
<build>
<resources>
<!--目的是把src/main/java目录中的xml文件包含到输出结果中。输出到classes目录中-->
<resource>
<directory>src/main/java</directory><!--所在的目录-->
<includes><!--包括目录下的.properties, .xml文件都会扫描到-->
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
1.3、创建实体类
1.4、创建dao接口和mapper文件
接口:
@Repository("empDao")
public interface EmpDao {
int insertEmp(Tb_emp emp);
List<Tb_emp> selectEmps();
}
mapper文件:
<?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="com.wxk.dao.EmpDao">
<select id="selectEmps" resultType="com.wxk.vo.Tb_emp">
select * from tb_emp
</select>
<insert id="insertEmp">
isnert into tb_emp ename,sex,hiredate,salary,did
values (#{ename},#{sex},#{hiredate},#{salary},#{did})
</insert>
</mapper>
1.5、创建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>
<!--sql mapper(映射文件)的位置-->
<mappers>
<package name="com.wxk.dao"/>
</mappers>
</configuration>
1.6、创建Service接口和实现类,属性是dao
Service接口:
public interface EmpService {
int addEmp(Tb_emp emp);
List<Tb_emp> queryEmps();
}
Service实现类:
@Service("empService")
public class EmpServiceImpl implements EmpService {
//引用类型
@Autowired
private EmpDao empDao;
@Override
public int addEmp(Tb_emp emp) {
int result =empDao.insertEmp(emp);
return result;
}
@Override
public List<Tb_emp> queryEmps() {
List<Tb_emp> emps=empDao.selectEmps();
return emps;
}
}
1.7、创建spring的配置文件:声明mybatis的对象交给spring创建
- 数据源DataSource
<!--扫描注解文件-->
<context:component-scan base-package="com.wxk"/>
<context:property-placeholder location="classpath:db.properties"/>
<!--声明数据源DataSource,作用是连接数据库的-->
<bean id="myDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<!--set注入给DruidDataSource提供数据库信息-->
<property name="url" value="${db.url}"/>
<property name="username" value="${db.username}"/>
<property name="password" value="${db.password}"/>
<property name="maxActive" value="${db.maxActive}"/>
</bean>
- SqlSessionFactory
<!--声明的是mybatis中所提供的SqlSessionFactoryBean类,这个类内部是创建SqlSessionFactory的-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--set注入,把数据库的连接池赋给dataSource-->
<property name="dataSource" ref="myDataSource"/>
<!--
mybatis主配置文件的位置
configLocation属性是Resource类型,读取配置文件
它的赋值,使用value,指定文件的路径,使用classpath:表示文件的位置
-->
<property name="configLocation" value="classpath:mybatis.xml"/>
</bean>
- Dao对象
<!--
创建dao对象,使用SqlSession的getMapper(EmpDao.class)
MapperScannerConfigurer:在内部调用getMapper()生成每个dao接口的代理对象
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--指定SqlSessionFactory对象的id-->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<!--指定包名,包名是dao接口所在的包名
MapperScannerConfigurer会扫描这个包中的所有接口,把每个接口都执行一次getMapper方法,得到
每个接口的dao对象。创建好的dao对象放入到spring的容器中。
-->
<property name="basePackage" value="com.wxk.dao"/>
</bean>
- 声明自定义的service
在service的实现类上面添加注解@Service即可声明,可参考上文1.6中的service实现类