XML配置:<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- mybatis有两个配置文件一个是全局配置文件mybatis-3-config.dtd
一个是接口映射文件mybatis-3-mapper.dtd 接口映射文件需要使用接口文档映射定义 -->
<!-- 在mapper映射文件中,使用mapper标签进行事先接口映射,使用namespace指定要映射的接口
即namespace配置的是接口的名称 一般的一个映射文件实现(映射)一个接口,在运行过程中,mybatis的代理类会
根据配置文件生成(实现)数据操作接口定义的数据库操作(相当于由mybatis编写了一个接口实现类)
-->
<mapper namespace="com.neuedu.mybatisdemo.dao.ICourceDao">
<!-- resultMap 用于配置查询结果的映射关系 -->
<resultMap type="Cource" id="courceMap">
<!-- id用于配置数据库的主键列或唯一键列 -->
<!-- orm框架可以完成数据库表的类与java类的属性的映射关系-object mapping对象映射,relation mapping关系映射-->
<id column="cource_id" property="courceID"/>
<result column="cource_name" property="courceName"/>
<result column="cource_score" property="courceScore"/>
<result column="start_date" property="startDate"/>
<collection property="studentList" ofType="Student">
<id column="id" property="id"/>
<result column="account" property="account"/>
<result column="password" property="password"/>
<result column="realname" property="realname"/>
</collection>
</resultMap>
<!-- 在接口映射文件中,使用SELECT INSERT UPDATE DELETE配置对应的sql脚本 -->
<!-- 在配置标签中使用ID配置接口的方法名称 ,resultMap用于配置自定义的结果映射关系-->
<!-- <select id="findAll" resultMap="courceMap">
select * from cource
</select> -->
<!-- <select id="findAll" resultType="cource">
select * from cource
</select> -->
<sql id="selectColumn">c.cource_id as courceID,c.cource_name as courceName ,c.cource_score as courceScore ,c.start_date as startDate </sql>
<select id="findAll" resultMap="courceMap">
select c.*,s.* from cource c LEFT OUTER JOIN selection t ON c.cource_id=t.cource_id LEFT OUTER JOIN student s ON t.student_id=s.id
</select>
<!-- 如果使用resultType进行查询结果映射时:
如果数据库中数据字段名与实体类属性名相同,则可以直接进行映射,
否则可以使用别名进行对应的映射
-->
<!-- 注意使用mybatis进行配置,id不能重名,即接口方法不能重载 -->
实体类:public class Cource {
//编号
private String courceID;
//名称
private String courceName;
//学分
private int courceScore;
//开课时间
private Date startDate;
private List<Student> studentList;
public Cource(){
super();
};
public Cource(String courceID, String courceName, int courceScore,
Date startDate) {
super();
this.courceID = courceID;
this.courceName = courceName;
this.courceScore = courceScore;
this.startDate = startDate;
}}设置参数的函数忽略
Student实体类:public class Student {
private int id;
private String account;
private String password;
private String realname;
//所选课程与学生之间是多对一的关系,反之学生可以与课程之间可以是一对多的关系
//has a关系 在student类中设计一个集合属性用于保存该学生所有选择的课程信息
private List<Cource> courceList;
public Student(){super();};
public Student(int id, String account, String password, String realname) {
super();
this.id = id;
this.account = account;
this.password = password;
this.realname = realname;
}
package test;
import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.neuedu.mybatisdemo.bean.Cource;
import com.neuedu.mybatisdemo.bean.Student;
import com.neuedu.mybatisdemo.dao.ICourceDao;
import com.neuedu.mybatisdemo.dao.IStudentDao;
public class TestICourceDao {
private Logger logger=Logger.getLogger(TestICourceDao.class);
private SqlSession session;
@Before
public void init(){
try{
//1.加载mybatis环境
String resource="config/mybatis-config.xml";
InputStream inputStream=Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
//2.通过mybatis实例化数据访问接口
session=sqlSessionFactory.openSession();
}
catch(IOException e){
logger.warn("发生了异常",e);
}
}
@After
public void destory(){
if(session!=null)
{
session.close();
}
}
@Test
public void testFindALl(){
List<Cource> list=session.getMapper(ICourceDao.class).findAll();
for (Cource cource : list) {
logger.info(cource.getCourceID()+" "+cource.getCourceName()+" "+cource.getCourceScore()+" "+
cource.getStartDate());
if(cource.getStudentList()!=null){
for (Student student : cource.getStudentList()) {
logger.info(student.getId()+" , "+student.getAccount()+" , "+student.getPassword()+" , "+student.getRealname());
}
}
}
}
使用JUnit测试Mybatis配置
最新推荐文章于 2023-05-30 15:14:55 发布