系统框架中,dao层的代码时被业务层公用的
1.写实体类 2. 写xml文件 3. 写dao层的接口
接口EmpDaoInter
package com.mybatis.dahua.Dao; import java.util.HashMap; import java.util.List; public interface EmpDaoInter { List<HashMap<String,String>> listEmp(); List<HashMap<String, String>> listEmpDept(); }配置emp.xml,sql的id值为接口的方法名
<?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,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的 4 例如namespace="me.gacl.mapping.userMapper"就是me.gacl.mapping(包名)+userMapper(userMapper.xml文件去除后缀) 5 --> <!-- namespace="接口的路径"--> <mapper namespace="com.mybatis.dahua.Dao.EmpDaoInter"> <!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复 使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型 resultType="me.gacl.domain.User"就表示将查询结果封装成一个User类的对象返回 User类就是users表所对应的实体类 --> <!-- 自定义结果集--> <resultMap id="resultEmp" type="hashmap"> <result column="id" property="empid"></result> <result column="name" property="name"></result> <result column="salary" property="salary"></result> <result column="deptId" property="deptId"></result> </resultMap> <resultMap id="resultEmpDept" type="hashmap"> <result column="id" property="empid"></result> <result column="name" property="name"></result> <result column="salary" property="salary"></result> <result column="bumen" property="bumen"></result> </resultMap> <!-- id的值为接口的方法名--> <select id="listEmp" resultMap="resultEmp" > select id, name, salary, deptId from staff </select> <select id="listEmpDept" resultMap="resultEmpDept"> select s.id, s.name, s.salary, b.bumen from staff s, bumen b where s.deptId = b.detpId </select> </mapper>配置完emp.xml,切记要在resoursce下的配置文件中注册
配置文件如下:
<?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> <properties resource="db.properties" ></properties> <settings> <setting name="cacheEnabled" value="true"/> <!-- 开启延迟加载 --> <setting name="lazyLoadingEnabled" value="true"/> <!-- 设置加载的数据是按需还是全部 --> <setting name="aggressiveLazyLoading" value="true"/> </settings> <typeAliases> <!-- 别名--> <package name="com.mybatis.dahua.pojo"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <!-- 配置数据库连接信息 --> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> </environments> <mappers> <!-- 注册userMapper.xml文件, userMapper.xml位于me.gacl.mapping这个包下,所以resource写成me/gacl/mapping/userMapper.xml--> <mapper resource="com/mybatis/dahua/Dao/userMapper.xml"/> <mapper resource="com/mybatis/dahua/Dao/empMapper.xml"/> <mapper resource="com/mybatis/dahua/Dao/emp.xml"/> </mappers> </configuration>在测试类中测试,测试代码如下:
public class EmpDemo { SqlSession session = null; @Before public void test(){ //引入conf.xml文件 String conf = "conf.xml"; Reader reader = null; try { reader = Resources.getResourceAsReader(conf); } catch (IOException e) { e.printStackTrace(); } SqlSessionFactoryBuilder sfb = new SqlSessionFactoryBuilder(); SqlSessionFactory sf = sfb.build(reader); session = sf.openSession(); } @Test public void test1(){ EmpDaoInter mapper = session.getMapper(EmpDaoInter.class); List<HashMap<String, String>> hashMaps = mapper.listEmp(); for(int i = 0;i < hashMaps.size(); i++){ HashMap map = hashMaps.get(i); int empid = (int)map.get("empid"); String name = (String)map.get("name"); double salary = (Double)map.get("salary"); System.out.println(empid+"\t"+name+"\t"+salary); } } }测试结果如上,
