Mybatis快速入门
Mybatis是一个开源的持久层框架,非常普及,据说阿里就用它。
有同学问什么是持久层,你只需要浅薄的知道持久层就是数据库就ok了。
Mybatis框架入门使用步骤
- 创建核心xml配置文件
- 创建持久化类(POJO)
- 创建SQL映射xml文件
- 编写测试代码
我先来解释一下什么叫持久化类,持久化类是指其实例状态要被保存到数据库中的类,也就是一个javaBean。比如以下这个User类
public class User{
int id;
String name;
String password;
//此处省略了get,set方法,没有也行,最好加上
}
创建核心xml配置文件
这个配置文件之所以是核心配置文件,我觉得主要是因为这个文件是对Mybaits的整体进行配置,而且你在实现API来操作数据库时,只需要加载这个文件。
那么这个文件有啥用?或者说它配置了哪些东西,我来例举一下。
我们快速入门,并不需要马上就用到除了被我框起来的部分,感兴趣的同学之后可以了解。
注意:配置信息的顺序必须按照这个顺序从上到下,你可以没有,但是顺序得对,比如说,你把mapper属性写在了最上面,那就会报错!
现在你可以创建一个xml文件了,这个文件我们通常命名为 mybatis-config.xml以便于管理,内容暂时为
<?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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value=""/>
<property name="username" value=""/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource=""/>
</mappers>
</configuration
非常明显,你只需要填写dataSource里的几个value,driver属性我已经帮你填写了,如果你不是mysql数据库,请更改(很多视频用的driver是没有中间那个cj的,那是老版本,现在要加cj)
- url属性就是你数据库的url地址,如果你在本地上测试,那么大概率为这个,详细不再赘述:
jdbc:mysql://localhost:3306/你的数据库名 如果不是可以在博客或者百度上搜搜,比如,如何看数据库的url地址等。如果数据库乱码了,在最后加上?characterEncoding=utf8(注意有问号隔开,跟在你的数据库名后)
-
username和password就是你的数据库用户名和密码名。
-
mappers属性暂时放在后面填,它就是SQL映射文件的目录地址
填属性的办法还有很多,比如通过导入配置文件或者直接用Java传参(不推荐用java代码,但是通过properties配置文件导入的方式推荐,但是我们只是快速入门,所以直接填写)
创建持久化类(POJO)
之前介绍了什么是持久化类,那我们现在来看看这个类有什么要求。
- 属性名必须和你数据表里的字段名一样,不然mybatis找不到。
- 不需要类名与数据表名一样
要求不多,那么我们先创一个数据库,里面建一张user表
之后根据这个表,我们创建一个POJO类
public class User{
int id;
String name;
String password;
//此处省略了get,set方法,没有也行,最好加上
}
这个类主要是作为一个整体与数据库进行信息交换,就好像表里的一行数据一样。
创建SQL映射xml文件
说白了就是保存SQL语句的文件,通过这个文件,我们将SQL语句和java代码分开了,还有一种通过注解的方式,有些人喜欢用,但是用注解来写SQL语句首先复杂的SQL不好搞,更重要的是它又将SQL语句和java代码搞在一起了,所以官方也推荐使用xml文件来写sql语句。这里我们只讲这种方式。我们将文件命名UserMapper.xml,一般都以XXXMapper来命名
<?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="userMapper">
//我这是查询语句,所以标签是select,如果是插入则写insert,以此类推
<select id="count" resultType="int">
select count(*) from user
</select>
<select id="findAll" resultType="com.mybatis.bean.User">//你放哪个包下你就填哪里
select * from user
</select>
</mapper>
这个文件主要就是在mapper属性里添加你的SQL语句,namespace顾名思义为命名空间,这里你可以随便取一个,但是实际开发中我们需要遵循一定的命名习惯,咱们先不管。我在里面添加了两条select语句分别代表了两种情况。id你可以随便写给名字,目的是调用时能根据命名空间和id精准找到该调用哪条SQL语句。
resultType属性就是你查询结果后返回值的类型,比如我第一条查询表里几条数据,返回的是一个int属性,第二条SQL语句查询的是输出表里的所有数据,就是以我们之前定义的User类作为返回类型,他会根据你的属性名与字段名进行匹配后赋值
不同功能的语句标签也不同,select语句标签就是select,以此类推,有MySQL基础的可以很熟练写下。
最后我们将创建好的mapper文件的引用添加到我们之前创建好的mybatis-config.xml文件里
<mappers>
<mapper resource="userMapper.xml"/><!-它的位置,而不只是它的名字-->
</mappers>
编写测试代码
public class Test01 {
public static void main(String[] args) throws Exception{
String resource = "mybatis-config.xml";
//获取xml文件输出流
InputStream is = Resources.getResourceAsStream(resource);
//创建sqlSessionFactory对象,可以完成对配置文件的读取
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//创建sqlsession对象,调用mapper文件进行数据库操作
int count=0;
SqlSession sqlSession = factory.openSession();
//mybatis通过mapper文件的namespace和子元素id找到相应的sql语句
count = sqlSession.selectOne("userMapper.count");
System.out.println(count);
//返回不止一个,就需要调用selectList方法
List<User> userList = sqlSession.selectList("userMapper.findAll");
for(User user:userList){
System.out.println(user);
}
sqlSession.close();
}
}
要说的都在注释里了,复制下来跑一跑,你的mybatis就算入门了。之后我会发更多的内容让你进一步掌握这门框架