MyBatis不仅可以使用xml映射文件对数据库进行增删改查,同时也可以用一个接口来实现以上的操作,而且此接口并不需要实现类!
原理就是:把需要对数据进行的操作写成方法,然后把对数据库操作的sql语句用注解的方式注解在方法上面,然后调用的时候就直接调用对应的】
方法并传入相应的参数就可以啦!
当然这个类也需要在在MyBatis的文件里面进行配置,配置方法与xml映射文件类似:
下面是我的接口:
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import com.chen.mybatis.entity.User;
public interface MapperInterface {
@Insert("insert into users(name,age) values(#{name},#{age})")
public int add(User user);
@Update("update users set age=#{age},name=#{name} where id = #{id}")
public int update(User user);
@Delete("delete from users where id=#{id}")
public int deleteById(int id);
@Select("select * from users where id=#{id}")
public User select(int id);
}
上面是这个文件实现了一个简单的对数据库表的增删改查!你只要看过前面我的maybatis 的helloworld文章,相信这个不难看懂!
<mapper class="com.chen.mybatis.test2.MapperInterface"/>
这是在conf.xml配置文件中进行注册!
下面是user 实体类
public class User {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
就跟普通的实体类一样不需要任何其他的注解!
下面就是使用JUnit的测试代码了:
@Test
public void selectByInterface(){
SqlSessionFactory sessionFactory = MyBatisUtils.getSessionFactory();
SqlSession session = sessionFactory.openSession();
MapperInterface mapper= session.getMapper(MapperInterface.class);
User u = mapper.select(1);
session.commit();
System.out.println(u.getName());
session.close();
}
因为每次都要重新读取配置文件获取SqlSessionFactory,这样比较麻烦,所以我就写了一个工具类MyBatisUtils把这个步骤封装了一下,下面会贴出我的工具代码!
这里我们来说一下这个方法里面的代码
前面获取session代码都是一样
主要是后面当你使用的是接口来进行数据的增删改查的时候,就不需要一个statement了,你只需要通过session 获取一个这个接口的示例
MapperInterface mapper= session.getMapper(MapperInterface.class); 这是关键代码,其他的都很简单
然后通过这个对象就可以调用它的方法并传入的对应的参数然后就会返回相应设置好的数据类型
这是工具类的代码:
import java.io.InputStream;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.chen.mybatis.test.Test;
public class MyBatisUtils {
public static SqlSessionFactory getSessionFactory(){
String resource = "conf.xml";
InputStream in = Test.class.getClassLoader().getSystemResourceAsStream(resource);
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(in);
return sessionFactory;
}
}
这里我只实现了对数据库的查询操作,其他三个操作类似!就不一一叙述!