• MyBatis的接口式编程Demo


      

     很久没细看过MyBatis了,时间一长就容易忘记。

    下面是一个接口式编程的例子。

    这里的例子一共分为4步:

    1 首先要有一个namespace为接口的全类名的映射文件,该例中是 IMyUser.xml
    2 然后在mybatis的容器(就是总的配置文件)里的mappers标签内
    引入第1步中的映射文件,这里是 IMyUser.xml
    3 通过SqlSession对象的getMapper(IMyUserDao.class)
    获取一个接口的代理对象
    4 调用代理对象的具体方法,也就是对应着 IMyUser.xml中的各个select,insert
    等标签,这些标签的id属性同时必须与接口中的方法名一一对应

     所需要的数据库表:

     1 -- Create table
     2 create table MYUSER
     3 (
     4   id            NUMBER not null,
     5   username      VARCHAR2(32) not null,
     6   password      VARCHAR2(128) not null,
     7   administrator VARCHAR2(5) not null
     8 );
     9 
    10 
    11 insert into myuser (ID, USERNAME, PASSWORD, ADMINISTRATOR)
    12 values ('1', 'weiyongle01', 'hr', 'hr');
    13 
    14 insert into myuser (ID, USERNAME, PASSWORD, ADMINISTRATOR)
    15 values ('352', 'weiyongle352', 'hr', 'hr');
    16 
    17 insert into myuser (ID, USERNAME, PASSWORD, ADMINISTRATOR)
    18 values ('353', 'weiyongle353', 'hr', 'hr');
    19 
    20 insert into myuser (ID, USERNAME, PASSWORD, ADMINISTRATOR)
    21 values ('354', '1', 'hr', 'hr');
    22 
    23 insert into myuser (ID, USERNAME, PASSWORD, ADMINISTRATOR)
    24 values ('355', 'weiyongle355', 'hr', 'hr');
    25 
    26 insert into myuser (ID, USERNAME, PASSWORD, ADMINISTRATOR)
    27 values ('359', 'weiyongle359', 'hr', 'hr');
    28 
    29 insert into myuser (ID, USERNAME, PASSWORD, ADMINISTRATOR)
    30 values ('360', 'weiyongle360', 'hr', 'wyl');
    31 
    32 insert into myuser (ID, USERNAME, PASSWORD, ADMINISTRATOR)
    33 values ('361', 'weiyongle361', 'hr', 'hr');
    34 
    35 insert into myuser (ID, USERNAME, PASSWORD, ADMINISTRATOR)
    36 values ('362', 'weiyongle362', 'hr', 'hr');
    37 
    38 insert into myuser (ID, USERNAME, PASSWORD, ADMINISTRATOR)
    39 values ('363', 'weiyongle363', 'hr', 'hr');
    40 
    41 insert into myuser (ID, USERNAME, PASSWORD, ADMINISTRATOR)
    42 values ('364', 'weiyongle364', 'hr', 'hr');
    43 
    44 insert into myuser (ID, USERNAME, PASSWORD, ADMINISTRATOR)
    45 values ('365', 'weiyongle365', 'hr', 'hr');
    46 
    47 insert into myuser (ID, USERNAME, PASSWORD, ADMINISTRATOR)
    48 values ('390', 'weiyongle359', 'hr', 'hr');

    1 MyBatis配置文件,Configuration.xml

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!-- Copyright 2009-2016 the original author or authors. Licensed under the 
     3     Apache License, Version 2.0 (the "License"); you may not use this file except 
     4     in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 
     5     Unless required by applicable law or agreed to in writing, software distributed 
     6     under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES 
     7     OR CONDITIONS OF ANY KIND, either express or implied. See the License for 
     8     the specific language governing permissions and limitations under the License. -->
     9 <!DOCTYPE configuration
    10     PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    11     "http://mybatis.org/dtd/mybatis-3-config.dtd">
    12 
    13 <configuration>
    14     <settings>
    15         <setting name="useGeneratedKeys" value="false" />
    16         <setting name="useColumnLabel" value="true" />
    17     </settings>
    18 
    19     <!-- <typeAliases> <typeAlias alias="UserAlias" type="org.apache.ibatis.submitted.complex_property.User"/> 
    20         </typeAliases> -->
    21 
    22     <environments default="development">
    23         <environment id="development">
    24             <transactionManager type="JDBC">
    25                 <property name="" value="" />
    26             </transactionManager>
    27             <dataSource type="UNPOOLED">
    28                 <!-- Oracle数据库配置 -->
    29                 <property name="driver" value="oracle.jdbc.driver.OracleDriver" />
    30                 <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl2" />
    31                 <property name="username" value="hr" />
    32                 <property name="password" value="hr" />
    33             </dataSource>
    34         </environment>
    35     </environments>
    36 
    37     <!-- 配置的实体类 20161106添加 -->
    38     <mappers>
    39         <!-- <mapper resource="org/apache/ibatis/submitted/complex_property/User.xml" /> -->
    40         <!-- 这个路径是从src下开始的,即以src作为根目录的,
    41             这点和Resources.getResourcesAsStream("xx")里的xx一样,都是指向的具体文件的路径
    42             ,都是以src为根目录 -->
    43         <mapper resource="com/test/mybatis/config/MyUser.xml" />
    44         <!-- 接口式编程 -->
    45         <!-- <mapper class="com.test.mybatis.dao.interf.IMyUserDao"/> -->
    46         <mapper resource="com/test/mybatis/config/IMyUser.xml" />
    47     </mappers>
    48 
    49 </configuration>

    2 IMyUser.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!-- Copyright 2009-2016 the original author or authors. Licensed under the 
     3     Apache License, Version 2.0 (the "License"); you may not use this file except 
     4     in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 
     5     Unless required by applicable law or agreed to in writing, software distributed 
     6     under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES 
     7     OR CONDITIONS OF ANY KIND, either express or implied. See the License for 
     8     the specific language governing permissions and limitations under the License. -->
     9 <!DOCTYPE mapper
    10     PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    11     "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    12 <!-- MyBatis接口式编程 -->
    13 <!-- 这里的namespace一定要是接口的全类名,这样就能够保证该mapper的唯一性 -->
    14 <mapper namespace="com.test.mybatis.dao.interf.IMyUserDao">
    15     <!-- select标签里的id属性值 getUser 对应着 上面namespace里的方法,
    16         实际上就是接口里定义的方法 -->
    17     <select id="getUser"  resultType="com.test.mybatis.entity.MyUser" parameterType="int">
    18         select * from MyUser where id = #{id}
    19     </select>
    20     <!-- select标签里的id属性值 getUserbyUser 对应着 上面namespace里的方法,
    21         实际上就是接口里定义的方法 -->
    22     <select id="getUserbyUser"  parameterType="com.test.mybatis.entity.MyUser" resultType="com.test.mybatis.entity.MyUser" >
    23         select * from MyUser 
    24         where 1=1 
    25         <!-- if 标签里的 test的属性值 username实际上是指的是
    26          parameterType的属性值  com.test.mybatis.entity.MyUser 
    27          这个类里的一个成员属性,用于getter和setter方法,
    28          不是之前理解的对应于数据库里的字段,还有username !='' 
    29            一定要写上,如果不写的话那么这个String类型的username成员变量
    30          就会被MyBatis框架默认为"",从而可能会影响这里配置的slq的逻辑,
    31          从而查询出来的结果可能会与我们自己设想中的不一样 -->
    32         <if test="username != null and username !='' ">
    33             AND username = #{username}
    34           </if>
    35           <if test="administrator != null and username !='' ">
    36             AND administrator = #{administrator}
    37           </if>
    38     </select>
    39     
    40     <delete id="deleteUser" parameterType="String">
    41         delete from MyUser where id = #{id}
    42     </delete>
    43 </mapper>

    3.IMyUserDao.java

     1 package com.test.mybatis.dao.interf;
     2 
     3 import com.test.mybatis.entity.MyUser;
     4 
     5 /**
     6  * MyBatis接口式编程Demo
     7  * @author Wei
     8  * @time  2017年3月23日 下午1:26:21
     9  */
    10 public interface IMyUserDao {
    11     public MyUser getUser(int id);
    12     public MyUser getUserbyUser(MyUser user);
    13     public void deleteUser(String username);
    14 }

    4. IMyUserTest.java

     1 package com.test.mybatis.dao.interf;
     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 import com.test.mybatis.entity.MyUser;
    11 
    12 /**
    13  * 接口式编程的测试类
    14  * @author Wei
    15  * @time  2017年3月23日 下午2:26:22
    16  */
    17 public class IMyUserTest {
    18 
    19     public IMyUserTest() {
    20         // TODO Auto-generated constructor stub
    21     }
    22     
    23     public static void main(String[] args) {
    24         InputStream is = null;
    25         SqlSessionFactory factory = null;
    26         SqlSession sqlsession = null;
    27         try {
    28             is = Resources.getResourceAsStream("com/test/mybatis/config/Configuration.xml");
    29             factory = new SqlSessionFactoryBuilder().build(is);
    30             sqlsession = factory.openSession();
    31             /**
    32              * 获取接口,实际上是通过代理模式来获取的代理对象
    33              * 1 首先要有一个namespace为接口的全类名的映射文件,该例中是 IMyUser.xml
    34              * 2 然后在mybatis的容器(就是总的配置文件)里的mappers标签内
    35              * 引入第1步中的映射文件,这里是 IMyUser.xml
    36              * 3 通过SqlSession对象的getMapper(IMyUserDao.class)
    37              * 获取一个接口的代理对象
    38              * 4 调用代理对象的具体方法,也就是对应着 IMyUser.xml中的各个select,insert
    39              * 等标签,这些标签的id属性同时必须与接口中的方法名一一对应
    40              */
    41             IMyUserDao dao = sqlsession.getMapper(IMyUserDao.class);
    42             MyUser user = new MyUser();
    43             user.setUsername("weiyongle363");
    44 //            user.setAdministrator("wyl");
    45             //调用接口的方法
    46             user = dao.getUserbyUser(user);//正常
    47 //            user = dao.getUser(361);//正常运行
    48 //            user = dao.getUser(355);
    49 //            MyUser user = sqlsession.selectOne("com.test.mybatis.dao.interf.IMyUserDao.getUser",1);
    50             if(user!=null){
    51                 System.out.println(user.toString());
    52             }else{
    53                 System.out.println("没有查询到结果");
    54             }
    55             
    56         } catch (IOException e) {
    57             // TODO Auto-generated catch block
    58             e.printStackTrace();
    59         }
    60     }
    61 }

     执行结果:

  • 相关阅读:
    菜单栏与功能工具栏
    信息与编码
    opencv颜色体系认知
    团队-科学计算器-开发文档
    CSS3动画
    Font Awesome 4.0.3 字体图标完美兼容IE7
    Bootstrap+Thinkphp3.2+Auth认证+jquery-validator后台
    Wordpress主题中常用代码总结
    Wordpress 常用代码解释
    wordpress一些常用代码
  • 原文地址:https://www.cnblogs.com/Sunnor/p/6605194.html
Copyright © 2020-2023  润新知