先进行传统的非mapper包同名接口文件和.xml文件的整合配置
1.首先创建web工程并在lib目录下导入相关的整合jar包
项目结构
需要导入的相关jar包
2.在src目录下创建配置Mybatis的核心配置文件 配置别名 和通过加载映射mapper包中的映射文件
SqlMapConfig.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>
<!--配置别名-->
<typeAliases>
<!--<typeAlias type="com.zxh.model.User" alias="user"></typeAlias>-->
<!--指定报名,别名就是类名,第一个小写-->
<package name="com.zxh.backoffice.model"></package>
</typeAliases>
<!--告诉mybatis加载映射文件-->
<mappers>
<!--第一种:写映射文件名,相对路径-->
<!--<mapper resource="com/zxh/sqlmap/User.xml"/>-->
<!--<mapper resource="com/zxh/mapper/UserMapper.xml"/>-->
<mapper resource="com/zxh/backoffice/sqlmap/User.xml"></mapper>
<!--第二种:写类名-->
<!--<mapper class="com.zxh.mapper.UserMapper"/>-->
<!--<package name="com.zxh.backoffice.sqlmap"></package>-->
</mappers>
</configuration>
mapper包中的映射文件
User.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="user">
<!--根据id查询-->
<select id="findUserById" parameterType="int" resultType="user">
select * from user WHERE id = #{id}
</select>
</mapper>
3.创建Spring的配置文件并配置
(1).配置数据源
首先,在src目录下新建存有连接数据库信息的配置文件db.properties
driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatisday01?useUnicode=true&characterEncoding=utf8
user=root
password=root
maxActive=10
maxIdle=5
注意:不要使用username命名,否则测试时会报错
然后,新建Spring的配置文件applicationContext.xml并依次
配置数据库数据源,
配置SqlSessionFactory会话工厂(引入数据源、加载Mybatis的配置文件SqlMapConfig.xml),
在dao包下创建UserDao接口,并创建接口的实现类,接口的实现类要继承SqlSessionDaoSupport
UserDaoImpl.java
package com.zxh.backoffice.dao.impl;
import com.zxh.backoffice.dao.UserDao;
import com.zxh.backoffice.model.User;
import org.mybatis.spring.support.SqlSessionDaoSupport;
public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {
@Override
public User findUserById(int id) {
return this.getSqlSession().selectOne("user.findUserById",id);
}
}
再配置daoBean并在daoBean中注入SqlSessionFactory。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
<!--加载配置文件-->
<context:property-placeholder location="db.properties"/>
<!-- 1.配置数据库,dbcp数据库连接池-->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${driverClass}"/>
<property name="url" value="${url}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
<!-- 最大连接 -->
<property name="maxActive" value="${maxActive}"/>
<!--最大空闲数 -->
<property name="maxIdle" value="${maxIdle}"/>
</bean>
<!--2.配置会话工厂-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<!--mybatis配置文件的路径-->
<property name="configLocation" value="classpath:SqlMapConfig.xml"/>
</bean>
<!--3.配置dao-->
<bean id="userDao" class="com.zxh.backoffice.dao.impl.UserDaoImpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
</beans>
测试:
package com.zxh.backoffice.demo01;
import com.zxh.backoffice.dao.UserDao;
import com.zxh.backoffice.model.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Demo01 {
@Test
public void test1(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = (UserDao) context.getBean("userDao");
User user = userDao.findUserById(1);
System.out.println(user);
}
}
mapper包下同名接口文件和.xml文件整合配置的方式如下:
1.在上述整合的基础下,新建mapper包,并将UserDao接口复制并改名为UserMapper接口放到mapper包下,将User.xml文件复制并改名为UserMapper.xml使之与接口名相同放到mapper包下。
2.修改SqlMapConfig.xml文件中的配置,
首先修改别名的配置,追加上mapper包下的别名配置
<!--配置别名-->
<typeAliases>
<!--<typeAlias type="com.zxh.model.User" alias="user"></typeAlias>-->
<!--指定报名,别名就是类名,第一个小写-->
<package name="com.zxh.backoffice.model"></package>
<package name="com.zxh.backoffice.mapper"></package>
</typeAliases>
然后映射配置,通过包扫描法,扫描mapper包下与接口同名的xml文件
<mappers>
<!--第一种:写映射文件名,相对路径-->
<!--<mapper resource="com/zxh/sqlmap/User.xml"/>-->
<!--<mapper resource="com/zxh/mapper/UserMapper.xml"/>-->
<mapper resource="com/zxh/backoffice/sqlmap/User.xml"></mapper>
<!--第二种:写类名-->
<!--<mapper class="com.zxh.mapper.UserMapper"/>-->
<!--第三种:包配置 只适用于mapper代理
加载映射接口和配置文件
-->
<package name="com.zxh.backoffice.mapper"></package>
</mappers>
3.打开UserMapper.xml,修改命名空间
4.打开Spring的配置文件applicationContext.xml
这里不再使用传统的配置dao的方式,而使用由Spring创建UserMapper对象的方式
此方式中 3.传统配置dao的方式 可直接删去
<!--3.传统配置dao 现在不用-->
<bean id="userDao" class="com.zxh.backoffice.dao.impl.UserDaoImpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
<!--4.由Spring创建一个UserMapper的bean对象,使用工厂来创建-->
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
<property name="mapperInterface" value="com.zxh.backoffice.mapper.UserMapper"/>
</bean>
测试
如果是要批量创建mapper的bean对象(常用此方式),则将4.由Spring创建一个UserMapper的bean对象,使用工厂来创建的方式替换为
<!--5.批量创建mapper的bean对象
内部会扫描指定包下的mapper,创建代理对象,名字就是类名,头字母改小写
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.zxh.backoffice.mapper"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
@Test
public void test2(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserMapper userMapper = (UserMapper) context.getBean("userMapper");
User user = userMapper.findUserById(1);
System.out.println(user);
}