Mybaits学习初步抽象心得,学习搭建一个mybaits项目以及如何阅读文档
先记录项目搭建过程,最后提炼心得。
使用Mybaits的目的就是为了简化对数据库操作,它替换了JDBC绝大部分冗余代码,本来JDBC实现sql查询数据是需要加载驱动创建连接然后使用连接对象创建Statement对象,再用Statement对象执行sql语句返回结果集,执行sql语句步骤在Dao接口的实现类的代码中,增加了操作数据库的sql语句与代码实现的耦合。
于是Mybaits将sql与代码分离(sql可以写在xml里,不必为Dao接口增加实现类),还避免了很多JDBC操作的重复代码块,使存取数据操作更加方便,更好维护。只需要几个jar包配置几个sql映射的xml文件就可以实现。
接下来记录使用Maven搭建一个简单的Mybaits查询项目配置。
从逻辑视角进行项目搭建的步骤
-
创建一个maven项目
-
在maven配置文件中引入msql、mybaits、junit依赖
<dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.46</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.2</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies>
-
在resource文件夹中创建mybatis-config.xml,文档中有配置模板,将配置复制进mybatis-config.xml然后填好。
<?xml version="1.0" encoding="UTF8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/library? useUnicode=true&characterEncoding=utf8&useSSL=false"/> <property name="username" value="root"/> <property name="password" value="abc123"/> </dataSource> </environment> </environments> <mappers> <!-- 此映射关系十分重要,它告诉Mybaits去哪里找定义的SQL语句,所以每建立一个sql映射就得在此处标出 详见https://mybatis.org/mybatis-3/zh/configuration.html#mappers --> <mapper resource="com/yi/dao/UserMapper.xml"/> </mappers> </configuration>
-
根据文档中的入门内容,Mybaits运行流程为:
-
所以我们需要在包下建立一个utils类来为mybaits导入核心配置文件和创建SQLSessionFactory,再使用此工厂创建SQLSession对象。(相当于初始化Mybaits)
//MybatisUtils private static SqlSessionFactory sqlSessionFactory; static{ //初始化SqlSessionFactory对象 try{ String resource = "mybaits-config.xml"; InputStream inputStream = Resource.getResourceAsStream(resource); sqlSessionFactory = new sqlSessionFactoryBuilder().build(inputStream); }catch(IOExcepiton e){ e.printStackTrace(); } } //获取SQLSession连接 public static SqlSession getSesion() { return sqlSessionFactory.openSession(); } }
-
至此,我们只剩下一下四样没有配置。
-
Dao接口(也就是Mapper,操作数据库的CRUD等方法的定义),以UserDao为示例
public interface UserDao{ List<User> selectAllUser(); }
-
与Dao接口同包下的xxx(示例为User)Mapper.xml(填写sql语句与参数传值和返回值类型)
<?xml version="1.0" encoding="UTF8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--绑定一个对应的DAO接口--> <mapper namespace="com.yi.dao.UserDao"> //id填方法名,返回类型填对应实体类名 <select id="selectAllUser" resultType="com.yi.pojo.User"> select * from User </select> </mapper>
-
实体类,建立与数据库对应的成员变量与getter&setter,构造器与toString
-
数据库中与实体类相对应的表
-
-
最后以上4步完成后,我们就可以通过在测试类中拿到sqlSession对象,将对应Dao接口的.class对象传给此对象(让此SQLSession对象知道Dao接口中的结构),然后将此对象赋给Dao接口的引用,使用此引用就可以调用Dao中定义的各种方法,实现CRUD操作。
@Test public void test(){ //拿到sqlSession对象 SqlSessiojn sqlSession = MybatisUtils.getSession(); UserDao mapper = sqlSession.getMapper(UserDao.class); List<User> userlist = mapper.selectAllUser(); for.userlist.sout sqlSession.close(); }
从项目结构图的视角
另外一个视角,以此项目结构图来进行建立抽象模型,刚才的操作过程就是:
- 在最下面的pom.xml引入相关依赖
- 在resources中配置好mybaits核心xml文件。
- 建立utils包下工具类,实现mybaits初始化并提供获取SQLSession对象的方法。
- 创建实体类与数据库中对应表以供测试使用。
- 新建dao包下Dao(Mapper)接口,在里面定义一个查询方法,然后新建同包下的xxxMapper.xml,与此Dao接口绑定好,并在里面写下sql语句相关操作。
- 建立test中测试类进行测试。
绝对需要注意的问题:maven静态资源导入的问题。
maven默认只导入resources路径下的静态资源。这里的静态资源说的就是xml文件。也就是说如果不在pom.xml中进行配置,那么maven项目默认编译后只会将resources的xml导入target文件夹中,dao中的xml资源被项目无视。导致资源绑定失败,报的错应该是register失败。此时需要在pom.xml中进行如下配置:
<!--build中配置resources,防止资源导出失败问题-->
<build>
<resources>
<resource>
<directory>src/main/resource</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
这样,编译之后查看target文件夹,就会发现资源成功导入(如果不配置上面那段,下面的dao中的bookCaseMapper.xml编译后进不去target)
如何阅读文档?从Mybaits文档中学习到了什么?以后阅读文档入门一门新技术时需要注意什么问题?
本文作者:逐东
本文链接:https://www.cnblogs.com/vuds/articles/15634797.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步