新人笔记,大佬勿喷
整合思路
整合过程
1. 导包
Spring的包
mybatis包
再导入一个结合的包
2. 搭建项目结构
3. 整合mybatis 原始整合
mapper 整合
不管那种方式 都依赖于sqlSessionFactory 它需要依赖于mybatis核心配置文件中的信息。这三个分成三层:
1. 别名等属性设置
2. 数据库连接信息
3. 读取映射文件
其中的第二层可以使用连接池来取代
实际上 sqlSessionFactory 需要依赖于两个一个是dataSource还有一个是 核心配置文件
详细步骤:
先书写spring核心配置文件,得到c3p0数据库连接池 填写配置信息根据扫描文件。在获得sqlsessionfactory工厂 得到这个工厂对象 配置数据库连接池 然后配置引入 mybatis的核心配置文件 (这个核心配置文件中有要扫描的包 即输出映射 和映射的配置文件(文件中要书写sql语句和调用路径和方法名)。) 配置dao的配置信息 由于dao实现接口类中继承了SqlSessionDaoSupport 因为它需要sqlSessionFactory 来得到sqlSession 所以需要配置引用sqlsessionfactory工厂 在测试类中开启单元测试并引入接口dao 并调用它的实现的接口类中的方法即可。接受返回值。
spring 的核心配置文件
<?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" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!--扫描配置文件--> <context:property-placeholder location="classpath:db.properties"></context:property-placeholder> <!--c3p0数据库连接池--> <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driver}"></property> <property name="jdbcUrl" value="${jdbc.url}"></property> <property name="user" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </bean> <!--获得sqlSessionFactory工厂 得到sqlSessionFactory --> <bean name="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <property name="configLocation" value="classpath:resources/mybatis/sqlMapConfig.xml"></property> </bean> <bean name="userDao" class="cn.hd.dao.impl.UserDaoImpl"> <property name="sqlSessionFactory" ref="sqlSessionFactory"></property> </bean> <!--第一种--> <!--<bean name="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">--> <!--<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>--> <!--<property name="mapperInterface" value="cn.hd.mapper.UserMapper"></property>--> <!--</bean>--> <!--第二种--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="cn.hd.mapper"></property> </bean> </beans>
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><!--配置--> <typeAliases> <package name="cn.hd.entity"></package> </typeAliases> <mappers> <mapper resource="cn/hd/mapper/UserMapper.xml"></mapper> </mappers> </configuration>
mybatis的映射配置文件
<?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="test"> <select id="findUserById" parameterType="int" resultType="user"> SELECT * FROM t_user WHERE id= #{id} </select> </mapper>
测试用到的接口Dao
public interface UserDao {
User findUserById(Integer id);
}
实现Dao接口
public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao { @Override public User findUserById(Integer id) { User user = getSqlSession().selectOne("test.findUserById", id); return user; } }
userMapper 接口 接口中的方法名需和mybatis的映射配置文件中sql语句的id相同 否则无法映射
public interface UserMapper {
User findUserById(Integer id);
}
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:resources/spring/applicationContext.xml") public class Demo { @Resource(name = "userDao") private UserDao userDao; @Test public void fun(){ User userById = userDao.findUserById(10); System.out.println(userById); }
Mapper开发
Spring配置bean -> mapperFactoryBean类(需要起名字)
依赖于两个 1 SQL Session Factory 和 接口的位置
<bean name="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
<property name="mapperInterface" value="cn.hd.mapper.UserMapper"></property>
</bean>
直接进入到测试
这种方式也需要写很多mapper mybatis提供了升级版
配置一个扫描类,自动扫描某个位置下所有的mapper 并起名为对应的小写
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cn.hd.entity"></property>
</bean>
有些东西没讲的太详细 因为我之前的文章都提到过 可以去看看。谢谢