框架篇(一):多对一,一对多

一、环境搭建

1.tomat:Apache Tomcat® - Welcome!

2.JDK:Java Downloads | Oracle

3.小皮(mysql):Windows版phpstudy下载 - 小皮面板(phpstudy) (xp.cn)

4.SQLyong:SQLyog - Download (softonic.com)

二、声明

多对一,一对多  的应用 

三、项目基础搭建及jar包导入

四、代码编写

1.dao层

ClassesMapper.java

package cn.lexed.dao;


import cn.lexed.pojo.Classes;
import cn.lexed.pojo.Student;

public interface ClassesMapper {

	//根据班级id查询对应的学生信息 以及班级信息
	public Classes getClasses(int cid);
}

StudentMapper.java

package cn.lexed.dao;

import cn.lexed.pojo.Student;

public interface StudentMapper {

	//根据学生id去查询对应的班级形象
	public Student getStu(int sid);
}

ClassesMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd" >
<mapper namespace="cn.lexed.dao.ClassesMapper">
	
	<select id="getClasses"  resultMap="getc" parameterType="int">
		select * from classes c,student s where s.c_id=c.c_id and c.c_id=#{c_id}
	</select>
	
	<resultMap type="Classes" id="getc">
		
		<id column="c_id" property="cid"/>
		<result column="c_name" property="cname"/>
		
		<collection property="students" ofType="Student">
			
			<id column="s_id" property="sid"/>
			<result column="s_name" property="sname"/>
			
		</collection>
	</resultMap>
	
</mapper>

StudentMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd" >
<mapper namespace="cn.lexed.dao.StudentMapper">

<select id="getStu" resultMap="getS" parameterType="int">
select * from student s,classes c where s.c_id=c.c_id and s.s_id=#{s_id}
</select>
<resultMap type="Student" id="getS">

<id column="s_id" property="sid"/>
<result column="s_name" property="sname"/>

<association property="classes" javaType="Classes">
<id column="c_id" property="cid"/>
<result column="c_name" property="cname"/>
</association>
</resultMap>
</mapper>

2.pojo

Classes

package cn.lexed.pojo;

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

//一对多  一个老师对应多个班级
//多对一 多个班级对应一个老师

public class Classes {

	    private int cid;
	    private String cname;
	    //一对多
	    private List<Student> students;
		
	    
	    
	    public Classes() {
			super();
		}
	    
	    
		public Classes(int cid, String cname, List<Student> students) {
			super();
			this.cid = cid;
			this.cname = cname;
			this.students = students;
		}


		public int getCid() {
			return cid;
		}
		public void setCid(int cid) {
			this.cid = cid;
		}
		public String getCname() {
			return cname;
		}
		public void setCname(String cname) {
			this.cname = cname;
		}
		/*public Teacher getTeacher() {
			return teacher;
		}
		public void setTeacher(Teacher teacher) {
			this.teacher = teacher;
		}
		@Override
		public String toString() {
			return "Classes [cid=" + cid + ", cname=" + cname + ", teacher=" + teacher + "]";
		}*/
		public List<Student> getStudents() {
			return students;
		}
		public void setStudents(List<Student> students) {
			this.students = students;
		}
		@Override
		public String toString() {
			return "Classes [cid=" + cid + ", cname=" + cname + ", students=" + students + "]";
		}
	    
	    
}

Student

package cn.lexed.pojo;

public class Student {

	    //这里我们以班级和学生为例,一个班级里面对应多个学生,这是一对多;
	    //反过来,多个学生对应一个班级,这是多对一
	    private int sid;
	    private String sname;
	    //多对一
	    private Classes classes;
	    
	    
		public Student() {
			super();
		}
		
		
		public Student(int sid, String sname, Classes classes) {
			super();
			this.sid = sid;
			this.sname = sname;
			this.classes = classes;
		}


