一,首先加入mybatis-3.2.3.jar和ojdbc6.jar到项目中的lib文件夹下。
二,
针对sql建立以上结构,
1, Configuration.xml 是mybatis的一个配置文件:
<?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>
<!-- 默认是在src目录下 -->
<properties resource="properties/jdbc.properties"></properties>
<!-- <settings>
<setting name="cacheEnabled" value="true"/>
lazyLoadingEnabled:true使用延迟加载,false禁用延迟加载。默认为true;
aggressiveLazyLoading:true启用时,当延迟加载开启时访问对象中一个懒对象属性时, 将完全加载这个对象的所有懒对象属性。
false,当延迟加载时,按需加载对象属性(即访问对象中一个懒对象属性,不会加载对象中其他的懒对象属性)。
默认为true
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
</settings>-->
<typeAliases>
<!-- 别名 -->
<typeAlias alias="Emp" type="hwt.pojo.Emp"/>
<typeAlias alias="Dep" type="hwt.pojo.Dep"/>
</typeAliases>
<!-- 配置环境,可以配置多个环境,默认default指定默认环境 -->
<environments default="development">
<environment id="development">
<!-- 事务管理有JDBC和MANAGED两种 -->
<transactionManager type="JDBC" />
<!-- 数据源UNPOOLED,POOLED,JNDI -->
<dataSource type="POOLED">
<property name="driver" value="${driverClassName}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<!-- 对于mapper.xml映射文件的配置 -->
<mappers>
<mapper resource="hwt/Mapper/EmpMapper.xml"/>
<mapper resource="hwt/Mapper/DepMapper.xml"/>
</mappers>
</configuration>
2,pojo类
Emp:
package hwt.pojo;
public class Emp {
private int empid;
private String empname;
private Dep dep; //部门类,作为多对一的字段
public int getEmpid() {
return empid;
}
public void setEmpid(int empid) {
this.empid = empid;
}
public String getEmpname() {
return empname;
}
public void setEmpname(String empname) {
this.empname = empname;
}
public Dep getDep() {
return dep;
}
public void setDep(Dep dep) {
this.dep = dep;
}
}
Dep:
package hwt.pojo;
import java.util.List;
public class Dep {
private int depid;
private String depname;
private List<Emp> emps; //作为一对多的字段使用
public int getDepid() {
return depid;
}
public void setDepid(int depid) {
this.depid = depid;
}
public String getDepname() {
return depname;
}
public void setDepname(String depname) {
this.depname = depname;
}
public List<Emp> getEmps() {
return emps;
}
public void setEmps(List<Emp> emps) {
this.emps = emps;
}
}
3, 每一个Mapper.xml对应于一个mapper接口
EmpMapper.jara
public interface EmpMapper {
/**
* 得到所有的emp
* @return
*/
public List<Emp> getAllEmps();
/**
* 根据empId得到Emp对象
* @param empId
* @return
*/
public List<Emp> getEmpsByDepId(int depId);
/**
* 根据EmpId得到Emp对象
* @param empid
* @return
*/
public Emp getEmpsById(@Param("empid")int empid);
/**
* 根据empName模糊查询
* @param empname
* @return
*/
public List<Emp> getEmpsByName(@Param("empname")String empname);
}
EmpMapper.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="hwt.Mapper.EmpMapper">
<resultMap id="empResult" type="Emp">
<id property="empid" column="empid" />
<result property="empname" column="empname"/>
<!-- 多对一的关系,注意resultMap的名字为 引用的namespace+resultMap的Id -->
<association property="dep" column="depid" javaType="Dep" resultMap="hwt.Mapper.DepMapper.depResult"/>
</resultMap>
<select id="getAllEmps" resultMap="empResult">
<![CDATA[
select * from emp e join dep d on e.depid = d.depid
]]>
</select>
<select id="getEmpsByDepId" parameterType="int" resultType="Emp">
select * from emp where depid = #{id}
</select>
<select id="getEmpsById" parameterType="int" resultType="Emp">
select * from emp where empid = ${empid}
</select>
<select id="getEmpsByName" parameterType="string" resultType="Emp">
<!-- 模糊查询的方法:1,使用${};
2,CONCAT(CONCAT('%', #{empname}), '%'); -->
select * from emp where empname like '%${empname}%'
</select>
</mapper>
DepMapper.java
package hwt.Mapper;
public interface DepMapper {
}
DepMapper.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="hwt.Mapper.DepMapper">
<resultMap type="Dep" id="depResult">
<id property="depid" column="DEPID"/>
<result property="depname" column="DEPNAME"/>
<!-- 一对多映射,property:pojo类中对应的属性,ofType:对应的类型,cloumn:根据此字段来进行查询,select:根据什么来查询 -->
<collection property="emps" ofType="Emp" column="depid" select="hwt.Mapper.EmpMapper.getEmpsByDepId"></collection>
</resultMap>
</mapper>
sessionFactoryUtils:
public class SessionFactoryUtils {
private static SqlSessionFactoryBuilder sessionFactoryBuilder;
private static SqlSessionFactory sessionFactory;
static{
try {
Reader reader = Resources.getResourceAsReader("properties/configuration.xml");
sessionFactoryBuilder = new SqlSessionFactoryBuilder();
sessionFactory = sessionFactoryBuilder.build(reader,"development");
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 得到sessionFactory
* @return
*/
public static SqlSessionFactory getSessionFactory(){
return sessionFactory;
}
/**
* 得到sqlSession
* @return
*/
public static SqlSession getSession(){
return sessionFactory.openSession();
}
}
测试类:
public class Test {
public static void main(String[] args) {
SqlSession session = SessionFactoryUtils.getSession();
//List<Emp> emps = session.selectList("hwt.Mapper.EmpMapper.selectAllEmp");
EmpMapper empMapper = session.getMapper(EmpMapper.class);
List<Emp> emps = empMapper.getAllEmps();
for (Emp emp : emps) {
System.out.println(emp.getDep().getDepname());
}
System.out.println("++++++");
Emp emp = empMapper.getEmpsById(1);
System.out.println(emp.getEmpname());
System.out.println("++++++");
List<Emp> emps2 = empMapper.getEmpsByName("小");
for (Emp emp2 : emps2) {
System.out.println(emp2.getEmpname());
}
}
}