MyBatis-接口式编程

》1. 接口式编程:当接口和xml文件动态绑定时,MyBatis会为接口自动创建一个代理对象,通过代理对象去调用相应的方法。好处:解耦和,更安全的类型检查,明确的返回值
  原生:    IDao  ==>  DaoImpl
  Mybatis:  IDao  ==>  xxMapper.xml
》2.SqlSessionFactory:代表和数据库的一次会话,用完必须关闭;
  SqlSessionFactory和Connection一样都是非线程安全的,每次使用都应该去获取新的对象;

1. 创建一个接口:

public interface EmployeeMapper {
    public Employee getEmpById(Long id) throws SQLException;
    public boolean add(Employee employee) throws SQLException ;
    public boolean edit(Employee employee) throws SQLException ;
    public boolean remove(Long id) throws SQLException ;
}

2. 创建Mapper映射文件:

  》1.namespace:必须为接口的全类名
  》2.sqlId与接口的方法名保持一致

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 1.namespace:必须为接口的全类名 -->
<mapper namespace="cn.ll.mybatis.dao.EmployeeMapper">
<!-- 2.sqlId与接口的方法名保持一致 -->
<!-- public Employee getEmpById(Long id) -->
<select id="getEmpById" resultType="Employee">
select * from employee where eid = #{id}
</select>
<!-- public boolean add(Employee employee) -->
<insert id="add" useGeneratedKeys="true" keyProperty="eid" >
INSERT INTO employee(name,gender,email) VALUES(#{name},#{gender},#{email})
</insert>
<!-- public boolean edit(Employee employee) -->
<update id="edit" >
UPDATE employee SET name=#{name},gender=#{gender},email=#{email} WHERE eid=#{eid}
</update>
<!-- public boolean remove(Long id) -->
<delete id="remove" >
DELETE FROM employee WHERE eid=#{eid}
</delete>
</mapper>

3. 加载配置文件进行测试:

@Test
public void test1() throws Exception {
String resource = "mybatis/mybatis-config.xml";
InputStream resourceAsStream = Resources.getResourceAsStream(resource);
//1.获取SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//2.获取SqlSession对象
SqlSession session = sqlSessionFactory.openSession();
try{//3.获取接口的实现类对象,当接口和xml文件动态绑定时,MyBatis会为接口自动创建一个代理对象,通过代理对象去调用相应的方法
EmployeeMapper employeeMapper = session.getMapper(EmployeeMapper.class) ;
Employee employee = employeeMapper.getEmpById(1L) ;
System.out.println(employeeMapper + " :" + employee);
}finally {
session.close();
}
}

 

posted @ 2019-06-25 02:01  SweetBaby。  阅读(190)  评论(0编辑  收藏  举报