全局配置文件,以及sql.properties
<?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>
<!-- 加载jdbcproperties
要卸载configuration和environment之间
-->
<properties resource="com/leige/config/jdbcInfo.properties"></properties>
<!-- 别名声明,告诉mybatis,Student对应的类类型
使其能将Student这个字符和Student类对应起来
类型别名是为 Java 类型设置一个短的名字。它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余
即在任何需要使用com.leige.domain.Student的地方都可以使用Student
-->
<typeAliases>
<!-- 声明po类别名 -->
<typeAlias alias="Student" type="com.leige.domain.Student"/>
<!-- 声明组合查询类 -->
<typeAlias alias="StudentQueryVo" type="com.leige.domain.StudentQueryVo" />
</typeAliases>
<!-- 环境配置,数据库连接参数 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<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>
<!-- 将操作sql集合加入配置文件 -->
<mappers>
<mapper resource="com/leige/domain/Student.xml"/>
</mappers>
</configuration>
jdbc配置
driver=com.mysql.jdbc.Driver
url=jdbc\:mysql\:///test
username=root
password=
首先介绍resultType和resultMap区别:
简单介绍下resultType和resultMap的区别: resultType可以理解为实现po类属性到数据库表的映射,不支持别名查询
即使用 select sid sid_,age age_,name sname from student where
sid=1时,如果使用resultType接收结果, 会发生数据丢失即sid,age,name无法注入到对象中
这时候可以使用resultMap 1:使用resultMap之前要先定义resultMap column:数据列名
property:po类属性名 例如:
<resultMap type="Student" id="studentMap">
<!-- type表示转换的类型,id唯一表示resultMap,
如果在别的映射文件中使用此resultMap,需要加上命名空间,即Student.studentMap -->
<id column="sid_" property="sid" />
<result column="age_" property="age"/>
<result column="name_" property="name" />
</resultMap>
动态sql在实际应用代码中解释*
**当我们需要传入多个sid,查询多个对象或者对象属性组合查询?如何使mybatis满足要求
这就需要使用条件了这时我们可以定义一个对象,包含所有的查询条件StudentQueryVo,使用sql片段来实现,动态的拼接sql语句
注意:
1:定义sql片段时尽量使用单表sql,这样可重用性才高
2:sql片段不要包含where****
实体类:
``
public class Student {
private Integer sid;
private String name;
private Integer age;
setter..
getter...
toString....
}
*StudentQueryVo查询类:*
public class StudentQueryVo {
//集合类型的值实例化,可以根据使用习惯在内部还是外部
//传入多个sid查询多个对象
private List<Integer> sids=new ArrayList<Integer>();
//传入多个name查询多个对象
private List<String> names=new ArrayList<String>();
//传入多个age查询多个对象
private List<Integer> ages=new ArrayList<Integer>();
//对象属性组合查询
private Student student;
setter..
getter...
toString....
}
SqlUtils工具类:
package com.leige.test;
import java.io.IOException;
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;
/**
* @author sqlsession工具类
*
*/
public class SqlUtils {
static SqlSessionFactory factory;
//静态加载session工厂
static{
InputStream inputStream;
try {
inputStream = Resources.getResourceAsStream("com/leige/config/configuration.xml");
//1:实例化sqlsessionfactory工厂
factory= new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
}
}
public static SqlSession getSession() {
try{
//开启session
return factory.openSession();
}catch(Exception e){
throw new RuntimeException(e);
}
}
/**
* @param session
* @param mapper
* @return
* 保证会话session一致,所以当做参数传过来
*/
public static Object getmaMapper(SqlSession session,Class mapper){
//注册映射接口
factory.getConfiguration().addMapper(mapper);
//返回操作实例
return session.getMapper(mapper);
}
}
测试类:
package com.leige.test;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import com.leige.domain.Student;
import com.leige.domain.StudentQueryVo;
public class App {
/**
* 测试使用resultMap
*/
@Test
public void testSelect(){
SqlSession session=SqlUtils.getSession();
//map查找
Student student=session.selectOne("Student.selectResultMap", 1);
//Student student=session.selectOne("Student.selectStudent", 1);
System.out.println(student);
session.close();
}
/**
* 测试sql片段
*/
@Test
public void testSelectSql(){
//获取session
SqlSession session=SqlUtils.getSession();
//实例多条件组合查询bean类
StudentQueryVo queryVo=new StudentQueryVo();
//设置多值查询,其他属性操作类似
queryVo.getSids().add(1);
queryVo.getSids().add(2);
queryVo.getSids().add(3);
//查询
List<Student> students=session.selectList("Student.selectMultiply",queryVo);
//输出
for(Student stu:students)
System.out.println(stu);
}
/**
* 测试sql变短多属性组合查询
*/
@Test
public void testSelectSql2(){
//获取session
SqlSession session=SqlUtils.getSession();
//实例多条件组合查询bean类
StudentQueryVo queryVo=new StudentQueryVo();
//设置多属性组合查询
Student student=new Student();
student.setAge(22);
student.setName("leige");
queryVo.setStudent(student);
queryVo.getSids().add(1);
queryVo.getSids().add(2);
//组合查询
List<Student> students=session.selectList("Student.selectMultiply",queryVo);
//输出
for(Student stu:students)
System.out.println(stu);
}
}