• 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 }
  • 相关阅读:
    ffmpeg常用命令集合
    Django传文件(FILES用法)
    Flask传文件(files用法)
    docker 部署redis服务
    tomcat启动报错ContainerBase.addChild: start
    Echarts折线图 y轴刻度数值与实际值不符解决方法
    春招日记
    Leetcode5700. 使所有区间的异或结果为零(DP)
    VS2015拖动调整代码窗口奔溃
    图床搭建
  • 原文地址:https://www.cnblogs.com/ccw95/p/6179941.html
Copyright © 2020-2023  润新知