此篇文章基于上一篇Mybatis初识的基础上进行增改--请点击查看上一篇-->Mybatis框架初识
此篇文章主要写Mybatis框架基于注解的方式实现增删改查操作---基于Xml方式请点击-->Mybatis框架基于Xml方式实现增删改查
1,首先写个用到的Mybatis工具类,建个包:cm.demo.util ,包下写个MyBatisUtil类
package cm.demo.util;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MyBatisUtil {
/**
* 获取SqlSessionFactory
*/
public static SqlSessionFactory getSqlSessionFactory() {
String resource = "conf.xml";
InputStream is = MyBatisUtil.class.getClassLoader().getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
return factory;
}
/**
* 获取SqlSession
*/
public static SqlSession getSqlSession() {
return getSqlSessionFactory().openSession();
}
/**
* 获取SqlSession
* true 表示创建的SqlSession对象在执行完SQL之后会自动提交事务
* false 表示创建的SqlSession对象在执行完SQL之后不会自动提交事务,
* 这时就需要我们手动调用sqlSession.commit()提交事务
* @return SqlSession
*/
public static SqlSession getSqlSession(boolean isAutoCommit) {
return getSqlSessionFactory().openSession(isAutoCommit);
}
}
写好工具类之后,定义一个接口:
package cm.demo.mapping;
import java.util.List;
import cm.demo.main.User;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
/**
* 定义sql映射的接口,使用注解指明方法要执行的SQL
*/
public interface UserMapperIF {
//使用@Insert注解指明add方法要执行的SQL
@Insert("insert into users(name, age) values(#{name}, #{age})")
public int add(User user);
//使用@Delete注解指明deleteById方法要执行的SQL
@Delete("delete from users where id=#{id}")
public int deleteById(int id);
//使用@Update注解指明update方法要执行的SQL
@Update("update users set name=#{name},age=#{age} where id=#{id}")
public int update(User user);
//使用@Select注解指明getById方法要执行的SQL
@Select("select * from users where id=#{id}")
public User getById(int id);
//使用@Select注解指明getAll方法要执行的SQL
@Select("select * from users")
public List getAll();
}
我们不需要针对UserMapperIF接口去编写具体的实现类代码,具体的实现类由MyBatis动态构建出来,只需要直接拿来使用即可!
接口定义完成后,我们在conf.xml文件中注册这个映射接口:
这个地方注意: 接口注册是 class 不是resource
单元测试类:
package cm.demo.test;
import java.util.List;
import cm.demo.main.User;
import cm.demo.mapping.UserMapperI;
import cm.demo.util.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
public class TestCRUDAnnotationMapper {
@Test
public void testAdd(){
SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
//得到UserMapperIF接口的实现类对象,UserMapperIF接口的实现类对象由sqlSession.getMapper(UserMapperIF.class)动态构建出来
UserMapperIF mapper = sqlSession.getMapper(UserMapperIF.class);
User user = new User();
user.setName("用户xdp");
user.setAge(20);
int add = mapper.add(user);
//使用SqlSession执行完SQL之后需要关闭SqlSession
sqlSession.close();
System.out.println(add);
}
@Test
public void testUpdate(){
SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
//得到UserMapperIF接口的实现类对象,UserMapperIF接口的实现类对象由sqlSession.getMapper(UserMapperIF.class)动态构建出来
UserMapperIF mapper = sqlSession.getMapper(UserMapperIF.class);
User user = new User();
user.setId(3);
user.setName("吃鸡");
user.setAge(26);
//执行修改操作
int retResult = mapper.update(user);
//关闭SqlSession
sqlSession.close();
System.out.println(retResult);
}
@Test
public void testDelete(){
SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
//得到UserMapperIF接口的实现类对象,UserMapperIF接口的实现类对象由sqlSession.getMapper(UserMapperIF.class)动态构建出来
UserMapperIF mapper = sqlSession.getMapper(UserMapperIF.class);
//执行删除操作
int retResult = mapper.deleteById(7);
//关闭SqlSession
sqlSession.close();
System.out.println(retResult);
}
@Test
public void testGetUser(){
SqlSession sqlSession = MyBatisUtil.getSqlSession();
//得到UserMapperIF接口的实现类对象,UserMapperIF接口的实现类对象由sqlSession.getMapper(UserMapperIF.class)动态构建出来
UserMapperIF mapper = sqlSession.getMapper(UserMapperIF.class);
//执行查询操作,将查询结果自动封装成User返回
User user = mapper.getById(8);
//关闭SqlSession
sqlSession.close();
System.out.println(user);
}
@Test
public void testGetAll(){
SqlSession sqlSession = MyBatisUtil.getSqlSession();
//得到UserMapperIF接口的实现类对象,UserMapperIF接口的实现类对象由sqlSession.getMapper(UserMapperIF.class)动态构建出来
UserMapperIF mapper = sqlSession.getMapper(UserMapperIF.class);
//执行查询操作,将查询结果自动封装成List返回
List lstUsers = mapper.getAll();
//使用SqlSession执行完SQL之后需要关闭SqlSession
sqlSession.close();
System.out.println(lstUsers);
}
}
这就是基于注解的方式实现Mybatis增删改查方式,欢迎各大学友、神哥、神姐多多指教,共同学习!后续随着不断的深入学习,会不断进行更新。