1 2 3 4 5 6 7 8 9 10 11 12 InputStream in= Resources.class.getResourceAsStream(config); SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder (); SqlSessionFactory factory=builder.build(in); SqlSession session= factory.openSession(); String sqlId="com.zss.dao.StudentDAO" +"." +"selectStudents" ; List<Student> studentList=session.selectList(sqlId);
工具类 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 package utils;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.InputStream;public class MyBaitsUtils { private static SqlSessionFactory sqlSessionFactory; static { String config= "/mybaits.xml" ; InputStream in= Resources.class.getResourceAsStream(config); sqlSessionFactory=new SqlSessionFactoryBuilder ().build(in); } public static SqlSession getSqlSession () { SqlSession sqlSession=null ; if (sqlSessionFactory!=null ){ sqlSession=sqlSessionFactory.openSession(); } return sqlSession; } }
动态代理 条件分析 我们可以发现有了工具类,但是整个过程还是拥有许多的重复代码,而真正改变的只是,即我们的执行的sqlId与执行的方法
1 2 String sqlId="com.zss.dao.StudentDAO" +"." +"selectStudents" ; List<Student> studentList=session.selectList(sqlId);
而且同时我们查看xml文件,这些值均可以在xml文件获取得到,而并非是我们手写
1 2 3 4 5 6 7 8 <mapper namespace ="com.zss.dao.StudentDAO" > <select id ="selectStudents" resultType ="com.zss.pojo.Student" > select * from student order by id; </select > <insert id ="insertStudent" > insert into student values (#{id},#{name},#{email},#{age}) </insert > </mapper >
同时我们也可以通过dao方法的返回值,判断是哪一种方法
mybaits动态代理 mubaits根据dao的方法调用,执行获取sql语句的信息,mybaits根据你dao接口,创建一个dao接口的实现类,并创建这个类的对象,完成sqlSession的调用,访问数据库
也就是说,dao的实现方法并不需要我们进行完成了,而是mybaits进行完成
1 2 3 4 5 6 public static void main ( String[] args ) throws IOException { SqlSession sqlSession= MyBaitsUtils.getSqlSession(); StudentDAO dao=sqlSession.getMapper(StudentDAO.class); List<Student> studentList=dao.selectStudents(); System.out.println(studentList); }
动态代理会帮助我们创建一个实现类,而不需要我们手动创建
插眼,动态代理懂