Spring-Mybatis整合中的一对多

一如Hibernate中的两个对象之间的关系在MyBatis中也关于两个对象之间的关联关系的描述!好了不多说,直接进入正题。

为了测试数据简单使用表的字段较少!

student:id,name,supervisor_id

teacher:id,name

项目结构截图

项目中引入包的截图

com,iss.model.Student

public class Student {
	private int id;
	private String name;

	private Teacher supervisor;

	public Teacher getSupervisor() {
		return supervisor;
	}

	public void setSupervisor(Teacher supervisor) {
		this.supervisor = supervisor;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}

com.iss.model.Teacher

package com.iss.model;

import java.util.ArrayList;
import java.util.List;

public class Teacher {
	private int id;
	private String name;
	// private Set<Student> students = new HashSet<Student>();
	private List<Student> students = new ArrayList<Student>();

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public List<Student> getStudents() {
		return students;
	}

	public void setStudents(List<Student> students) {
		this.students = students;
	}

	// public Set<Student> getStudents() {
	// return students;
	// }
	//
	// public void setStudents(Set<Student> students) {
	// this.students = students;
	// }

}

com.iss.dao.StudentMapper

package com.iss.dao;

import com.iss.model.Student;

public interface StudentMapper {
	public Student getById(int id);

	public void addStudent(Student student);

}

com.iss.dao.TeacherMapper

package com.iss.dao;

import com.iss.model.Teacher;

public interface TeacherMapper {
	public void addTeacher(Teacher teacher);

	public Teacher getById(int id);
}

com,iss,dao,StudentMapper.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">

<mapper namespace="com.iss.dao.StudentMapper">
	<!--查询数据 -->
	<select id="getById" parameterType="int" resultMap="studentResultMap">
		select s.name,t.name from student s,teacher t where
		s.supervisor_id=t.id
		and s.id=#{id}
		<!-- select name from student where id=#{id} -->
	</select>

	<!--学生实体映射 -->
	<resultMap type="Student" id="studentResultMap">
		<result property="id" column="id" />
		<result property="name" column="name" />

		<!-- <association property="supervisor" javaType="Teacher"> <result property="id"
			column="id" /> <result property="name" column="name" /> </association> -->

		<association property="supervisor"
			resultMap="com.iss.dao.TeacherMapper.supervisorResultMap"></association>

