Mybatis——代理开发方式
一、全局配置文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 3 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 4 <configuration> 5 <!-- 获取数据库配置信息db.properties ,优先读取<property>节点中配置的属性值,再次读取resource指向的外部文件属性,当属性名称重复定义时,resource中的属性值将覆盖<property>节点中配置的属性值--> 6 <properties resource="db.properties"> 7 <property name="password" value="tiger"/> 8 </properties> 9 10 <!--settings:全局配置信息,开启二级缓存、延迟加载等 --> 11 <!-- <settings></settings> --> 12 13 <!-- typeAliases:定义别名 --> 14 <typeAliases> 15 <!-- 单个定义别名 --> 16 <!-- <typeAlias type="com.neuedu.model.Emp" alias="Emp"/> --> 17 18 <!-- 批量定义别名:默认别名为类名(不区分大小) ,例如权限定类名com.neuedu.model.Emp,其别名为Emp或emp--> 19 <package name="com.neuedu.model"/> 20 </typeAliases> 21 22 <!-- 项目环境 --> 23 <environments default="development"> 24 <environment id="development"> 25 <!-- 事务管理:JDBC、MANAGED --> 26 <transactionManager type="JDBC"/> 27 <!-- 数据源:UNPOOLED 、POOLED、JNDI--> 28 <dataSource type="POOLED"> 29 <property name="driver" value="${driver}"/> 30 <property name="url" value="${url}"/> 31 <property name="username" value="${username}"/> 32 <property name="password" value="${password}"/> 33 </dataSource> 34 </environment> 35 </environments> 36 <!-- 映射文件 --> 37 <mappers> 38 <!-- 引入单个mapper文件 --> 39 <mapper resource="com/neuedu/dao/EmpMapper.xml"/> 40 41 <!-- 引入单个mapper文件:(基于mapper代理实现方式) --> 42 <!-- <mapper class="com.neuedu.dao.mapper.EmpMapper"/> --> 43 44 <!-- 批量引入所有mapper文件:(基于mapper代理实现方式) --> 45 <package name="com.neuedu.dao.mapper"/> 46 </mappers> 47 48 </configuration>
注意:mappers中运用代理的方式实现
二、建立接口,该接口中的方法要与mapper中对应
1 package com.neuedu.dao.mapper; 2 3 import com.neuedu.model.Emp; 4 5 public interface EmpMapper { 6 7 //<select id="selectEmpByEmpno" parameterType="int" resultType="Emp"> 8 public Emp selectEmpByEmpno(int empno); 9 10 //<insert id="insertEmp" parameterType="com.neuedu.model.Emp"> 11 public int insertEmp(Emp emp); 12 13 //<update id="updateEmp" parameterType="com.neuedu.model.Emp"> 14 public int updateEmp(Emp emp); 15 16 //<delete id="deleteEmpByEmpno" parameterType="int"> 17 public int deleteEmpByEmpno(int empno); 18 19 }
注意:
1.EmpMapper.java与EmpMapper.xml的名称必须一致
2.EmpMapper.xml中<mapper namespace="com.neuedu.dao.mapper.EmpMapper">的namespace必须指向与其匹配的接口
3.EmpMapper.java接口在定义过程中:
① 方法名称必须与SQL语句的id名称一致
② 方法的参数类型必须与SQL语句的parameterType一致
③ 方法的返回值类型必须与SQL语句的resultType一致
三、建立mapper.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 4 <mapper namespace="com.neuedu.dao.mapper.EmpMapper"> 5 <!-- 6 <select> : 定义查询select语句 7 id: 唯一标识符 8 parameterType:参数类型 9 resultType:返回值类型 10 #{}:占位符,类似于preparedStatement中的"?"占位符,当仅包含一个参数时,占位符中的名称可自定义 11 --> 12 <select id="selectEmpByEmpno" parameterType="int" resultType="Emp"> 13 select * from emp where empno=#{empno} 14 </select> 15 16 <!-- 17 <insert>:定义新增insert语句 18 id: 唯一标识符 19 parameterType:参数类型 20 21 默认返回值:影响行数 22 --> 23 <insert id="insertEmp" parameterType="com.neuedu.model.Emp"> 24 insert into emp(empno,ename,job) values(SEQ_EMP.NEXTVAL,#{ename},#{job}) 25 26 <!-- 返回主键值: 将当前获取的序列值注入到参数emp对象的empno属性中 --> 27 <selectKey keyProperty="empno" order="AFTER" resultType="int"> 28 select SEQ_EMP.Currval from dual 29 </selectKey> 30 </insert> 31 <!-- 32 <update>:定义更新update语句 33 34 默认返回值:影响行数 35 --> 36 <update id="updateEmp" parameterType="com.neuedu.model.Emp"> 37 update emp set ename=#{ename},job=#{job} where empno=#{empno} 38 </update> 39 40 <!-- 41 <delete>:定义删除delete语句 42 43 默认返回值:影响行数 44 --> 45 <delete id="deleteEmpByEmpno" parameterType="int"> 46 delete from emp where empno=#{empno} 47 </delete> 48 49 </mapper>
四、测试:
1 package com.neuedu.dao.mapper; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 6 import org.apache.ibatis.io.Resources; 7 import org.apache.ibatis.session.SqlSession; 8 import org.apache.ibatis.session.SqlSessionFactory; 9 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 10 11 import com.neuedu.model.Emp; 12 13 public class Test { 14 15 public static void main(String[] args) throws IOException { 16 17 //1.加载全局配置文件 18 InputStream input = Resources.getResourceAsStream("sqlMapConfig.xml"); 19 20 //2.获取SqlSessionFactory对象 21 SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(input); 22 23 //3.获取SqlSession接口 24 SqlSession session = ssf.openSession(); 25 26 //4.获取mapper代理对象 27 EmpMapper dao = session.getMapper(EmpMapper.class);//注意此处!!得到的是对应接口代理 28 29 //查询 30 Emp emp = dao.selectEmpByEmpno(6666); 31 System.out.println(emp); 32 33 34 //新增 35 Emp temp = new Emp(); 36 temp.setEname("tom"); 37 temp.setJob("程序员"); 38 //boolean result = dao.insertEmp(temp); 39 //System.out.println("处理结果:" + result +" 当前用户的主键empno=" + temp.getEmpno()); 40 41 //修改 42 Emp temp2 = new Emp(); 43 temp2.setEname("tomtom"); 44 temp2.setJob("猿(媛)"); 45 temp2.setEmpno(24); 46 //boolean result2 = dao.updateEmp(temp2); 47 //System.out.println("处理结果:" + result2); 48 49 //删除 50 //boolean result3 = dao.deleteEmp(24); 51 //System.out.println("处理结果:" + result3); 52 } 53 54 }