4

MyBatis Tutorial: Part-2: CRUD operations Using Annotations

 2 years ago
source link: https://www.sivalabs.in/2012/10/mybatis-tutorial-part-2-crud-operations-using-annotations/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

MyBatis Tutorial: Part-2: CRUD operations Using AnnotationsSkip to content

Share this:

In this post I will explain how to perform CRUD operations using MyBatis Annotation support without need of Queries configuration in XML mapper files.

MyBatis Tutorial: Part1 – CRUD Operations

MyBatis Tutorial: Part-2: CRUD operations Using Annotations

MyBatis Tutorial: Part 3 – Mapping Relationships

MyBatis Tutorial : Part4 – Spring Integration

Step#1: Create a table BLOG and a java domain Object Blog.

CREATE TABLE  blog 
(
      blog_id int(10) unsigned NOT NULL auto_increment,
      blog_name varchar(45) NOT NULL,
      created_on datetime NOT NULL,
      PRIMARY KEY  (blog_id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
package com.sivalabs.mybatisdemo.domain;

import java.util.Date;

public class Blog 
{
     private Integer blogId;
     private String blogName;
     private Date createdOn;
     
     //Seeters and getters
     
     @Override
     public String toString() {
      return "Blog [blogId=" + blogId + ", blogName=" + blogName
        + ", createdOn=" + createdOn + "]";
     }
}

Step#2: Create UserMapper.java interface with SQL queries in Annotations.

package com.sivalabs.mybatisdemo.mappers;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import com.sivalabs.mybatisdemo.domain.Blog;

public interface BlogMapper 
{
    @Insert("INSERT INTO BLOG(BLOG_NAME, CREATED_ON) 
             VALUES(#{blogName}, #{createdOn})")
    @Options(useGeneratedKeys=true, keyProperty="blogId")
    public void insertBlog(Blog blog);
 
    @Select("SELECT BLOG_ID AS blogId, BLOG_NAME as blogName, 
             CREATED_ON as createdOn FROM BLOG WHERE BLOG_ID=#{blogId}")
    public Blog getBlogById(Integer blogId);

    @Select("SELECT * FROM BLOG ")
    @Results({
      @Result(id=true, property="blogId", column="BLOG_ID"),
      @Result(property="blogName", column="BLOG_NAME"),
      @Result(property="createdOn", column="CREATED_ON")  
    })
    public List<Blog> getAllBlogs();
 
    @Update("UPDATE BLOG SET BLOG_NAME=#{blogName}, CREATED_ON=#{createdOn} 
             WHERE BLOG_ID=#{blogId}")
    public void updateBlog(Blog blog);

    @Delete("DELETE FROM BLOG WHERE BLOG_ID=#{blogId}")
    public void deleteBlog(Integer blogId);
}

Step#3: Configure BlogMapper in 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 resource="jdbc.properties"/>
 
 <environments default="development">
      <environment id="development">
        <transactionManager type="JDBC"/>
        <dataSource type="POOLED">
           <property name="driver" value="${jdbc.driverClassName}"/>
           <property name="url" value="${jdbc.url}"/>
           <property name="username" value="${jdbc.username}"/>
           <property name="password" value="${jdbc.password}"/>
        </dataSource>
      </environment>
  </environments>
  <mappers>
      <mapper class="com.sivalabs.mybatisdemo.mappers.BlogMapper"/>
  </mappers>
</configuration>

Step#4: Create BlogService.java

package com.sivalabs.mybatisdemo.service;

import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.sivalabs.mybatisdemo.domain.Blog;
import com.sivalabs.mybatisdemo.mappers.BlogMapper;

public class BlogService
{
     public void insertBlog(Blog blog) 
     {
          SqlSession sqlSession = MyBatisUtil
                .getSqlSessionFactory().openSession();
          try{
              BlogMapper blogMapper = sqlSession.getMapper(BlogMapper.class);
              blogMapper.insertBlog(blog);
              sqlSession.commit();
          }
          finally {
              sqlSession.close();
          }
     }

     public Blog getBlogById(Integer blogId) 
     {
          SqlSession sqlSession = MyBatisUtil
                .getSqlSessionFactory().openSession();
          try{
              BlogMapper blogMapper = sqlSession.getMapper(BlogMapper.class);
              return blogMapper.getBlogById(blogId);
          }
          finally {
            sqlSession.close();
          }
     }

     public List<Blog> getAllBlogs() 
     {
          SqlSession sqlSession = MyBatisUtil
                .getSqlSessionFactory().openSession();
          try {
              BlogMapper blogMapper = sqlSession.getMapper(BlogMapper.class);
              return blogMapper.getAllBlogs();
          } 
          finally {
            sqlSession.close();
          }
     }
 
     public void updateBlog(Blog blog) {
          SqlSession sqlSession = MyBatisUtil
                .getSqlSessionFactory().openSession();
          try{
              BlogMapper blogMapper = sqlSession.getMapper(BlogMapper.class);
              blogMapper.updateBlog(blog);
              sqlSession.commit();
          }
          finally {
              sqlSession.close();
          }  
     }

     public void deleteBlog(Integer blogId) 
     {
      SqlSession sqlSession = MyBatisUtil
            .getSqlSessionFactory().openSession();
      try{
          BlogMapper blogMapper = sqlSession.getMapper(BlogMapper.class);
          blogMapper.deleteBlog(blogId);
          sqlSession.commit();
      }
      finally {
          sqlSession.close();
      } 
     }

}

Step#5: Create JUnit Test for BlogService methods

package com.sivalabs.mybatisdemo;

import java.util.Date;
import java.util.List;

import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;

import com.sivalabs.mybatisdemo.domain.Blog;
import com.sivalabs.mybatisdemo.service.BlogService;

public class BlogServiceTest 
{
    private static BlogService blogService;
 
    @BeforeClass
    public static void setup() 
    {
      blogService = new BlogService();
    }
 
    @AfterClass
    public static void teardown() 
    {
        blogService = null;
    }
 
    @Test
    public void testGetBlogById() 
    {
        Blog blog = blogService.getBlogById(1);
        Assert.assertNotNull(blog);
        System.out.println(blog);
    }
    
    @Test
    public void testGetAllBlogs() 
    {
         List<Blog> blogs = blogService.getAllBlogs();
         Assert.assertNotNull(blogs);
         for (Blog blog : blogs) 
         {
           System.out.println(blog);
         } 
    }
    
    @Test
    public void testInsertBlog() 
    {
         Blog blog = new Blog();
         blog.setBlogName("test_blog_"+System.currentTimeMillis());
         blog.setCreatedOn(new Date());
         
         blogService.insertBlog(blog);
         Assert.assertTrue(blog.getBlogId() != 0);
         Blog createdBlog = blogService.getBlogById(blog.getBlogId());
         Assert.assertNotNull(createdBlog);
         Assert.assertEquals(blog.getBlogName(), createdBlog.getBlogName());      
    }
    
    @Test
    public void testUpdateBlog() 
    {
        long timestamp = System.currentTimeMillis();
        Blog blog = blogService.getBlogById(2);
        blog.setBlogName("TestBlogName"+timestamp);
        blogService.updateBlog(blog);
        Blog updatedBlog = blogService.getBlogById(2);
        Assert.assertEquals(blog.getBlogName(), updatedBlog.getBlogName());
    }
    
    @Test
    public void testDeleteBlog() 
    {
        Blog blog = blogService.getBlogById(4);
        blogService.deleteBlog(blog.getBlogId());
        Blog deletedBlog = blogService.getBlogById(4);
        Assert.assertNull(deletedBlog);
    }
}

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK