今天我们的目标是实现mybatis和spring的整合使用.在学习中我们了解到myBatis框架是针对数据库进行的操作是持久性框架,而spring框架的核心是IOC,那么我怎样结合到之前我们做的实例多对一,这个实例中我们用了myBatis框架就可以在这个基础上改。spring框架用得最多的是IOC那什可以把对象交给容器了,就有接口和主配置中的基础环境配置。
实现mybatis和spring整合的步骤:
注意:要导myBatis与spring整合jar包:
步骤一、创建2张表,用于测试说明,分别是user和Groups。User表有id,name,phone三个字段。Groups表有g_id,group两个字段.
步骤二、创建上述2张表所对应的实体类。(提示:order实体类需要一个User实体类类型的属性)
public class User {
private int id;
private String name;
private int phone;
private List<Group> group;
}
public class Group {
private int pid;
private String group;
private User user;
}
步骤三、创建实体类映射文件.里面写的sql语句是两张表的联合查询语句.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "mybatis-mapper" "mybatis-3-mapper.dtd" >
<mapper namespace="com.zy.san.dao.IUser">
<resultMap type="Group" id="myMapp">
<result property="pid" column="p_id"/>
<result property="group" column="group"/>
<association property="user" column="id" javaType="User">
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="phone" column="phone"/>
</association>
</resultMap>
<select id="getid" parameterType="int" resultMap="myMapp">
select `user2`.*,`groups`.* from user2,groups where user2.id=groups.g_id and groups.g_id=#{id}
</select>
</mapper>
步骤四、创建mybatis的主配置文件(提示:因为我们要用spring整合,所以该配置文件里面的第二部分,也就是基础环境配置的部分交给了spring来管理,所以在spring配置文件中写,就不写在mybatis主配置文件里面了。)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "mybatis-config" "mybatis-3-config.dtd" >
<configuration>
<typeAliases>
<typeAlias type="com.zy.san.Bean.Group" alias="Group"/>
<typeAlias type="com.zy.san.Bean.User" alias="User"/>
</typeAliases>
<!--这里原来的基本数据类型,现在写到spring主配置文件中-->
<mappers>
<mapper resource="com/zy/san/dao/mapperGroup.xml"/>
</mappers>
</configuration>
步骤五、编写好mybatis层需要用的接口,并在接口中定义好相应的方法
package com.zy.san.dao;
import java.util.List;
import com.zy.san.Bean.Group;
public interface IUser {
public List<Group> getid(int id);
}
步骤六、编写好spring的主配置文件(原先我们只是配置几个bean,现在不行了,因为我们集成了mybatis,所以还要配置mybatis基础环境配置的部分,也就是加载驱动的路径啊,连接数据库的路径啊,用户名啊、密码啊、事务管理啊之类的)。然后还要配置接口层
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/lianxi"></property>
<property name="username" value="root"></property>
<property name="password" value="密码"></property>
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--dataSource属性指定要用到的连接池-->
<property name="dataSource" ref="dataSource"></property>
<!--configLocation属性指定mybatis的核心配置文件-->
<property name="configLocation" value="gonfig.xml"></property>
</bean>
<bean id="MapperFactory" class="org.mybatis.spring.mapper.MapperFactoryBean">
<!--sqlSessionFactory属性指定要用到的SqlSessionFactory实例-->
<property name="sqlSessionFactory" ref="sqlSession" ></property>
<!--mapperInterface属性指定映射器接口,用于实现此接口并生成映射器对象-->
<property name="mapperInterface" value="com.zy.san.dao.IUser"></property>
</bean>
步骤七、编写测试类(首先读取srping主配置文件获得一个spring容器对象,通过spring容器对象调用getbean方法得到bean对象,通过bean对象调用其方法完成调用数据层的操作。)
public class Test {
public static void main(String[] args) {
ApplicationContext ac= new ClassPathXmlApplicationContext("spring.xml");
IUser iu= (IUser) ac.getBean("MapperFactory");
List<Group> g=iu.getid(1);
for(Group ser:g){
System.out.println(ser.getGroup());
User u=ser.getUser();
System.out.println(u.getId());
}
}
}