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

  1. 云栖社区>
  2. 博客>
  3. 正文

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

waj清风 2018-12-18 16:13:11 浏览4356
展开阅读全文

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

?
1
session.selectOne("com.mucfc.model.EmployeerMapper.findEmployeerByID", 1);
其实还有更简单的方法,而且是更好的方法,使用合理描述参数和SQL语句返回值的接口(比如EmployeerMapper.java),这样现在就可以至此那个更简单,更安全的代码,没有容易发生的字符串文字和转换的错误.下面是详细过程:

本文要改成以接口类来实现增删改查

整个工程目录 :

image

本文示例工程免费下载

1、首先还是mybatis的配置文件mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
br>PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">


<!-- 元素允许在主配置文件之外提供一个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>  


其中配置文件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" ?>
br>"http://mybatis.org/dtd/mybatis-3-mapper.dtd">


 <!-- 查找 -->  
 <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>    
   


?
1

注意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实例实现增删改查 中的方式:

/**

  • 增加
    */

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号被修改

image

网友评论

登录后评论
0/500
评论
waj清风
+ 关注