发表于: 2018-03-16 15:55:53
1 538
今天完成的事情:
使用Mybatis连接数据库,为什么不用实现层呢?
摘抄一段网上别人的总结,
Mybatis实现了接口绑定,使用更加方便。
在ibatis2.x中我们需要在DAO的实现类中指定具体对应哪个xml映射文件, 而Mybatis实现了DAO接口与xml映射文件的绑定,自动为我们生成接口的具体实现,使用起来变得更加省事和方便。
那么,想要使用Mybatis,自然要使用到Mybatis的jar包,之前我们是根据别人的例子往maven中加入依赖的,复制别人的依赖就好了,那么如果我们需要的jar包版本与别人不同,或者是我们有自己需要的jar 包,依赖去哪里找呢?
我找到一个可以查依赖的网站
进入网站,输入Mybatis
自然是选择用的人最多的
我的选择是较新的用的人最多的版本3.4.1,点左边的3.4.1
就查到依赖了,发现这里好像还有其他工具的依赖,比如大名赫赫的Gradle,好像是maven更进一步的工具,有机会一定要去学一下。
再加上之前已经有的mysql的依赖,有了这两个jar包其实就可以开始我们的工程了。
新建一个maven项目
加入依赖
还是用之前那张表,所以建立的实体类Student和前面一样。
在工程下建立一个config.xml在里面配置SQl的运行环境。
<?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>
<typeAliases>
<typeAlias alias="Student" type="com.iotek.entity.Student"/>
</typeAliases>
<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/practice"/>
<property name="username" value="root"/>
<property name="password" value="zhangfeng8751"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="student.xml"/>
</mappers>
</configuration>
再建立一个student.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"> <mapper namespace="com.xrq.StudentMapper"> <select id="selectStudentById" parameterType="int" resultType="Student"> <![CDATA[ select * from student where studentId = #{id} ]]> </select> </mapper>
可以看出连sql语句都写在了配置文件中。
创建一个类写代码
import java.io.IOException;
import java.io.Reader;
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 com.iotek.entity.Student;
public class StudentOperator
{
private static StudentOperator instance = new StudentOperator();
protected static SqlSessionFactory ssf;
protected static Reader reader;
static
{
try
{
reader = Resources.getResourceAsReader("config.xml");
ssf = new SqlSessionFactoryBuilder().build(reader);
}
catch (IOException e)
{
e.printStackTrace();
}
}
private StudentOperator()
{
}
public static StudentOperator getInstance()
{
return instance;
}
public Student selectStudentById(int studentId)
{
SqlSession ss = ssf.openSession();
Student student = null;
try
{
student = ss.selectOne("com.iotek.StudentMapper.selectStudentById", 1);
}
finally
{
ss.close();
}
return student;
}
}
写一个Test来测试一下
执行结果
其实和JdbcTemplate相比。Mybatis可以说像又可以说不像。像的是它也是依靠配置文件来取代了类似于数据库连接的代码,也是利用依靠配置文件来取代冗余代码的思想。不像的地方则是Mybatis连sql语句都写到了配置文件当中,同样的还有封装数据的对象,也在配置文件当中,从数据库中查到的数据,直接就封装到对象中返回了。从这一点也可以看出这些大量冗余的代码是多么令程序员头痛的事,不过还好有大神开发这些好用的jar包,造福我们啊。
今天图书馆提早清场,好像做不了更多的事了。
明天计划的事情:
对这两种数据库连接方式进行练习,之前完成的都是copy别人的例子,虽然都能看懂但看懂和会用还是有很大的差距的,希望自己能联系实际做一点练习。
遇到的问题:
虽说是参考别人的例子但也不是完全一样,比如包的名称,创建数据表,创建的实体类啊,这些细小的改动都体现在配置文件里。今天测试时一开始返回的学生对象是null,我检查了好几遍配置信息觉得应该没问题。后来想了想既然数据库与实体类直接绑定在了一起,没准定义的字段名要一样,修改之后竟然真的成功了,看了看例子果然它们也是一样的。还好是自己建的表和实体类不然就发现不了这个问题了,说明果然自己还是要去实现看看的,发现潜在的漏洞。
收获:
学会了使用Mybatis连接数据库,xml文件的配置方法,感觉xml接触多了以后已经感觉不陌生了。
评论