Mybatis接口编程方式实现增删改查

来源:互联网 发布:sem高级优化师认证 编辑:程序博客网 时间:2024/05/22 02:06

转载自Mybatis接口编程方式实现增删改查

Mybatis接口编程方式实现增删改查

前面一章【Mybatis】Mybatis入门概述及第一个Mybatis实例实现增删改查 ,已经搭建好了eclipse,mybatis,MySQL的环境,并且实现了一个简单的查询。请注意,这种方式是用SqlSession实例来直接执行已映射的SQL语句:

session.selectOne("com.mucfc.model.EmployeerMapper.findEmployeerByID", 1);

其实还有更简单的方法,而且是更好的方法,使用合理描述参数和SQL语句返回值的接口(比如EmployeerMapper.Java),这样现在就可以至此那个更简单,更安全的代码,没有容易发生的字符串文字和转换的错误.下面是详细过程:
本文要改成以接口类来实现增删改查
整个工程目录 :

这里写图片描述

本文示例工程免费下载
1.首先还是mybatis的配置文件mybatis-config.xml

<?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格式对应文件,从而使得主配置文件更加通用。这样对部署非常有用  -->       <properties resource="mysql.properties" />       <!-- 设置别名,一定要放在properties下面  -->      <typeAliases>          <typeAlias alias="Employeer" type="com.mucfc.model.Employeer"  />      </typeAliases>      <!-- 配置数据源相关的信息  -->      <environments default="development">          <environment id="development">              <transactionManager type="JDBC" />              <dataSource type="POOLED">          <!--     <property name="driver" value="com.mysql.jdbc.Driver"/>               <property name="url" value="jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8"/>               <property name="username" value="root"/>               <property name="password" value="christmas258@"/>  -->              <property name="driver" value="${driver}" />                  <property name="url" value="${url}" />                  <property name="username" value="${username}" />                  <property name="password" value="${password}" />               </dataSource>          </environment>      </environments>      <!-- 列出映射文件 -->      <mappers>          <mapper resource="com/mucfc/model/Employeer.xml" />      </mappers>  </configuration>  

其中配置文件mysql.properties

driver=com.mysql.jdbc.Driver  url=jdbc:mysql://localhost:3306/test?charset=utf8  username=root  password=christmas258@  

2.数据表对应的类Employeer.java

package com.mucfc.model;  import java.io.Serializable;  /**  * 雇员信息类  *@author linbingwen  *@time 2015.5.11  */  public class Employeer {      private Integer employeer_id;      private String employeer_name;      private Integer employeer_age ;      private String employeer_department;      private String employeer_worktype;      public Employeer() {          super();      }      public Integer getEmployeer_id() {          return employeer_id;      }      public void setEmployeer_id(Integer employeer_id) {          this.employeer_id = employeer_id;      }      public String getEmployeer_name() {          return employeer_name;      }      public void setEmployeer_name(String employeer_name) {          this.employeer_name = employeer_name;      }      public Integer getEmployeer_age() {          return employeer_age;      }      public void setEmployeer_age(Integer employeer_age) {          this.employeer_age = employeer_age;      }      public String getEmployeer_department() {          return employeer_department;      }      public void setEmployeer_department(String employeer_department) {          this.employeer_department = employeer_department;      }      public String getEmployeer_worktype() {          return employeer_worktype;      }      public void setEmployeer_worktype(String employeer_worktype) {          this.employeer_worktype = employeer_worktype;      }      @Override      public String toString() {          return "Employeer [employeer_id=" + employeer_id + ", employeer_name="                  + employeer_name + ", employeer_age=" + employeer_age                  + ", employeer_department=" + employeer_department                  + ", employeer_worktype=" + employeer_worktype + "]";      }  }  

然后是SQL语句的配置Employeer.xml

<?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="com.mucfc.mapper.EmployeerMapper">       <!-- 查找 -->       <select id="findEmployeerByID" parameterType="int" resultType="Employeer">       select* from `t_employeer` where employeer_id =#{employeer_id}       </select>        <!-- 插入 -->          <!-- useGeneratedKeys设置为"true"表明要MyBatis获取由数据库自动生成的主键;keyProperty="id"指定把获取到的主键值注入到Employeer的id属性 -->       <insert id="addEmployeer" parameterType="Employeer"      useGeneratedKeys="true" keyProperty="employeer_id">            insert into `t_employeer`(employeer_name,employeer_age,employeer_department,employeer_worktype)           values(#{employeer_name},#{employeer_age},#{employeer_department},#{employeer_worktype})        </insert>         <!-- 删除  -->      <delete id="deleteEmployeer" parameterType="int">            delete from `t_employeer` where employeer_id = #{employeer_id}        </delete>        <!-- 修改 -->        <update id="updateEmployeer" parameterType="Employeer">            update t_employeer set employeer_name = #{employeer_name},employeer_age= #{employeer_age},employeer_department = #{employeer_department}          ,employeer_worktype=#{employeer_worktype}  where employeer_id = #{employeer_id}        </update>     </mapper>  

