Spring 与其他框架整合到一起,Spring永远是老大,由Spring整合其他框架
目录
前言
一、引入相关jar依赖包
1.mybatis简单的回顾
2.spring 整合 mybatis 的原理
二、使用步骤
0. 加载 db.properties
1.在SpringIoc容器中 加载 JDBC 信息
2.在SpringIoc容器中 产生mybatis的核心类 SqlSessionFactory
3.2.在SpringIoc容器中注入 service & DAO
三、补充
Spring 整合 mybatis 测试源码
Mybatis通过使用SqlSessionFactory对象实现数据库的CRUD, Spring要想实现对 Mybatis 的整合,就需要管理该对象 。直接创建Java项目即可进行测试练习,要实现二者整合,需要许多jar包
处理mybatis 需要将 类-表 实现映射,之后 配置config.xml文件,其中的数据库信息和加载映射文件的信息,现将二者清除,相当于新建了一个空的配置文件 。 将mapper文件实现类-表映射;
新建spring的applicationContext.xml配置文件,由于mybatis是通过从config.xml文件产生的对象为 SqlSessionFactory,因此要实现spring整合mybatis,要将数据库配置信息从config.xml文件转移到spring的配置文件 applicationContext.xml 中 在该 spring 的I OC 容器中通过使用bean标签配置实现自动创建mybatis的核心类 SqlSessionFactory,在其中实现将config文件加载和DataSource(数据源)配置。
最后spring产生Mapper对象,实现完全整合控制mybatis(三种方法)。
spring基础包 + spring扩展包 + mybatis包 + mybatis-spring.jar包 + 其他(commons-*.jar)
spring-core.jar spring-bean.jar spring-aop.jar spring-expression.jar spring-context.jar spring-context-support.jar spring-tx.jar spring-jdbc.jar spring-web.jar(非web项目可不用) mybatis.jar log4j.jar commons-dbcp.jar commons-pool.jar mysql-connector-java-5.1.36-bin.jar mybatis-spring-1.3.2.jar(mvn下载)
引入相关的jar包后,开始进行spring与mybatis的整合,不论spring与任何框架整合,spring永远都是 “老大” ,都是spring整合别人。
首先回顾一下mybatis的基础知识。mybatis是一款用以快速实现Java操作数据库实现对数据库中数据的CRUD ,通过使用xml文件(config.xml文件)配置JDBC信息,实现Java连接数据库的封装。conf.xml ->SqlSessionFacotry
通过使用 mapper.xml 文件与Java对象,将CRUD的方式 通过使用 接口方法+mapper.xml 文件 的形式将相关的SQL语句进行执行。通过mapper.xml将 类、表建立映射关系。 最后,mybatis 可以在加载完config文件后创建工厂,实现对象的方法调用
// 分别使用普通方式与 反向代理 方式 实现Java操作数据库实现 CRUD
package priv.practice.orm;
import java.io.IOException;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import priv.practie.mapper.*;
public class ProxyApply {
public static void query() throws IOException {
String source = "mybatis-config.xml";
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build
(Resources.getResourceAsReader(source) );
SqlSession session=factory.openSession();
String querySql ="priv.practie.mapper.UserMapper.selectById";
User user=(User) session.selectOne(querySql, 5);
user.toString();
}
public static void queryProxy(int id) throws IOException {
SqlSessionFactoryUtils utils = new SqlSessionFactoryUtils();
SqlSessionFactory factory = utils.getInstance();
SqlSession session=factory.openSession();
UserMapper userMapper = session.getMapper(UserMapper.class);
User user= userMapper.selectById(id);
user.toString();
session.close();
}
// add user addUser(user) name + pwd
public static void addUser(User user) throws IOException {
SqlSessionFactory utils = new SqlSessionFactoryUtils().getInstance();
SqlSession session = utils.openSession();
UserMapper adduser = session.getMapper(UserMapper.class);
adduser.addUser(user);
session.commit();
session.close();
}
//delete User
public static void deleteUser(String name) throws IOException {
SqlSessionFactory factory = new SqlSessionFactoryUtils().getInstance();
SqlSession session = factory.openSession();
UserMapper dUser = session.getMapper(UserMapper.class);
dUser.deleteUser(name);
session.commit();
session.close();
}
// selectAllUsers
public static List getAllUsers() throws IOException {
SqlSessionFactory factory = new SqlSessionFactoryUtils().getInstance();
SqlSession session = factory.openSession();
UserMapper allUsers =session.getMapper(UserMapper.class) ;
List users =allUsers.selectAllUsers();
System.out.println(users);
session.close();
return users;
}
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
// query() ;
// queryProxy(1) ;
// User adduser = new User("ET","aliens");//"me","ffff"
// addUser(adduser);
// queryProxy(12) ;
//
//delete User
// deleteUser("me");
getAllUsers();
}
}
config.xml 存储2大类信息 数据库配置信息(JDBC) & 映射文件(mapper.xml)信息。 1.产生 SqlSessionFactory 所需要的数据库信息 在spring的配置文件(applicationContext.xml)以bean的形式配置。
首先要将原mybatis中config.xml文件的JDBC信息加载到spring的配置文件(applicationContext)中,再 产生 mybatis的核心类 SqlSessionFactory factory 后进行相关操作。
classpath:db.properties
生成 SqlSessionFactory 后产生 mybatis的动态代理对象 Mapper 有3种方法
在src目录下新建 db.properties文件,位置与相关文件结构 如图
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/person
username=root
password=root
在mybatis的conf.xml中 主要就是JDBC的配置信息和加载mapper.xml的文件信息。先把JDBC的信息加载到applicationContext.xml文件中。(db.properties也通过bean的形式加载)
classpath:db.properties
要想产生 SqlSessionFactory ,新建bean id为SqlSessionFactory,class固定值为 SqlSessionFactoryBean ,其中两个属性 1.dataSource(引用之前的JDBC信息) & 2.configLocation(加载conf文件,之后可以将mapper信息加载进来后省略)。
代码如下(示例):
该处使用的configLocation可以在后期省略,使用其他方式直接将 mybatis的conf.xml中的mapper信息:
开始测试,main 代码如下:
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService service =(UserService)applicationContext.getBean( "userServiceId");
User user = new User("zds16","016");
service.addService(user);
dao层除了要实现其接口,还有继承某个特定的类 SqlSessionDaoSupport,代码如下:
public class UserDaoImpl extends SqlSessionDaoSupport implements UserMapper {
//extends SqlSessionDaoSupport 获取sqlsession
@Override
public void addUser(User user) {
// TODO Auto-generated method stub
SqlSession sqlSession = super.getSqlSession() ;
UserMapper userDao =sqlSession.getMapper(priv.sm.mapper.UserMapper.class);
userDao.addUser(user);
}
效果图:
另外,可以将mybatis的配置文件省略,直接在IOC中加载mapper信息,配置如下
不在使用mybatis的config.xml文件,直接在产生 SqlSessionFactory 时加载,“*”表示可以加载多个mapper文件。
除了上述通过使用dao层的具体实现类实现了整合,可以省略掉DAO层的实现类注入到IOC,可以将IOC容器中的直接使用 class="org.mybatis.spring.mapper.MapperFactoryBean" 自动生成dao层的bean,对应类的接口可以 使用 mapperInterface 属性名配置。其他代码不变。配置信息如下:
第三种方法:
使用包扫描一次可以加载多个mapper。配置信息基本如下图:
注意要产生sqlSessionFactory,在第三种的配置中有差异,name 应该修改为 sqlSessionFactoryBeanName ,ref修改为value 。 将service的bean中引用的userID更改为借口名(首字母小写),上方的bean不写id,直接只写class配置。属性中的包名有多个,通过使用逗号分隔。
value="SqlSessionFactory">
class = "priv.apply.service.UserService">
最终版的applicationContext.xml文件如下:
classpath:db.properties