1.mybatis和spring整合的思路:
1.让Spring管理sqlSessionFactory>。
2.让Spring管理mapper代理对象。
使用spring和mybatis整合开发mapper和原始dao接口。
让spring自动开启事物和关闭事物。
3.让spring管理数据源。
2.整合的框架:
2.jar包
1.spring的jar包
2.mybatis的jar包和数据库驱动包
3.配置文件
1.spring的配置文件
spring配置文件的作用,主要是将配置的bean对象加载到spring容器中。
applicationcontext.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 加载bean对象的头文件 -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- 让数据源注入到spring框架中去 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/myproject1"></property>
<property name="username" value="root"></property>
<property name="password" value="123"></property>
</bean>
<!-- 让jdbcTemplate注入到spring框架在去 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 让sqlSessionFactory工厂类注入到spring框架在去 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<!--这句话主要是加载mybatis的配置文件,name的名称是固定的,
而value就是mybatis的配置文件名称,注意路径一定要正确,检验正确的方式,Ctrl+鼠标左键 会有下划线。-->
<property name="configLocation" value="sqlMapconfig.xml"></property>
</bean>
<!-- 将MyProjectMapper注入到spring容器中 -->
<bean id="MyProjectMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.zhangyike.dao.MyProjectMapper"/>
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
</beans>
2.mybatis的配置文件
mybatis有两个配置文件。
1.mapper.xml,主要用来写sql语句,这个文件可以有多个,dao层的接口与他对应。
2.SqlMapperConfig.xml在整合后只用来加载mapper.xml配置文件。
SqlMapperConfig.xml:
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<mappers>
<!-- 有多少个mapper.xml就配多少条mapper!-->
<mapper resource="myprojectMapper.xml"/>
</mappers>
</configuration>
myprojectMapper.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">
<!-- namespace命名空间,为了对sql语句进行隔离,方便管理 ,mapper开发dao方式.
这个namespace的值就是这个mapper对应的dao层接口的路径! -->
<mapper namespace="com.zhangyike.dao.MyProjectMapper">
<!-- 根据id查询用户信息 -->
<!--
id:唯一标识 一个statement
#{}:表示 一个占位符,如果#{}中传入简单类型的参数,#{}中的名称随意
parameterType:输入 参数的类型,通过#{}接收parameterType输入 的参数
resultType:输出结果 类型,不管返回是多条还是单条,指定单条记录映射的pojo类型
-->
<!-- <select id="findUserById" parameterType="int" resultType="cn.itcast.mybatis.po.User">
SELECT * FROM USER WHERE id= #{id}
</select> -->
<!-- 根据用户名查询该用户是否注册过 -->
<select id="select_username" parameterType="String" resultType="Integer">
select count(1) from register where username= #{username}
</select>
</mapper>
4.java代码
1.dao层的mapper接口
public interface MyProjectMapper {
public int select_username(String name);
}
2.测试类
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.zhangyike.dao.MyProjectMapper;
public class Test1 {
public static void main(String[] args) {
// 加载配置文件
ApplicationContext application = new ClassPathXmlApplicationContext("applicationcontext.xml");
//得到mapper类对象
MyProjectMapper mapper = (MyProjectMapper) application.getBean("MyProjectMapper");
//调用mapper的方法。
System.out.println(mapper.select_username("1"));
}
}
5.总结
1.spring、mybatis两个框架结合搭建,主要用spring的IOC和DI容器和mybatis框架操作数据库。
2.对于初学者而言,完整搭建这个框架是不容易的,即使框架搭建出来了,也可能是一头雾水,我将我能想到的
可能出现的问题罗列。
2.1检查jar包,整合新添了mybatis-spring-1.2.2.jar、spring-tx-3.2.0.RELEASE.jar这两个jar包,检查是否导入。
对于jar包问题,使用eclipse时,在项目上有的,就是jar包的问题。
2.2配置文件的路径是否正确,都是新建的source folder文件夹下,而不是普通的文件夹。
2.3applicationcontext.xml中sqlSessionFactory的bean中有一个属性名称固定为configLocation,
值为sqlmapperconfig.xml的路径,这个路径用ctrl+鼠标能够找到。
2.4要把mapper接口配置在applicationcontext.xml中。
2.5 myprojectMapper.xml文件中的namepace是这个mapper.xml对应的mapper接口类,
这个接口类中的方法名是mapper.xml中的bean的id。
2.6SqlMapperConfig.xml主要用来加载mapper文件,这个路径要写正确!
3.加载错误,千万不能心急,一定要沉下心看看错误信息,这是一条最快的方案,提示的很直接,刚开始或许
很郁闷看不懂,看几次就懂了,对解决问题帮助很大。
4.或许第一次是一头雾水,但是搞清楚每个配置文件的作用,及里面配置的作用,就会有豁然开朗的感觉。