注意com.mucfc.mapper.EmployeerMapper这个类是存在的,它是一个接口类,上一讲我们是使用com.mucfc.model.EmployeerMapper,而上一讲的这个类是不存在的
4.SQL语句映射类EmployeerMapper.java

package com.mucfc.mapper;  import com.mucfc.model.Employeer;  /**  * SQL语句映射类  * @author linbingwen  * @time 2015.5.11  */  public interface EmployeerMapper {      /**      * 注意要和Employeer.xml的方法名对应      */      public Employeer findEmployeerByID(int id);      /**      * 注意要和Employeer.xml的方法名对应      */      public void addEmployeer(Employeer employeer);      /**      * 注意要和Employeer.xml的方法名对应      */      public void deleteEmployeer(int id);      /**      * 注意要和Employeer.xml的方法名对应      */      public void updateEmployeer(Employeer employeer);  }  

5.测试:
(1)增加命令
上一讲【Mybatis】Mybatis入门概述及第一个Mybatis实例实现增删改查 中的方式:

/**  * 增加  */  public static void addEmployeer(Employeer employeer){      SqlSession session = null;      try {          session = sqlSessionFactory.openSession();           //返回值是记录条数               int resultCount = session.insert("com.mucfc.model.EmployeerMapper.addEmployeer", employeer );               System.out.printf("当前插入的employeer_id :%d    当前插入数据库中条数:%d " , employeer.getEmployeer_id() ,resultCount);  //获取插入对象的id               System.out.println("");             session.commit() ;             } finally {          session.close();      }  }  

改成以接口编程的方式:

/**  * 增加  */  public static void addEmployeer(Employeer employeer){      SqlSession session = null;      try {          session = sqlSessionFactory.openSession();          EmployeerMapper employeerMapper=session.getMapper(EmployeerMapper.class);          employeerMapper.addEmployeer(employeer);             session.commit() ;             } finally {          session.close();      }  }  

(2)删除命令
上一讲【Mybatis】Mybatis入门概述及第一个Mybatis实例实现增删改查 中的方式:

/**  * 删除  *   */  public static void deleteEmployeer(int id){      SqlSession session = null;      try {          session = sqlSessionFactory.openSession();           //返回值是记录条数             int resultCount=session.delete("com.mucfc.model.EmployeerMapper.deleteEmployeer",id);             System.out.println("当前删除数据库中条数: "+resultCount);  //获取插入对象的id               session.commit() ;             } finally {          session.close();      }  }  

改成以接口编程的方式:

/**  * 删除  *   */  public static void deleteEmployeer(int id){      SqlSession session = null;      try {          session = sqlSessionFactory.openSession();          EmployeerMapper employeerMapper=session.getMapper(EmployeerMapper.class);          employeerMapper.deleteEmployeer(id);             session.commit() ;             } finally {          session.close();      }  }  

(3)查找命令
上一讲【Mybatis】Mybatis入门概述及第一个Mybatis实例实现增删改查 中的方式:

/**  * 查找  */  public static void findEmployeerById(int id) {      SqlSession session = null;      try {          session = sqlSessionFactory.openSession();          Employeer employeer = (Employeer) session.selectOne(                  "com.mucfc.model.EmployeerMapper.findEmployeerByID", 1);          if (employeer == null)              System.out.println("null");          else              System.out.println(employeer);      } finally {          session.close();      }  }  

改成以接口编程的方式:

/**      * 查找      */      public static void findEmployeerById(int id) {          SqlSession session = null;          try {              session = sqlSessionFactory.openSession();              EmployeerMapper employeerMapper=session.getMapper(EmployeerMapper.class);              Employeer employeer=employeerMapper.findEmployeerByID(id);              if (employeer == null)                  System.out.println("null");              else                  System.out.println(employeer);          } finally {              session.close();          }      }  

(4)修改命令
上一讲【Mybatis】Mybatis入门概述及第一个Mybatis实例实现增删改查 中的方式:

/**  * 更改  */  public static void updateEmployeer(Employeer employeer){      SqlSession session = null;      try {          session = sqlSessionFactory.openSession();              session.update("com.mucfc.model.EmployeerMapper.updateEmployeer",employeer);                 session.commit() ;             } finally {          session.close();      }  }  

改成以接口编程的方式:

/**  * 更改  */  public static void updateEmployeer(Employeer employeer){      SqlSession session = null;      try {          session = sqlSessionFactory.openSession();           EmployeerMapper employeerMapper=session.getMapper(EmployeerMapper.class);          employeerMapper.updateEmployeer(employeer);             session.commit() ;             } finally {          session.close();      }  }  

这是一个完整的测试:

package com.mucfc.test;  import java.io.IOException;  import java.io.Reader;  import org.apache.ibatis.io.Resources;  import org.apache.ibatis.session.SqlSession;  import org.apache.ibatis.session.SqlSessionFactory;  import org.apache.ibatis.session.SqlSessionFactoryBuilder;  import com.mucfc.mapper.EmployeerMapper;  import com.mucfc.model.Employeer;  public class MybatisTest {      private static SqlSessionFactory sqlSessionFactory;      private static Reader reader;      static {          try {              reader = Resources.getResourceAsReader("mybatis-config.xml");              sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);          } catch (Exception e) {              e.printStackTrace();          }      }      /**      * 查找      */      public static void findEmployeerById(int id) {          SqlSession session = null;          try {              session = sqlSessionFactory.openSession();              EmployeerMapper employeerMapper=session.getMapper(EmployeerMapper.class);              Employeer employeer=employeerMapper.findEmployeerByID(id);              if (employeer == null)                  System.out.println("null");              else                  System.out.println(employeer);          } finally {              session.close();          }      }      /**      * 增加      */      public static void addEmployeer(Employeer employeer){          SqlSession session = null;          try {              session = sqlSessionFactory.openSession();              EmployeerMapper employeerMapper=session.getMapper(EmployeerMapper.class);              employeerMapper.addEmployeer(employeer);              session.commit() ;                    } finally {              session.close();          }      }      /**      * 删除      *       */      public static void deleteEmployeer(int id){          SqlSession session = null;          try {              session = sqlSessionFactory.openSession();              EmployeerMapper employeerMapper=session.getMapper(EmployeerMapper.class);              employeerMapper.deleteEmployeer(id);              session.commit() ;                    } finally {              session.close();          }      }      /**      * 更改      */      public static void updateEmployeer(Employeer employeer){          SqlSession session = null;          try {              session = sqlSessionFactory.openSession();               EmployeerMapper employeerMapper=session.getMapper(EmployeerMapper.class);              employeerMapper.updateEmployeer(employeer);              session.commit() ;                    } finally {              session.close();          }      }      public static void main(String[] args) {                                      Employeer employeer1=new Employeer();          employeer1.setEmployeer_name("李四");          employeer1.setEmployeer_age(23);          employeer1.setEmployeer_department("产品一部");          employeer1.setEmployeer_worktype("开发工程师");          Employeer employeer2=new Employeer();          employeer2.setEmployeer_name("张三");          employeer2.setEmployeer_age(30);          employeer2.setEmployeer_department("产品二部");          employeer2.setEmployeer_worktype("测试工程师");          Employeer employeer3=new Employeer();          employeer3.setEmployeer_name("小王");          employeer3.setEmployeer_age(22);          employeer3.setEmployeer_department("产品三部");          employeer3.setEmployeer_worktype("数据分析师");          Employeer employeer4=new Employeer();          employeer4.setEmployeer_name("明明");          employeer4.setEmployeer_age(22);          employeer4.setEmployeer_department("财会部");          employeer4.setEmployeer_worktype("财务人员");          //插入          addEmployeer(employeer1);          addEmployeer(employeer2);          addEmployeer(employeer3);          addEmployeer(employeer4);          findEmployeerById(26);          deleteEmployeer(27);          //更改          employeer2.setEmployeer_id(28);          employeer2.setEmployeer_age(21);          employeer2.setEmployeer_department("产品四部");          updateEmployeer(employeer2);      }  }  

测试结果:
插入了4条数据,ID为25~28
然后27号被删除
29号被修改

这里写图片描述

0 0