Spring集成MyBatis方式一
-
导包 spring-webmvc mybatis-spring dbcp ojdbc spring-jdbc
-
配置MyBatis: conf/spring-mybatis.xml
不再需要mybatis配置文件,在spring配置文件中添加SqlSessionfactoryBean来代替<!-- 配置 spring-mybatis.xml --> <!-- 读取配置文件 --> <util:properties id="jdbc" location="classpath:conf/jdbc.properties"/> <!-- 配置数据库连接池 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="#{jdbc.driver}"/> <property name="url" value="#{jdbc.url}"/> <property name="username" value="#{jdbc.user}"/> <property name="password" value="#{jdbc.password}"/> <property name="maxActive" value="#{jdbc.maxActive}"></property> </bean> <!-- 配置MyBatis的 SessionFactory --> <!-- 不再需要mybatis配置文件,在spring配置文件中添加SqlSessionfactoryBean来代替--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 注入连接池 --> <property name="dataSource" ref="dataSource"/> <!-- 注入映射文件的位置 --> <property name="mapperLocations" value="classpath:mapper/*.xml"/> </bean> <!-- Mapper接口组件扫描 --> <!-- 该bean会扫描指定包及其子包下所有的Mapper映射器(即接口),然后调用getMapper方法获得映射器的实现,并将这些对象添加到Spring容器里面(默认的id是首字母小写后的接口名,可以使用@Respository重命名)--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!--注入Mapper映射器所在的包名--> <property name="basePackage" value="org.chentging.note.dao"/> </bean>
-
实体类
实体类的属性名和表的字段名要一样,若不一样,在映射文件中配置ResultMap,大小写可忽略
-
配置Mapper映射文件:mapper/UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"> <mapper namespace="cn.tedu.note.dao.UserDao"> <select id="findUserByName" parameterType="string" resultType="cn.tedu.note.entity.User"> select cn_user_id as id, cn_user_name as name, cn_user_password as password, cn_user_token as token, cn_user_nick as nick from cn_user where cn_user_name = #{name} </select> </mapper>
-
Mapper映射器:符合映射文件要求的接口(如果符合,MyBatis会生成接口实现类对象)
a. 映射文件的namespace要与接口的完整名字(带包名)一致 b. 方法名与sql的id一致 c. 方法的参数类型与parameterType一致 d. 方法的返回值与resultType一致
使用:使用SqlSession获取MyBatis自动生成的映射器对象 session.getMapper(映射器类名.class);
关键代码: String config = "SqlMapConfig.xml"; //创建SqlSessionFactoryBuilder对象 SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder(); //创建SqlSessionFactory对象 SqlSessionFactory ssf = ssfb.build(TestCase.class.getClassLoader().getResourceAsStream(config)); //获取SqlSession对象 SqlSession session = ssf.openSession(); //调用SqlSession对象提供的方法访问数据库 Employee e = new Employee(); e.setName("king"); e.setAge(33); session.insert("test.save", e); //添加,修改,删除都需要提交事务 session.commit(); //关闭SqlSession session.close();
-
补充:只扫描带有特定注解的接口
1:开发一个空白注解 2:将注解添加到需要扫描的接口之上 3:修改MapperScannerConfiurer配置 <property name="annotationClass" value="完整包名.注解"/>
Spring集成MyBatis方式二(基本不用)
1234步骤一样
5:写DAO接口 接口方法没有特定要求
6:写一个DAO接口的实现类,注入sqlSessionTemplate
<!-- 配置SqlSessionTemplate -->
<bean id="sst" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="ssfb"/>
</bean>
不用考虑提交事务和关闭sqlSession
sst.insert("映射文件命名空间.save", e);
注意没有map映射器,所以需要组件扫描