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

林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka

前面一章【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="[email protected]"/>  -->
			<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
[email protected]

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

时间: 2024-08-21 20:06:35

【Mybatis】Mybatis接口编程方式实现增删改查的相关文章

Mybatis通过接口的方式实现增删改查

导入jar包 [mybatis] [oracle] 生成数据库 1.添加Mybatis的配置文件mybatis-config.xml 在src目录下创建一个mybatis-config.xml文件,如下图所示: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" &q

通用DAO之MyBatis封装,封装通用的增删改查(二)

曾经发过一篇文章,大概写的就是阿海多么多么厉害,见到某位同事在Hibernate的基础上封装了一下,就以一己之力开发什么什么框架,最后写了个超大的一坨的事. 那么,后续篇来了.阿海不是自负之人,当之前的CRUD框架并没有达到理想的结果时,阿海转向了Mybatis封装.别问我为什么不是Hibernate.我本来就不喜欢Hibernate,即使在之前的一家公司一直被强制性的约束使用Hibernate时,也没有对Hibernate产生什么真正的好感,反而屡次发现了Hibernate的一些问题. 或许是

Dynamics CRM OData方式进行增删改查时报错的问题

今天在通过OData终结点update记录的时候报"Error processing request stream. The request should be a valid top-level resource object",经过谷歌查询后发现是属性赋值时格式不对,其实从英文的字面意思也能猜出一二,原始代码如下面 var updateEntity = new Object(); updateEntity.sc_bizState = EMEntityState.complete ;

Mybatis学习总结(二)—使用接口实现数据的增删改查

在这一篇中,让我们使用接口来实现一个用户数据的增删改查. 完成后的项目结构如下图所示: 在这里,person代表了一个用户的实体类.在该类中,描述了相关的信息,包括id.name.age.id_num信息.而personMapper则是该实体类的一个配置文件.需要注意的是,在上一篇博文中,namespace属性的值是其本身,而在这一篇中,使用的是接口.那么两者有什么区别呢?使用接口,那么相关的操作方法不用自己去实现,只需要调用该接口的相关的方法就能够实现相应的功能. 那么,在这里就有一个问题,接

通用DAO之MyBatis封装,封装通用的增删改查(三)

曾将发布过俩篇关于Mybatis封装的文章,当时曾曾承诺过当测试没有问题后阿海会整理一下然后将原代码发布出来. 那么今天正好朋友找我要一份那套mybatis封装的源码,我便整理了一份,想想这么长时间了并没有发现什么明显的bug,于是决定将它发出来. 喜欢的朋友可以在这里下载: http://aiyiupload.oss-cn-beijing.aliyuncs.com/blog/img/2016/06/28/15/6d69ad50-ab53-4f4f-b4e7-1fed010bfdb9.rar 关

mybatis映射文件之基本的增删改查

借之前配置好的环境: 1.首先在Employee .java中加上有参的构造器和无参的构造器. 2.采用mapper中的class属性配置映射文件. <mappers> <mapper class="com.gong.mybatis.dao.EmployeeMapper" /> </mappers> 3.EmployeeMapper.java package com.gong.mybatis.dao; import com.gong.mybatis.

Oracle+mybatis实现对数据的简单增删改查

第一步:--创建一个表空间:名字叫 mybatis,建在D盘下的date文件夹下: 第二步:创建用户,名字叫  lisi  ,密码为  :123456 第三步:给用户授权: 第四步:我们在    lisi  用户下创建一个emp表: 随便插入几个值: (这个表在网上有,可以扒下来) 第五步:(这里用的是eclipse)打开eclipse建立一个maven项目,在网上maven仓库中搜索mybatis导包 我们用3.4.6这个: 将这段代码粘在刚才在eclipse中建的项目的pom.xml中<必须

Spring mvc整合mybatis基于mysql数据库实现用户增删改查及其分页显示的完整入门实例【转】

Spring mvc整合mybatis例子, 基于mysql数据库实现对用户的增.删.改.查,及分页显示的完整例子. 查询显示用户 添加用户 更新用户 官方验证: 项目截图 必须修改applicationContext.xml中mysql的配置为本地的,否则启动失败. 另外jar包多一个ehcache.jar无关紧要,删除即可. 1. 使用阿里巴巴Druid连接池(高效.功能强大.可扩展性好的数据库连接池.监控数据库访问性能.支持Common-Logging.Log4j和JdkLog,监控数据库

5、Spring+Struts2+MyBatis+分页(无代理)增删改查

1.创建如下项目结构 2.在src下的com.entity包下创建Dept.java 1 package com.entity; 2 /** 3 * 部门表 4 * @author Holly老师 5 * 6 */ 7 public class Dept { 8 private Integer deptno; //部门编号 9 private String dname; //部门名称 10 private String loc; //位置 11 12 13 public Dept() { 14