在myBatis与Spring整合之前,使用myBatis:
1)手动加载MyBatis的核心配置文件,在核心配置文件中使用映射器加载Sql映射文件
2)需要手动创建SqlSessionFactory
3)手动创建SqlSession对象,或者获取动态代理对象进行操作。
myBatis与Spring整合,要考虑哪些问题?
1)SqlSessionFactory对象应该放到Spring容器中,以单例的形式存在,由Spring帮助我们创建对象,然后通过set注入对属性进行赋值。
2)数据库连接、数据库连接池以及事务,都应该交给Spring容器来进行管理。
3)Mapper代理形式中,应该从Spring容器中,直接获取mapper的动态代理对象(接口的实现类)。
//传统的dao开发宗,应该从Spring容器中获得SqlSession对象。
整合需要的jar包:
Spring的jar包; Mybatis的jar包; Mysql的数据库驱动jar包;数据库连接池的jar包;Spring+mybatis的整合包(整合包里面有很多可以直接拿来用的类)。
1) Spring整合Mybatis之原始Dao开发
2) Spring整合Mybatis之Mapper动态代理开发
3) Spring整合Mybatis之Mapper动态代理扫描开发(核心)
配置文件
1.spring的配置文件
2.mybatisS的配置文件sqlmapConfig.xml
applicationContext.xml
对于spring来说,mybatis是另外一个架构,需要整合jar包。SqlSessionFactoryBean属于mybatis-spring这个jar包.
代码规范:在src下创建一个config文件夹,专门用于放配置文件。
SqlSessionFactoryBean对象的两个属性:注入数据源和注入核心配置文件
MapperScannerConfigurer:扫描要指定基本包以及子包,基本包里面是所有的mapping接口文件
修改SqlMapConfig.xml配置文件。Mapper映射器只保留包扫描的方式。
pojo:简单java对象。
myBatis:核心配置文件和SQL映射文件
输入映射和输出映射:输入参数映射,返回值映射(自动映射和手动映射)
动态Sql:if标签 where标签 sql片段 Foreach标签
关联查询:一对一关联 一对多关联
实体模型之间的继承关系
Spring配置文件:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://192.168.1.227:3306/***?characterEncoding=utf-8
jdbc.username=root
jdbc.password=mysql123
测试代码:
package com.spring.cn.junit;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.spring.cn.dao.UserDaoImpl;
import com.spring.cn.entity.User;
import com.spring.cn.mapper.UserMapper;
public class TestDao {
/**
* 传统dao开发,插入用户
*/
@Test
public void testInsertUser() {
//加载Spring配置文件
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
//让Spring容器为我们创建对象
UserDaoImpl userDaoImpl = (UserDaoImpl) ac.getBean("userDao");
//调用对象中的方法
userDaoImpl.insertUser();
}
/**
* mapper动态接口开发
*/
@Test
public void testFindUserById(){
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
UserMapper userMapper = (UserMapper) ac.getBean("userMapper");
User user = userMapper.findUserById(4);
System.out.println(user.toString());
}
/*
* 工作中最常用的开发:mapper动态接口扫描开发
*/
@Test
public void testScannerMapper(){
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
UserMapper userMapper = ac.getBean(UserMapper.class);
User user = userMapper.findUserById(4);
System.out.println(user.toString());
}
}
package com.spring.cn.dao;
import org.apache.ibatis.session.SqlSession;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import com.spring.cn.entity.User;
public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {
// extends SqlSessionDaoSupport 主要是为了获取SqlSession对象
public void insertUser() {
SqlSession sqlSession = this.getSqlSession();
User user = new User();
user.setAge(100);
user.setName("天涯海角!");
sqlSession.insert("insertNewUser", user);
}
}
insert into user(age,name) values(#{age},#{name});