作为框架的使用方,需要提供配置信息,包括了连接配置信息和sql配置信息,这里我们是仿照Mybatis写的,里面的大部分的xml属性其实都是自定义的。创建项目 IPersistence_Test,该项目为maven项目。
    额外说一句,准备工作必须要有,也就是安装了mysql,我这边新创建了zdy_mybatis的数据库,新建user表,包括了id, name两个属性。
    由于目前我们的框架还没开始编写,所以当前我们要做的是提供配置信息,代码如下:

    1. sqlMapperConfig.xml的内容如下:
    2. <configuration>
    3. <!--提供数据库的连接信息-->
    4. <dataSource>
    5. <property name="jdbcDriver" value="com.mysql.cj.jdbc.Driver"></property>
    6. <property name="jdbcUrl" value="jdbc:mysql:///zdy_mybatis?serverTimezone=UTC&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=true"></property>
    7. <property name="jdbcUser" value="root"></property>
    8. <property name="jdbcPassword" value="nrblwbb7"></property>
    9. </dataSource>
    10. <!--加载mapper映射文件的路径-->
    11. <mapper resource="UserMapper.xml"></mapper>
    12. </configuration>
    13. UserMapper.xml的内容如下
    14. <mapper namespace="User">
    15. <select id="selectList" resultType="com.wangzhi.pojo.User">
    16. select * from user
    17. </select>
    18. <select id="selectByIdAndName" resultType="com.wangzhi.pojo.User" paramterType="com.wangzhi.pojo.User">
    19. SELECT * FROM user
    20. WHERE id = #{id} AND name = #{name}
    21. </select>
    22. </mapper>

    为什么这么这么编写,数据库的配置信息不用说,连接数据库的四个要点,后面的mapper属性是为了加载pojo对应的mapper.xml,这样我们就可以只是用sqlMapperConfig的路径来获取到所有的xml内容,否则我们就需要调用多次getResourceAsStream(path)来获取所有xml内容,相对复杂。

    UserMapper.xml的内容编写要确保的是唯一性,因为有多个pojo,所以namespace用来区分不同的pojo,id用来区分不同的sql方法,这样每一个sql都是独立无二的,根据namespace.id我们就可以获取到需要执行的sql。 至于resultType和paramterType是用于反射自省来设置参数和返回参数使用的。

    至此,第一阶段就完成了,接下来编写框架内容。


    框架编写完成之后(下面完成之后),测试类的编写:

    1. public class User {
    2. private Integer id;
    3. private String name;
    4. public Integer getId() {
    5. return id;
    6. }
    7. public void setId(Integer id) {
    8. this.id = id;
    9. }
    10. public String getName() {
    11. return name;
    12. }
    13. public void setName(String name) {
    14. this.name = name;
    15. }
    16. @Override
    17. public String toString() {
    18. return "User{" +
    19. "id=" + id +
    20. ", name='" + name + '\'' +
    21. '}';
    22. }
    23. }
    24. public class IPersistenceTest {
    25. @Test
    26. public void testResources() throws PropertyVetoException, DocumentException, IllegalAccessException, InvocationTargetException, IntrospectionException, InstantiationException, NoSuchFieldException, SQLException, NoSuchMethodException, ClassNotFoundException {
    27. InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapperConfig.xml");
    28. SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
    29. SqlSession sqlSession = sqlSessionFactoryBuilder.build(resourceAsStream).openSession();
    30. List<User> users = sqlSession.selectAll("user.selectList");
    31. users.forEach(System.out::println);
    32. User user = new User();
    33. user.setId(1);
    34. user.setName("王智");
    35. User result = sqlSession.selectOne("user.selectByIdAndName", user);
    36. System.out.println(result);
    37. }
    38. }