MyBatis Tutorial: Part-2: CRUD operations Using Annotations
In this post I will explain how to perform CRUD operations using MyBatis Annotation support without need of Queries configuration in XML mapper files.
<strong>MyBatis Tutorial: Part1 – CRUD Operations</strong>
<strong>MyBatis Tutorial: Part-2: CRUD operations Using Annotations</strong>
<strong>MyBatis Tutorial: Part 3 – Mapping Relationships</strong>
<strong>MyBatis Tutorial : Part4 – Spring Integration</strong>
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);
}
}
Related content
- MyBatis Tutorial : Part4 – Spring Integration
- MyBatis Tutorial: Part 3 – Mapping Relationships
- MyBatis Tutorial: Part1 – CRUD Operations
- Should you use Lombok? Or, is it bad for you?
- My attempt to understand why people perceive Java as complex
comments powered by Disqus