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

Posted 拒绝贫穷

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis学习总结—使用接口实现数据的增删改查相关的知识,希望对你有一定的参考价值。

在这一篇中,让我们使用接口来实现一个用户数据的增删改查。

完成后的项目结构如下图所示:

技术分享

在这里,person代表了一个用户的实体类。在该类中,描述了相关的信息,包括id、name、age、id_num信息。而personMapper则是该实体类的一个配置文件。需要注意的是,在上一篇博文中,namespace属性的值是其本身,而在这一篇中,使用的是接口。那么两者有什么区别呢?使用接口,那么相关的操作方法不用自己去实现,只需要调用该接口的相关的方法就能够实现相应的功能。

那么,在这里就有一个问题,接口如何实例化呢?直接new吗?这当然不行,在这里要想得到接口的实例,需要使用session的getmapper方法。然后就能够得到接口的实例,通过调用接口的相关方法,就能够实现相应的功能。在这里有一点需要注意的是,调用完方法之后,要记得调用session.commit()方法,将相应的结果保存于数据库中,另外,不要忘记调用close()方法来关闭session。

到这里,可能又有人要问了,那么这个接口与要操作的数据之间怎么保持联系呢?换句话说,我调用了这个方法,Mybatis怎么就知道这个方法是用来干什么的。其实在这里,有一点需要注意的就是,这个接口中的方法名必须与配置文件中的相对应属性的id保持一致。

好了到这里,让我们看看person实体类与该类的配置文件吧。

person.java

public class person {
	private int id;
	private int age;
	private String name;
	private String id_num;
	
	public person() {
		
	}
	
	public person(int id) {
		this.id = id;
	}
	
	public person(String name) {
		this.name = name;
	}

	public person(int id, int age, String name, String id_num) {
		super();
		this.id = id;
		this.age = age;
		this.name = name;
		this.id_num = id_num;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getId_num() {
		return id_num;
	}

	public void setId_num(String id_num) {
		this.id_num = id_num;
	}

	@Override
	public String toString() {
		return "person [id=" + id + ", age=" + age + ", name=" + name
				+ ", id_num=" + id_num + "]" + "\n";
	}

  personMapper.xml

<mapper namespace="cn.jiang.dao.personDao">
    <!-- save -->
    <insert id="save">
        insert into tb_person values(#{id} , #{name} , #{age} , #{id_num});
    </insert>
    
    <!-- delete -->
    <delete id="delete">
        delete from tb_person
        <where>
            <choose>
                <when test="id != 0">
                    id = #{id}
                </when>
                <when test="name != null">
                    name = #{name}
                </when>
                <when test="id_num != null">
                    id_num = #{id_num}
                </when>
            </choose>
        </where>
    </delete>
    
    <!-- update -->
    <update id = "update">
        update tb_person set name=#{name} , age = #{age} , id_num=#{id_num}
                         where id = #{id};
    </update>
    
    <!-- search -->
    <select id="search" resultType="cn.jiang.domain.person">
        select * from tb_person 
        <where>
            <choose>
                <when test="id != 0">
                    id = #{id}
                </when>
                <when test="name != null">
                    name = #{name}
                </when>
                <when test="id_num != null">
                    id_num = #{id_num}
                </when>
            </choose>
        </where>
    </select>
</mapper>

  在这里,mapper中的namespace属性使用的就是为接口,而不再是其xml文件。好,现在让我们来看看该接口吧。

     personDao.java

public interface personDao {
	//save
	public void save(person per);
	//delete
	public boolean delete(person per);
	//update
	public boolean update(person per);
	//search
	public List<person> search(person per);
}

  好了,虽说直接调用该接口的方法就能够实现相关的数据操作,但是,对其进行一些封装,还是能够方便以后的使用,同时也能够是代码更加简洁美观。现在让我们来看看对该接口实现的一个封装类。

public class PerDao {
	//save
		public void save(person per)
		{
			SqlSession session = MyBatisUnit.getSession();
			personDao dao = session.getMapper(personDao.class);
			
			dao.save(per);
			session.commit();
			session.close();
		}
		//delete
		public boolean delete(person per)
		{
			boolean result = false;
			SqlSession session = MyBatisUnit.getSession();
			personDao dao = session.getMapper(personDao.class);
			
			result = dao.delete(per);
		    session.commit();
		    session.close();
		    
		    return result;
		}
		//update
		public boolean update(person per)
		{
			boolean result = false;
			SqlSession session = MyBatisUnit.getSession();
			personDao dao = session.getMapper(personDao.class);
			
			result = dao.update(per);
			session.commit();
			session.close();
			
			return result;
		}
		//search
		public List<person> search(person per)
		{
			List<person> result = null;
			SqlSession session = MyBatisUnit.getSession();
			personDao dao = session.getMapper(personDao.class);
			
			result = dao.search(per);
			session.commit();
			session.close();
			return result;
		}
}

  好了,到这里,基本上就完成了。读者如果想了解MyBatisUnit类的具体功能以及源代码,请看上一篇博文《Mybatis的学习总结(一)——使用配置文件实现增删改查》。另外,要提醒的是,在使用MybatisUnit来调用getSession的时候,如果没有写config.xml配置文件,会抛出NullPointException。原因,请参照MyBatisUnit的源代码。

以上是关于Mybatis学习总结—使用接口实现数据的增删改查的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis学习笔记 之实现数据库的增删改查

mybatis实战教程(mybatis in action)之三:实现数据的增删改查

MYBATIS01_概述及优缺点快速搭建工程Mybatis的增删改查操作总结

web项目总结——通过jsp+servlet实现对oracle的增删改查功能

Mybatis 接口方式对数据的增删改查 一对一关联查询

超详细的JavaWeb用户的增删改查实现总结