	</resultMap>
	<!--插入数据 -->
	<insert id="addStudent" useGeneratedKeys="true" parameterType="User"
		keyProperty="id">
		insert into student
		values(#{id},#{name},#{supervisor.id})
	</insert>

</mapper>

com.iss.dao,TeacherMapper.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">

<mapper namespace="com.iss.dao.TeacherMapper">

	<!--增加老师 -->
	<insert id="addTeacher" useGeneratedKeys="true" parameterType="Teacher"
		keyProperty="id">
		insert into teacher values(#{id},#{name});
	</insert>

	<!--查询老师 -->
	<select id="getById" parameterType="int" resultMap="supervisorResultMap">
		select t.id
		t_id,
		t.name t_name,s.name from student s,teacher t where
		s.supervisor_id=t.id and
		t.id=#{id}
	</select>

	<!-- 教师实体映射 -->
	<resultMap type="Teacher" id="supervisorResultMap">
		<result property="id" column="t_id" />
		<result property="name" column="t_name" />
		<collection property="students"
			resultMap="com.iss.dao.StudentMapper.studentResultMap"></collection>
	</resultMap>

</mapper>

把映射接口和映射的配置文件放在同一目录的好处是不需要在核心配置文件Mybatis中使用mappers指定映射配置文件了。

下面看一下Spring和Mybatis整合的配置文件

mybatis-config,xml

<?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>
	<!-- 把数据源交给Spring管理 -->
<!-- 	<mappers>
		<mapper resource="com/iss/dao/UserMapper.xml" />
	</mappers> -->
</configuration>

ApplicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop" 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
	http://www.springframework.org/schema/tx
	http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
	http://www.springframework.org/schema/aop
	http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

	<!-- 配置数据源 -->
	<bean id="jdbcDataSource"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName">
			<value>org.gjt.mm.mysql.Driver</value>
		</property>
		<property name="url">
			<value>jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
			</value>
		</property>
		<property name="username">
			<value>root</value>
		</property>
		<property name="password">
			<value>root</value>
		</property>
	</bean>

	<!--配置SqlSessionFactory -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="jdbcDataSource" />
		<property name="typeAliasesPackage" value="com.iss.model"></property>
		<!-- <property name="configLocation" value="classpath:mybatis-config.xml"></property> -->
	</bean>
	<!-- <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
		<property name="mapperInterface" value="com.iss.dao.UserMapper"></property>
		<property name="sqlSessionFactory" ref="sqlSessionFactory"></property> </bean> -->
	<!-- MappperScannerConfigure:扫描特定的包自动创建成批地映射器。 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.iss.dao"></property>

	</bean>

	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="jdbcDataSource" />
	</bean>

	<!--配置事务处理策略,transaction-manager属性指定事务管理器。 若事务管理器bean的id即为transactionManager,则
		transaction-manager的属性可以不指定 -->
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<!--所有以find开头的方法都是只读的 -->
			<tx:method name="get*" read-only="true" />
			<tx:method name="add*" />
			<!--其他方法使用默认事务策略 -->
			<tx:method name="*" />
		</tx:attributes>
	</tx:advice>
	<!-- AOP配置 -->
	<aop:config>
		<!--pointcut元素定义一个切入点,execution中的第一个星号 用以匹配方法的返回类型,这里星号表明匹配所有返回类型。 com.abc.dao.*.*(..)表明匹配com.abc.dao包下的所有类的所有
			方法 -->
		<aop:pointcut id="myPointcut" expression="execution(* com.iss.dao.*.*(..))" />
		<!--将定义好的事务处理策略应用到上述的切入点 -->
		<aop:advisor advice-ref="txAdvice" pointcut-ref="myPointcut" />
	</aop:config>

</beans>

最后看com.iss.test.Test对表中数据进行测试

package com.iss.test;

import java.util.List;
import java.util.Set;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.iss.dao.StudentMapper;
import com.iss.dao.TeacherMapper;
import com.iss.dao.UserMapper;
import com.iss.model.Student;
import com.iss.model.Teacher;
import com.iss.model.User;

public class Test {
	public static void main(String[] args) {
		ApplicationContext ctx = null;
		ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

		StudentMapper studentMapper = (StudentMapper) ctx
				.getBean("studentMapper");

		TeacherMapper teacherMapper = (TeacherMapper) ctx
				.getBean("teacherMapper");

		Teacher teacher = teacherMapper.getById(1);
		List<Student> students = teacher.getStudents();
		System.out.println(students.size());
		for (Student stu : students) {
			System.out.println(stu.getSupervisor().getName());

		}

	}

}

好了!这个简单的双向一对多就完成了!

时间: 2024-08-15 07:35:49

Spring-Mybatis整合中的一对多的相关文章

SSM(springmvc+spring+mybatis)整合过程

问题?SSM(springmvc+spring+mybatis)整合过程 一.SSM框架比较S2SH框架的优缺点比较 站在个人使用这两个框架的观点儿上来说的话,我觉得这个不能定死的说,常用的S2SH,SpringMVC等,还可以考虑jFinal. 首先说S2SH,这个是用的比较多的,特别是在中小型项目中,针对大型项目就不行了,是Struts和hibernate过于庞大,过于重量级,项目大了之后配置文件多的也是麻烦事,配置文件多了之后一方面不好操作,另外比较蛋疼的是没法断点调试,特别是对底层数据库

springmvc+spring+mybatis 整合

1.其实我也是菜鸟一枚,以前ssm不会,所以花了一段时间,学习了mybatis spring又进行了整合,后来又学习springmvc算是都看了看,今天就把整个搭建好的框架整理一下,和大家分享,如果错误希望指正…… 2.整个项目的目录结构: 3.有了整体结构之后我们一步一步整合来实现,整合步骤: (1).配置前端控制器,web.xml配置 (2).创建处理映射器 springmvc-server.xml 配置 (3).创建控制层 (4).业务逻辑层 (5).dao层 (6).sqlmapper

spring+mybatis整合,org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class &#39;${jdbc.driverClassName}

在使用spring+mybatis时会出现Cannot load JDBC driver class ${jdbc.driverClassName}之类的出错. 原因是在spring里使用org.mybatis.spring.mapper.MapperScannerConfigurer 进行自动扫描的时候,设置了sqlSessionFactory 的话,可能会导致PropertyPlaceholderConfigurer失效,也就是用${jdbc.username}这样之类的表达式,将无法获取到

SpringMVC+Spring+Mybatis整合,使用druid连接池,声明式事务,maven配置

一直对springmvc和mybatis挺怀念的,最近想自己再搭建下框架,然后写点什么. 暂时没有整合缓存,druid也没有做ip地址的过滤.Spring的AOP简单配置了下,也还没具体弄,不知道能不能用,log也不知道能不能用,`(*∩_∩*)′哈哈,有点不负责任...... 直接上代码: 使用的eclipse和eclipse自带的maven,参考了网上的资料,有些代码是拷贝的,不过都自己测试过了.嗯,可以跑起来... 先上项目结构: 新建maven项目,选择web,然后配置pom: <pro

spring mybatis整合配置文件

spring mybatis整合所需要的配置文件和jar包

ztree使用系列三(ztree与springmvc+spring+mybatis整合实现增删改查)

在springmvc+spring+mybatis里整合ztree实现增删改查,上一篇已经写了demo,下面就只贴出各层实现功能的代码: Jsp页面实现功能的js代码如下: <script> //用于捕获分类编辑按钮的 click 事件,并且根据返回值确定是否允许进入名称编辑状态 function beforeEditName(treeId, treeNode) { var zTree = $.fn.zTree.getZTreeObj("treeDemo"); zTree.

SSM 即所谓的 Spring MVC + Spring + MyBatis 整合开发。

SSM 即所谓的 Spring MVC + Spring + MyBatis 整合开发.是目前企业开发比较流行的架构.代替了之前的SSH(Struts + Spring + Hibernate) 计划的架构组合 Sping MVC + Spring + MyBatis(非Ajax版) Sping MVC + Spring + MyBatis(Ajax版) Sping MVC + Spring + MyBatis(Ajax版 + JavaConfig) Spring Boot + MyBatis

Spring+MyBatis整合

1.创建一个web工程.工程名为ssm 2.导入Spring,MyBatis,Oracle和MySQL以及MyBatis提供的与Spring整合的插件包 mysql的jar文件:mysql-connector-java-5.1.7-bin.jar oracle的jar文件:ojdbc5.jar c3p0的jar文件:c3p0-0.9.1.2.jar mybatis的jar文件: asm-3.3.1.jar cglib-2.2.2.jar commons-logging-1.1.1.jar log

springmvc+spring+mybatis整合实例【转】

开发环境: System:Windows server 2003 WebBrowser:IE6+.Firefox3+ JavaEE Server:tomcat5. IDE:eclipse.MyEclipse 6.5 Database:MySQL 开发依赖库: JavaEE5.Spring 3.0.5.Mybatis 3.0.2.myBatis-spring-1.0.0-rc2 1. 首先新建一个WebProject 命名为ssi,新建项目时,使用JavaEE5的lib库.然后手动添加需要的jar