`
zhaohaolin
  • 浏览: 984781 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

MyBatis (转载)

阅读更多

一、MyBatis简介与配置MyBatis+Spring+MySql

1.1MyBatis简介

      MyBatis 是一个可以自定义SQL、存储过程和高级映射的持久层框架。MyBatis 摒除了大部分的JDBC代码、手工设置参数和结果集重获。MyBatis 只使用简单的XML 和注解来配置和映射基本数据类型、Map 接口和POJO 到数据库记录。相对Hibernate和Apache OJB等“一站式”ORM解决方案而言,Mybatis 是一种“半自动化”的ORM实现。
需要使用的Jar包:mybatis-3.0.2.jar(mybatis核心包)。mybatis-spring-1.0.0.jar(与Spring结合包)。

下载地址:
http://ibatis.apache.org/tools/ibator
http://code.google.com/p/mybatis/

 

1.2MyBatis+Spring+MySql简单配置

1.2.1搭建Spring环境

1,建立maven的web项目;
2,加入Spring框架、配置文件;
3,在pom.xml中加入所需要的jar包(spring框架的、mybatis、mybatis-spring、junit等);
4,更改web.xml和spring的配置文件;
5,添加一个jsp页面和对应的Controller;
6,测试。

可参照:http://limingnihao.javaeye.com/blog/830409使用Eclipse的Maven构建SpringMVC项目


1.2.2建立MySql数据库

建立一个学生选课管理数据库。
表:学生表、班级表、教师表、课程表、学生选课表。
逻辑关系:每个学生有一个班级;每个班级对应一个班主任教师;每个教师只能当一个班的班主任;

使用下面的sql进行建数据库,先建立学生表,插入数据(2条以上)。

更多sql请下载项目源文件,在resource/sql中。

Sql代码
  1. /* 建立数据库 */  
  2. CREATE   DATABASE  STUDENT_MANAGER;  
  3. USE STUDENT_MANAGER;  
  4.   
  5. /***** 建立student表 *****/  
  6. CREATE   TABLE  STUDENT_TBL  
  7. (  
  8.    STUDENT_ID         VARCHAR (255)  PRIMARY   KEY ,  
  9.    STUDENT_NAME       VARCHAR (10)  NOT   NULL ,  
  10.    STUDENT_SEX        VARCHAR (10),  
  11.    STUDENT_BIRTHDAY   DATE ,  
  12.    CLASS_ID           VARCHAR (255)  
  13. );  
  14.   
  15. /*插入学生数据*/  
  16. INSERT   INTO  STUDENT_TBL (STUDENT_ID,  
  17.                          STUDENT_NAME,  
  18.                          STUDENT_SEX,  
  19.                          STUDENT_BIRTHDAY,  
  20.                          CLASS_ID)  
  21.   VALUES    (123456,  
  22.             '某某某' ,  
  23.             '女' ,  
  24.             '1980-08-01' ,  
  25.             121546  
  26.             )  
/* 建立数据库 */
CREATE DATABASE STUDENT_MANAGER;
USE STUDENT_MANAGER;
/***** 建立student表 *****/
CREATE TABLE STUDENT_TBL
(
STUDENT_ID         VARCHAR(255) PRIMARY KEY,
STUDENT_NAME       VARCHAR(10) NOT NULL,
STUDENT_SEX        VARCHAR(10),
STUDENT_BIRTHDAY   DATE,
CLASS_ID           VARCHAR(255)
);
/*插入学生数据*/
INSERT INTO STUDENT_TBL (STUDENT_ID,
STUDENT_NAME,
STUDENT_SEX,
STUDENT_BIRTHDAY,
CLASS_ID)
VALUES   (123456,
'某某某',
'女',
'1980-08-01',
121546
)

 


创建连接MySql使用的配置文件mysql.properties。

Mysql.properties代码
  1. jdbc.driverClassName=com.mysql.jdbc.Driver  
  2. jdbc.url=jdbc:mysql://localhost:3306 /student_manager?user=root&password=limingnihao&useUnicode=true&characterEncoding=UTF- 8   
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/student_manager?user=root&password=limingnihao&useUnicode=true&characterEncoding=UTF-8

 

 

1.2.3搭建MyBatis环境

顺序随便,现在的顺序是因为可以尽量的少的修改写好的文件。


1.2.3.1创建实体类: StudentEntity

Java代码
  1. public   class  StudentEntity  implements  Serializable {  
  2.   
  3.     private   static   final   long  serialVersionUID = 3096154202413606831L;  
  4.     private  ClassEntity classEntity;  
  5.     private  Date studentBirthday;  
  6.     private  String studentID;  
  7.     private  String studentName;  
  8.     private  String studentSex;  
  9.       
  10.     public  ClassEntity getClassEntity() {  
  11.         return  classEntity;  
  12.     }  
  13.   
  14.     public  Date getStudentBirthday() {  
  15.         return  studentBirthday;  
  16.     }  
  17.   
  18.     public  String getStudentID() {  
  19.         return  studentID;  
  20.     }  
  21.   
  22.     public  String getStudentName() {  
  23.         return  studentName;  
  24.     }  
  25.   
  26.     public  String getStudentSex() {  
  27.         return  studentSex;  
  28.     }  
  29.   
  30.     public   void  setClassEntity(ClassEntity classEntity) {  
  31.         this .classEntity = classEntity;  
  32.     }  
  33.   
  34.     public   void  setStudentBirthday(Date studentBirthday) {  
  35.         this .studentBirthday = studentBirthday;  
  36.     }  
  37.   
  38.     public   void  setStudentID(String studentID) {  
  39.         this .studentID = studentID;  
  40.     }  
  41.   
  42.     public   void  setStudentName(String studentName) {  
  43.         this .studentName = studentName;  
  44.     }  
  45.   
  46.     public   void  setStudentSex(String studentSex) {  
  47.         this .studentSex = studentSex;  
  48.     }  
  49. }  
public class StudentEntity implements Serializable {
private static final long serialVersionUID = 3096154202413606831L;
private ClassEntity classEntity;
private Date studentBirthday;
private String studentID;
private String studentName;
private String studentSex;
public ClassEntity getClassEntity() {
return classEntity;
}
public Date getStudentBirthday() {
return studentBirthday;
}
public String getStudentID() {
return studentID;
}
public String getStudentName() {
return studentName;
}
public String getStudentSex() {
return studentSex;
}
public void setClassEntity(ClassEntity classEntity) {
this.classEntity = classEntity;
}
public void setStudentBirthday(Date studentBirthday) {
this.studentBirthday = studentBirthday;
}
public void setStudentID(String studentID) {
this.studentID = studentID;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public void setStudentSex(String studentSex) {
this.studentSex = studentSex;
}
}

 

 

 

1.2.3.2创建数据访问接口

Student类对应的dao接口:StudentMapper。

Java代码
  1. public   interface  StudentMapper {  
  2.       
  3.     public  StudentEntity getStudent(String studentID);  
  4.       
  5.     public  StudentEntity getStudentAndClass(String studentID);  
  6.       
  7.     public  List<StudentEntity> getStudentAll();  
  8.       
  9.     public   void  insertStudent(StudentEntity entity);  
  10.       
  11.     public   void  deleteStudent(StudentEntity entity);  
  12.       
  13.     public   void  updateStudent(StudentEntity entity);  
  14. }  
public interface StudentMapper {
public StudentEntity getStudent(String studentID);
public StudentEntity getStudentAndClass(String studentID);
public List<StudentEntity> getStudentAll();
public void insertStudent(StudentEntity entity);
public void deleteStudent(StudentEntity entity);
public void updateStudent(StudentEntity entity);
}

 


1.2.3.3创建SQL映射语句文件


Student类的sql语句文件StudentMapper.xml
resultMap标签:表字段与属性的映射。
Select标签:查询sql。

Xml代码
  1. <? xml   version = "1.0"   encoding = "UTF-8"   ?>   
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">   
  3. < mapper   namespace = "com.manager.data.StudentMapper" >   
  4.   
  5.     < resultMap   type = "StudentEntity"   id = "studentResultMap" >   
  6.         < id   property = "studentID"   column = "STUDENT_ID" />   
  7.         < result   property = "studentName"   column = "STUDENT_NAME" />   
  8.         < result   property = "studentSex"   column = "STUDENT_SEX" />   
  9.         < result   property = "studentBirthday"   column = "STUDENT_BIRTHDAY" />   
  10.     </ resultMap >   
  11.       
  12.     <!-- 查询学生,根据id -->   
  13.     < select   id = "getStudent"   parameterType = "String"   resultType = "StudentEntity"   resultMap = "studentResultMap" >   
  14.         <![CDATA[  
  15.             SELECT * from STUDENT_TBL ST  
  16.                 WHERE ST.STUDENT_ID = #{studentID}   
  17.         ]]>    
  18.     </ select >   
  19.       
  20.     <!-- 查询学生列表 -->   
  21.     < select   id = "getStudentAll"    resultType = "com.manager.data.model.StudentEntity"   resultMap = "studentResultMap" >   
  22.         <![CDATA[  
  23.             SELECT * from STUDENT_TBL  
  24.         ]]>    
  25.     </ select >   
  26.       
  27. </ mapper >   
<?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.manager.data.StudentMapper">
<resultMap type="StudentEntity" id="studentResultMap">
<id property="studentID" column="STUDENT_ID"/>
<result property="studentName" column="STUDENT_NAME"/>
<result property="studentSex" column="STUDENT_SEX"/>
<result property="studentBirthday" column="STUDENT_BIRTHDAY"/>
</resultMap>
<!-- 查询学生,根据id -->
<select id="getStudent" parameterType="String" resultType="StudentEntity" resultMap="studentResultMap">
<![CDATA[
SELECT * from STUDENT_TBL ST
WHERE ST.STUDENT_ID = #{studentID}
]]>
</select>
<!-- 查询学生列表 -->
<select id="getStudentAll"  resultType="com.manager.data.model.StudentEntity" resultMap="studentResultMap">
<![CDATA[
SELECT * from STUDENT_TBL
]]>
</select>
</mapper>

 

 


1.2.3.4创建MyBatis的mapper配置文件

在src/main/resource中创建MyBatis配置文件:mybatis-config.xml。
typeAliases标签:给类起一个别名。com.manager.data.model.StudentEntity类,可以使用StudentEntity代替。
Mappers标签:加载MyBatis中实体类的SQL映射语句文件。

 

Xml代码
  1. <? xml   version = "1.0"   encoding = "UTF-8"   ?>   
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">   
  3. < configuration >   
  4.     < typeAliases >   
  5.         < typeAlias   alias = "StudentEntity"   type = "com.manager.data.model.StudentEntity" />   
  6.     </ typeAliases >   
  7.     < mappers >   
  8.         < mapper   resource = "com/manager/data/maps/StudentMapper.xml"   />   
  9.     </ mappers >   
  10. </ configuration >     
<?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>
<typeAliases>
<typeAlias alias="StudentEntity" type="com.manager.data.model.StudentEntity"/>
</typeAliases>
<mappers>
<mapper resource="com/manager/data/maps/StudentMapper.xml" />
</mappers>
</configuration>

 

 

 


1.2.3.5修改Spring 的配置文件

主要是添加SqlSession的制作工厂类的bean:SqlSessionFactoryBean,(在mybatis.spring包中)。需要指定配置文件位置和dataSource。
和数据访问接口对应的实现bean。通过MapperFactoryBean创建出来。需要执行接口类全称和SqlSession工厂bean的引用。

Xml代码
  1. <!-- 导入属性配置文件 -->   
  2. < context:property-placeholder   location = "classpath:mysql.properties"   />   
  3.   
  4. < bean   id = "dataSource"   class = "org.springframework.jdbc.datasource.DriverManagerDataSource" >   
  5.     < property   name = "driverClassName"   value = "${jdbc.driverClassName}"   />   
  6.     < property   name = "url"   value = "${jdbc.url}"   />   
  7. </ bean >   
  8.   
  9. < bean   id = "transactionManager"   class = "org.springframework.jdbc.datasource.DataSourceTransactionManager" >   
  10.     < property   name = "dataSource"   ref = "dataSource"   />   
  11. </ bean >   
  12.   
  13. < bean   id = "sqlSessionFactory"   class = "org.mybatis.spring.SqlSessionFactoryBean" >   
  14.     < property   name = "configLocation"   value = "classpath:mybatis-config.xml"   />   
  15.     < property   name = "dataSource"   ref = "dataSource"   />   
  16. </ bean >   
  17.   
  18. <!— mapper bean -->   
  19. < bean   id = "studentMapper"   class = "org.mybatis.spring.MapperFactoryBean" >   
  20.     < property   name = "mapperInterface"   value = "com.manager.data.StudentMapper"   />   
  21.     < property   name = "sqlSessionFactory"   ref = "sqlSessionFactory"   />   
  22. </ bean >   
<!-- 导入属性配置文件 -->
<context:property-placeholder location="classpath:mysql.properties" />
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:mybatis-config.xml" />
<property name="dataSource" ref="dataSource" />
</bean>
<!— mapper bean -->
<bean id="studentMapper" class="org.mybatis.spring.MapperFactoryBean">
<property name="mapperInterface" value="com.manager.data.StudentMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>

 

 

 

 

1.2.4测试StudentMapper

使用SpringMVC测试,创建一个TestController,配置tomcat,访问index.do页面进行测试:

Java代码
  1. @Controller   
  2. public   class  TestController {  
  3.   
  4.     @Autowired   
  5.     private  StudentMapper studentMapper;  
  6.       
  7.     @RequestMapping (value =  "index.do" )  
  8.     public   void  indexPage() {     
  9.         StudentEntity entity = studentMapper.getStudent("10000013" );  
  10.         System.out.println("name:"  + entity.getStudentName());  
  11.     }     
  12. }  
@Controller
public class TestController {
@Autowired
private StudentMapper studentMapper;
@RequestMapping(value = "index.do")
public void indexPage() {
StudentEntity entity = studentMapper.getStudent("10000013");
System.out.println("name:" + entity.getStudentName());
}
}

 

 

使用Junit测试:

Java代码
  1. 使用Junit测试:  
  2. Java代码  
  3. @RunWith (value = SpringJUnit4ClassRunner. class )  
  4. @ContextConfiguration (value =  "test-servlet.xml" )  
  5. public   class  StudentMapperTest {  
  6.       
  7.     @Autowired   
  8.     private  ClassMapper classMapper;  
  9.       
  10.     @Autowired   
  11.     private  StudentMapper studentMapper;  
  12.       
  13.     @Transactional   
  14.     public   void  getStudentTest(){  
  15.         StudentEntity entity = studentMapper.getStudent("10000013" );  
  16.         System.out.println(""  + entity.getStudentID() + entity.getStudentName());  
  17.           
  18.         List<StudentEntity> studentList = studentMapper.getStudentAll();  
  19.         for ( StudentEntity entityTemp : studentList){  
  20.             System.out.println(entityTemp.getStudentName());  
  21.         }  
  22.           
  23.     }  
  24. }  
使用Junit测试:
Java代码
@RunWith(value = SpringJUnit4ClassRunner.class)
@ContextConfiguration(value = "test-servlet.xml")
public class StudentMapperTest {
@Autowired
private ClassMapper classMapper;
@Autowired
private StudentMapper studentMapper;
@Transactional
public void getStudentTest(){
StudentEntity entity = studentMapper.getStudent("10000013");
System.out.println("" + entity.getStudentID() + entity.getStudentName());
List<StudentEntity> studentList = studentMapper.getStudentAll();
for( StudentEntity entityTemp : studentList){
System.out.println(entityTemp.getStudentName());
}
}
}

 

         更详细的功能源代码http://limingnihao.javaeye.com/admin/blogs/782190 页面最下面;

二、SQL语句映射文件(1)resultMap

SQL 映射XML 文件是所有sql语句放置的地方。需要定义一个workspace,一般定义为对应的接口类的路径。写好SQL语句映射文件后,需要在MyBAtis配置文件mappers标签中引用,例如:

 

Xml代码
  1. < mappers >   
  2.     < mapper   resource = "com/liming/manager/data/mappers/UserMapper.xml"   />   
  3.     < mapper   resource = "com/liming/manager/data/mappers/StudentMapper.xml"   />   
  4.     < mapper   resource = "com/liming/manager/data/mappers/ClassMapper.xml"   />   
  5.     < mapper   resource = "com/liming/manager/data/mappers/TeacherMapper.xml"   />   
  6. </ mappers >   
<mappers>
<mapper resource="com/liming/manager/data/mappers/UserMapper.xml" />
<mapper resource="com/liming/manager/data/mappers/StudentMapper.xml" />
<mapper resource="com/liming/manager/data/mappers/ClassMapper.xml" />
<mapper resource="com/liming/manager/data/mappers/TeacherMapper.xml" />
</mappers>

 

 


SQL 映射XML 文件一些初级的元素:


1. cache – 配置给定模式的缓存
2. cache-ref – 从别的模式中引用一个缓存
3. resultMap – 这是最复杂而却强大的一个元素了,它描述如何从结果集中加载对象
4. sql – 一个可以被其他语句复用的SQL 块
5. insert – 映射INSERT 语句
6. update – 映射UPDATE 语句
7. delete – 映射DELEETE 语句
8. select  -  映射SELECT语句

 


2.1 resultMap

        resultMap 是MyBatis 中最重要最强大的元素了。你可以让你比使用JDBC 调用结果集省掉90%的代码,也可以让你做许多JDBC 不支持的事。现实上,要写一个等同类似于交互的映射这样的复杂语句,可能要上千行的代码。ResultMaps 的目的,就是这样简单的语句而不需要多余的结果映射,更多复杂的语句,除了只要一些绝对必须的语句描述关系以外,再也不需要其它的。

resultMap属性:type为java实体类;id为此resultMap的标识。

 

 resultMap可以设置的映射:


1. constructor – 用来将结果反射给一个实例化好的类的构造器

a) idArg – ID 参数;将结果集标记为ID,以方便全局调用
b) arg –反射到构造器的通常结果


2. id – ID 结果,将结果集标记为ID,以方便全局调用


3. result – 反射到JavaBean 属性的普通结果


4. association – 复杂类型的结合;多个结果合成的类型

a) nested result mappings – 几resultMap 自身嵌套关联,也可以引用到一个其它上


5. collection –复杂类型集合a collection of complex types


6. nested result mappings – resultMap 的集合,也可以引用到一个其它上


7. discriminator – 使用一个结果值以决定使用哪个resultMap

a) case – 基本一些值的结果映射的case 情形

i. nested result mappings –一个case 情形本身就是一个结果映射,因此也可以包括一些相同的元素,也可以引用一个外部resultMap。

 

 

2.1.1 id、result

id、result是最简单的映射,id为主键映射;result其他基本数据库表字段到实体类属性的映射。
  最简单的例子:

Xml代码
  1. < resultMap   type = "StudentEntity"   id = "studentResultMap" >   
  2.     < id   property = "studentID"   column = "STUDENT_ID" />   
  3.     < result   property = "studentName"   column = "STUDENT_NAME" />   
  4.     < result   property = "studentSex"   column = "STUDENT_SEX" />   
  5.     < result   property = "studentBirthday"   column = "STUDENT_BIRTHDAY" />   
  6. </ resultMap >   
<resultMap type="StudentEntity" id="studentResultMap">
<id property="studentID" column="STUDENT_ID"/>
<result property="studentName" column="STUDENT_NAME"/>
<result property="studentSex" column="STUDENT_SEX"/>
<result property="studentBirthday" column="STUDENT_BIRTHDAY"/>
</resultMap>

 

 

id、result语句属性配置细节:

 

属性

描述

 

property

需要映射到 JavaBean 的属性名称。

 

column

数据表的列名或者标签别名。

 

javaType

一个完整的类名,或者是一个类型别名。如果你匹配的是一个 JavaBean ,那 MyBatis 通常会自行检测到。然后,如果你是要映射到一个 HashMap ,那你需要指定 javaType 要达到的目的。

 

jdbcType

数据表支持的类型列表。这个属性只在 insert,update delete 的时候针对允许空的列有用。 JDBC 需要这项,但 MyBatis 不需要。如果你是直接针对 JDBC 编码,且有允许空的列,而你要指定这项。

 

typeHandler

使用这个属性可以覆写类型处理器。这项值可以是一个完整的类名,也可以是一个类型别名。

 

 

 

支持的JDBC类型
       为了将来的引用,MyBatis 支持下列JDBC 类型,通过JdbcType 枚举:
BIT,FLOAT,CHAR,TIMESTAMP,OTHER,UNDEFINED,TINYINT,REAL,VARCHAR,BINARY,BLOB,NVARCHAR,SMALLINT,DOUBLE,LONGVARCHAR,VARBINARY,CLOB,NCHAR,INTEGER,NUMERIC,DATE,LONGVARBINARY,BOOLEAN,NCLOB,BIGINT,DECIMAL,TIME,NULL,CURSOR

 

 

2.1.2 constructor


        我们使用id、result时候,需要定义java实体类的属性映射到数据库表的字段上。这个时候是使用JavaBean实现的。当然我们也可以使用实体类的构造方法来实现值的映射,这个时候是通过构造方法参数的书写的顺序来进行赋值的。
        使用construcotr功能有限(例如使用collection级联查询)。
        上面使用id、result实现的功能就可以改为:

Xml代码
  1. < resultMap   type = "StudentEntity"   id = "studentResultMap"   >   
  2.     < constructor >   
  3.         < idArg   javaType = "String"   column = "STUDENT_ID" />   
  4.         < arg   javaType = "String"   column = "STUDENT_NAME" />   
  5.         < arg   javaType = "String"   column = "STUDENT_SEX" />   
  6.         < arg   javaType = "Date"   column = "STUDENT_BIRTHDAY" />   
  7.     </ constructor >   
  8. </ resultMap >   
<resultMap type="StudentEntity" id="studentResultMap" >
<constructor>
<idArg javaType="String" column="STUDENT_ID"/>
<arg javaType="String" column="STUDENT_NAME"/>
<arg javaType="String" column="STUDENT_SEX"/>
<arg javaType="Date" column="STUDENT_BIRTHDAY"/>
</constructor>
</resultMap>

 

        当然,我们需要定义StudentEntity实体类的构造方法:

Java代码
  1. public  StudentEntity(String studentID, String studentName, String studentSex, Date studentBirthday){  
  2.     this .studentID = studentID;  
  3.     this .studentName = studentName;  
  4.     this .studentSex = studentSex;  
  5.     this .studentBirthday = studentBirthday;  
  6. }  
public StudentEntity(String studentID, String studentName, String studentSex, Date studentBirthday){
this.studentID = studentID;
this.studentName = studentName;
this.studentSex = studentSex;
this.studentBirthday = studentBirthday;
}

 

 

 

 

2.1.3 association联合

联合元素用来处理“一对一”的关系。需要指定映射的Java实体类的属性,属性的javaType(通常MyBatis 自己会识别)。对应的数据库表的列名称。如果想覆写的话返回结果的值,需要指定typeHandler。
不同情况需要告诉MyBatis 如何加载一个联合。MyBatis 可以用两种方式加载:

1. select: 执行一个其它映射的SQL 语句返回一个Java实体类型。较灵活;
2. resultsMap: 使用一个嵌套的结果映射来处理通过join查询结果集,映射成Java实体类型。

 

例如,一个班级对应一个班主任。
 首先定义好班级中的班主任属性:

Java代码
  1. private  TeacherEntity teacherEntity;  
private TeacherEntity teacherEntity;

 

 

2.1.3.1使用select实现联合

 例:班级实体类中有班主任的属性,通过联合在得到一个班级实体时,同时映射出班主任实体。

 这样可以直接复用在TeacherMapper.xml文件中定义好的查询teacher根据其ID的select语句。而且不需要修改写好的SQL语句,只需要直接修改resultMap即可。


 ClassMapper.xml文件部分内容:

Xml代码
  1. < resultMap   type = "ClassEntity"   id = "classResultMap" >   
  2.     < id   property = "classID"   column = "CLASS_ID"   />   
  3.     < result   property = "className"   column = "CLASS_NAME"   />   
  4.     < result   property = "classYear"   column = "CLASS_YEAR"   />   
  5.     < association   property = "teacherEntity"   column = "TEACHER_ID"   select = "getTeacher" />   
  6. </ resultMap >   
  7.   
  8. < select   id = "getClassByID"   parameterType = "String"   resultMap = "classResultMap" >   
  9.     SELECT * FROM CLASS_TBL CT  
  10.     WHERE CT.CLASS_ID  = #{classID};  
  11. </ select >   
<resultMap type="ClassEntity" id="classResultMap">
<id property="classID" column="CLASS_ID" />
<result property="className" column="CLASS_NAME" />
<result property="classYear" column="CLASS_YEAR" />
<association property="teacherEntity" column="TEACHER_ID" select="getTeacher"/>
</resultMap>
<select id="getClassByID" parameterType="String" resultMap="classResultMap">
SELECT * FROM CLASS_TBL CT
WHERE CT.CLASS_ID = #{classID};
</select>

 

 

 TeacherMapper.xml文件部分内容:

Xml代码
  1. < resultMap   type =<
    分享到:
    评论

相关推荐

    springmybatis

    MyBatis 目录(?)[-] mybatis实战教程mybatis in action之一开发环境搭建 mybatis实战教程mybatis in action之二以接口的方式编程 mybatis实战教程mybatis in action之三实现数据的增删改查 mybatis实战教程mybatis ...

    shiro安全框架整合Mybatis

    本文使用Shiro整合Mybatis,利用Druid数据库连接池,实现用户认证和授权。 ———————————————— 版权声明:本文为CSDN博主「全村第二帅」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处...

    spring boot+mybatis整合

    目录 一、整体结构图 二、Spring boot搭建 三、整合Mybatis(自动生成工具) 1、集成druid,使用连接池 2、自动生成工具依赖和插件 3、最终的pom.xml文件: ...版权声明:本文为博主原创文章,转载请附上博文链接!

    mybatis-3.2.2.jar

    下载后解压放入项目lib文件夹即可使用。请勿转载,谢谢。

    mybatis interceptor

    mybatis实现分页的例子,为了记录下来以便于今后自己用。

    SpringBoot+Mybatis+thymeleaf的Java博客系统开源

    SpringBoot+Mybatis+thymeleaf的Java博客系统开源 运行环境 jdk7+tomcat7+mysql+IntelliJ IDEA+mavena+redis 项目技术(必填) ...是否原创(转载必填原文地址) https://github.com/JayTange/My-Blog

    springboot 集成mybatis

    springboot集成mybatis,转载的别人的,方便使用的人查询

    mybatis逆向工程

    MyBatis的一个主要的特点就是需要程序员自己编写sql,那么如果表太多的话,难免会很麻烦,所以mybatis官方提供了一个逆向工程,可以针对单表自动生成mybatis执行所需要的代码(包括mapper.xml、mapper.java、po..)...

    Spring MVC+MYBatis企业应用实战

    Spring MVC+MYBatis企业应用实战,,转载请注明出处:https://blog.csdn.net/qq_40374604(如有需要欢迎留言,我一定会尽快解答)

    基于springBoot+mybatis的志愿者管理系统

    基于springBoot+mybatis的志愿者管理系统 志愿者管理,修复了一些问题,去掉没有用的文件, 加入了启动地址,用户,密码 加入的注册码的插件! 本系列环境: 环境 win11 工具 idea 2018 jdk 1.8 数据库 mysql5.5 ...

    基于mybatis考试管理及成绩查询模块的设计与开发

    基于mybatis考试管理及成绩查询模块的设计与开发 黑马的JAVA学习路线–详解JAVA部分的学习 语言视频选择 收录专辑链接 C 张雪峰推荐选择了计算机专业之后-在大学期间卷起来-【大学生活篇】 JAVA 黑马B站视频JAVA...

    mybatis-hand-writing:mybatis手写迷你版源码,jdk动态代理的运用,手写mybatis的迷你版本源码,自己实现mybatis

    mybatis手写 转载自gupao学院。

    Spring+MyBatis+mysql 开发网站后台权限管理系统源代码下载

    郑重声明:本文分享内容来自互联网,转载目的在于传递更多信息,帮助大家,并不代表本人赞同其观点和 对其真实性负责。如涉及作品内容、版权和其它问题,请在七日内与本人联系,我将在第一时间删除内容! [声明]本...

    Mybatis教程-实战看这一篇就够了

    如果此教程对您有帮助,就请有钱的捧个钱场,没钱的捧个人场(转载分享)哦~ 推荐SpringCloud教程:https://blog.csdn.net/hellozpc/article/details/83692496 推荐Guava Cache教程:...

    基于SpringMVC+SpringBoot+MyBatis的网上订餐系统

    版权声明:本文为CSDN博主「Android毕业设计源码」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/u014388322/article/details/132872676

    java源码分析-mybatis-projects:分析Mybatis的使用、配置、源码和生成器

    java 源码分析 简介 Mybatis 是一个持久层框架,它对 JDBC 进行了高级封装,使我们的代码中不会出现任何的 JDBC 代码,另外,它还通过 xml 或注解的方式将 ...本文为原创文章,转载请附上原文出处链接:

    Java博客系统,完美自适应,支持markdown编辑器

    基于springboot、mybatis、ehcache、thymeleaf、bootstrap做的博客系统,完美自适应,支持markdown编辑器 项目描述 项目基于spring boot和thymeleaf编写的一...是否原创(转载必填原文地址) 互联网源码+二次开发

    web班级作业管理系统后台.7z

    spring+spring mvc+mybatis+bootstrap+jquery+struts2+hibernate 数据库文件 见压缩包 jar包文件 见压缩包 运行视频 无 是否原创(转载必填原文地址) 是 运行截图(必填) 注意事项 前端教师和...

    javaweb SSM 宠物医院管理系统(源码+论文).zip

    项目使用java SpringMVC、springboot mybatis、layui为核心技术编写 ———————————————— 版权声明:本文为CSDN博主「java李阳勇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本...

    基于ssm框架开发简单的婚恋相亲网站(前台+后台管理系统)

    基于ssm的相亲网,仅供参考,转载代码请表明最代码地址和作者-程序猿全敏 运行环境 jdk7+tomcat7+mysql+eclipse 项目技术(必填) spring+spring mvc+mybatis+jquery 数据库文件 链接:...

Global site tag (gtag.js) - Google Analytics