Mybatis的入门学习
既然是入门的学习,首先我们就需要了解Mybatis到底是一个什么样的东西,它是干什么的?
简单来说它是一个轻量级的支持持久层的开源框架,就是主要来处理我们web项目中的dao层。
那么问题来了什么是持久层?
首先我们需要理解的是什么是持久化对吧。持久化就是把我们内存中的数据持久化到数据库啊,磁盘啊这些持久化的设备,也就是说持久化其实是一个动作。内存数据->可持久化设备。那么持久层是什么?想想我们什么时候需要把内存存储到数据库?不就是当我们处理web项目的一些用户啊,商品啊这些的时候嘛。那我们调用的流程是什么?视图->servlet->service->dao对吧,那我们实际上在哪把数据持久化?不就是dao层嘛。不过来到Mybatis这个地方,我们就需要把dao改称为Mapper了。
先下个结论吧:
其实Mybatis就是极大的简化了我们的数据库的代码操作,我们根本不需要写jdbc这些代码,想想看我们jdbc里面写下来的那些代码,比如事务,比如各种get啊set啊特别多对吧。但是换到Mybatis,我们直接就能够getMapper,通过Mapper得到的mapper实现类(dao实现类)就一句代码就完成了所有的操作。
SqlSession sqlSession = MybatisUtils.getSqlSession();
//获取实现类(其实是一个代理类)
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//实际上是dao层的方法
User user = mapper.getUserById(1);
System.out.println(user);
sqlSession.close();
你看就是这么简单,只需要搭建好环境,然后配置好xml文件就好了。
Mybatis还有各种可以动态加入sql的技术,想想我们之前写的一些简单的web项目,拼接sql语句是不是需要各种if,然后有时候加多了一个逗号啊,加多了一个乱七八糟的符号就会导致我们出现错误,而Mybatis可以简化这里的操作。
Mybatis还可以通过注解来完成jdbc的操作,也可以通过Mybatis实现一些缓存上面的操作。一级缓存还有二级缓存等。
废话不多说。我们要学习一个框架不仅仅是要学习知识,我觉得更重要的学习一种解决问题的思路,也要学习如何看着官方文档学习,找到学习的主线。
那么第一点我们要学会的是搭建环境->运行就好了
①创建一个maven项目,然后导入Mybatis的jar,mysql的jar,junit的jar
②导完jar包就需要创建一个mybatis-xml文件,这个文件可以直接上官方文档找,以下就是这个文件,别忘记了datasource这里的操作是跟jdbc里面连接数据库的数据是一样的。只需要把${}这个直接改成实际的值就好了,比如username=“xxxx”
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="jdbc.properties">
<property name="username" value="root"/>
<property name="password" value="123456"/>
</properties>
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
<setting name="cacheEnabled" value="true"/>
</settings>
<typeAliases>
<typeAlias type="com.kuang.dao.UserMapper" alias="userMapper"/>
<package name="com.kuang.pojo"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driverClassName}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/kuang/dao/userMapper.xml"/>
</mappers>
</configuration>
③创建实体类和实体类接口还有xml文件,这里解释一下这个xml文件,我们一开始需要绑定对应的接口,其实就是相当于是实现接口,然后通过绑定下面sql语句的id来确定要实现的方法。其实就是用xml文件代替了实体类,看上去很麻烦,但实际上简化了操作,这里用到了反射。下篇文章细讲
userMapper.xml文件
<?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">
<!--bind the interface-->
<!--绑定我们要使用的接口-->
<mapper namespace="UserMapper">
<select id="getUsersList" resultType="User">
select * from user
</select>
<select id="getUserById" resultType="User" parameterType="int">
select * from user where id = #{id}
</select>
<insert id="insertUser" parameterType="User">
insert into user(id,name,pwd) values(#{id},#{name},#{pwd})
</insert>
<update id="updateUser" parameterType="User">
update user set name =#{name},pwd= #{pwd} where id = #{id}
</update>
<delete id="deleteUser" parameterType="int">
delete from user where id = #{id}
</delete>
<select id="getUserById2" resultType="User" parameterType="map">
select * from user where id = #{userId}
</select>
<select id="getUserByLike" resultType="User" parameterType="map">
select * from user where name like "%"#{value}"%"
</select>
</mapper>
④创建测试类和工具类
共具类其实体现的就是Mybatis框架的一个生命周期。我们需要创建一个SqlSessionFactoryBuilder,然后通过它读取xml文件通过反射来创建一个SqlSessionFactory,最后就是创建SqlSession了,SqlSession相当于PrepareStatement执行sql语句,但是它强大的多。
然后测试就好了。(这里就可以把官方文档的代码抄上去就好了)
注意搭建环境的几个问题
①配置文件没有注册(mabatis-config里面没有注册我们的实现类mapper.xml)
②绑定接口错误(mapper.xml里面需要绑定接口,相当于实现接口)
③方法名不正确(实现类的方法id)
④返回类型不正确(通常使用的是resultType或者是map)
⑤Maven导出资源问题(它不会把java和resource文件里面的资源导出,所以我们需要手动导出资源(在pom.xml里面去设置过滤器,properties和xml文件))
好了搭建环境和简单的介绍就到这里了。