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 }
原文地址:https://www.cnblogs.com/ccw95/p/6179941.html