		public int getSid() {
			return sid;
		}
		public void setSid(int sid) {
			this.sid = sid;
		}
		public String getSname() {
			return sname;
		}
		public void setSname(String sname) {
			this.sname = sname;
		}
		public Classes getClasses() {
			return classes;
		}
		public void setClasses(Classes classes) {
			this.classes = classes;
		}
		@Override
		public String toString() {
			return "Student [sid=" + sid + ", sname=" + sname + ", classes=" + classes + "]";
		}
	    
	    
	    
}

3.utils

MybatisUtils

package cn.lexed.utils;

import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;


public class MybatisUtils {
	
	      private static SqlSessionFactory factory;
	      
	      static{  //在静态代码块里,factory只会被创建一次
	    	  try{
	    		 InputStream is=Resources.getResourceAsStream("config.xml");
	    		 factory=new SqlSessionFactoryBuilder().build(is);
	    	  }catch(Exception e){
	    		  e.printStackTrace();
	    	  }
	    	  
	      }
	      
	      //获取SqlSession
	      public static SqlSession createSqlSession(){
	    	  
	    	  return  factory.openSession(true); //true为自动提交   
	      }
	      
	      
	      
	      public static void closeSqlSession(SqlSession sqlSession){
	      	  if(null!=sqlSession){
	    		  sqlSession.close();
	    	  }
	      }
}

4.resources

config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "mybatis-3-config.dtd" >
<configuration>
<!-- 引入外部文件 -->
<properties resource="db.properties"></properties>
<!-- 开启复杂的自动映射 -->
<settings>
<setting name="autoMappingBehavior" value="FULL"/>
</settings>
<!-- 起别名 -->
<typeAliases>
<package name="cn.lexed.pojo"/>
</typeAliases>
<!-- JDBC配置 -->
<environments default="env">
<environment id="env">
<!-- 事务管理器 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 数据源 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 在配置文件中,关联包下得接口类 -->
<package name="cn.lexed.dao"/>
</mappers>
</configuration>

db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/dbs
username=root
password=root

log4j.properties

log4j.rootLogger=DEBUG,CONSOLE,file
#log4j.rootLogger=ERROR,ROLLING_FILE
log4j.logger.cn.lexed.dao=debug
log4j.logger.com.ibatis=debug 
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug 
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug 
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug 
log4j.logger.java.sql.Connection=debug 
log4j.logger.java.sql.Statement=debug 
log4j.logger.java.sql.PreparedStatement=debug 
log4j.logger.java.sql.ResultSet=debug 
log4j.logger.org.tuckey.web.filters.urlrewrite.UrlRewriteFilter=debug

######################################################################################
# Console Appender  \u65e5\u5fd7\u5728\u63a7\u5236\u8f93\u51fa\u914d\u7f6e
######################################################################################
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=error
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern= [%p] %d %c - %m%n


######################################################################################
# DailyRolling File  \u6bcf\u5929\u4ea7\u751f\u4e00\u4e2a\u65e5\u5fd7\u6587\u4ef6\uff0c\u6587\u4ef6\u540d\u683c\u5f0f:log2009-09-11
######################################################################################
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.DatePattern=yyyy-MM-dd
log4j.appender.file.File=log.log
log4j.appender.file.Append=true
log4j.appender.file.Threshold=error
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-M-d HH:mm:ss}%x[%5p](%F:%L) %m%n


log4j.logger.com.opensymphony.xwork2=error  

5.测试类

package cn.lexed.test;

import static org.junit.Assert.*;

import org.apache.ibatis.session.SqlSession;

import cn.lexed.dao.ClassesMapper;
import cn.lexed.dao.StudentMapper;
import cn.lexed.pojo.Classes;
import cn.lexed.pojo.Student;
import cn.lexed.utils.MybatisUtils;

public class Test {

	@org.junit.Test
	public void test() {
		SqlSession ss=MybatisUtils.createSqlSession();
		Classes c=ss.getMapper(ClassesMapper.class).getClasses(2);
		System.out.println(c);
	}
	
	@org.junit.Test
	public void test2(){
		SqlSession ss=MybatisUtils.createSqlSession();
		Student s=ss.getMapper(StudentMapper.class).getStu(1);
		System.out.println(s);
	}

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值