mybatis入门--初识mybatis
尊重原创,转载请标明出处:https://www.cnblogs.com/liyasong
初识 mybatis
今天,一起来说说 mybits 这个框架吧。这是一个持久层的框架。之前叫做 ibatis。所以,在它的代码中出现 ibatis 这个词的时候,不要感到惊讶。不是写错了,它确实就是这个样子的。
mybatis 是什么
首先,我们来看看 mybatis 是个什么东东,它有什么用?我们为什么要学习它。mybatis 是一个持久层的框架。所谓的持久层,就是我们三层中的 dao 层。主要负责跟数据库进行交互。可以建立数据库表和系统中的对象的一对一映射关系。这种框架我们称之为 orm 框架。但是 mybatis 框架需要自己写 sql 语句,且不能像 hibernate 那样自动生成 sql 语句,并且建立实体类和数据库的映射。所以我们说它是不完全的 orm 框架。
有的同学可能对映射这个词有点不太明了。这里举个例子:如果我们在数据库中有一 user 表,里面的字段有 id、name、birthday、sex、address 等字段,表中有一条数据,如图所示:
而我们系统中也应该存在一个将这些字段存为属性的类,如图:
我们的这个表中的数据,对应表中的代码的话,应该是一个 User 的对象。这个对象中的各个属性的值即为表中的那一条数据。而框架通过我们的配置,将这个表中的记录和这个类的对象建立一对一的关系。我们称之为映射。这样的映射建立之后,我们可以通过操作这个对象实现对数据库的修改。这样我们在考虑业务逻辑的时候就可以不再考虑我们的数据库中的表是如何存储的,而是对我们的实体对象进行操作。简化开发。
那么,mybatis 这个框架都可以做些什么呢?
这个其实也很简单。无非是对数据库的增删改查。这是每个持久层框架都应该支持的事情。sql 语句可以干的事情,mybatis 基本上都可以做。
mybatis 如何使用
在这里,我们不说那些特别高大上的使用方式,只是简单地实现一个最基础的 mybatis 框架的搭建以及我们的最基本的根据 id 查询用户的功能的实现。
第一步:创建 java 工程
第二步:导入 jar 包
在 Java 项目中,要想搭建一个框架,首先需要准备的是 mybatis 的 jar 包。而由于我们的 mybatis 是依赖 log4j 进行输出的,所以我们还需要 log4j 的包。这里将博主用到的包进行下截图分享。
第三步:log4j.properties 的创建
在 classpath 下创建 log4j.properties 用于供 log4j 调用。其代码可以从网上搜索直接粘贴使用。我的代码如下:
# Global logging configuration log4j.rootLogger=DEBUG, stdout # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
第四步:sqlMapConfig.xml 文件配置
在 classpath 目录下创建 sqlMapConfig.xml 文件,sqlMapConfig.xml 是 mybatis 的核心配置文件,现配置其数据源和事物管理。其内容如下:
<?xmlversion="1.0"encoding="UTF-8"?> <!DOCTYPEconfiguration PUBLIC"-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 和 spring 整合后 environments 配置将废除 --> <environmentsdefault="development"> <environmentid="development"> <!-- 使用 jdbc 事务管理,jdbc 的默认事物管理是每条 sql 分配一个 --> <transactionManagertype="JDBC"/> <!-- 数据库连接池 --> <dataSourcetype="POOLED"> <propertyname="driver"value="com.mysql.jdbc.Driver"/> <propertyname="url"value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8"/> <propertyname="username"value="root"/> <propertyname="password"value="root"/> </dataSource> </environment> </environments> </configuration>
第五步:创建 po 类
pojo 包,是我们在开发中的实体类的包,类似于 domain 包。这里我们创建的是 user 类,代码如下:
package cn.itcast.pojo;import java.util.Date;
public class User {
private int id;
private String username;// 用户姓名
private String sex;// 性别
private Date birthday;// 生日
private String address;// 地址public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "User [id=" + id + ", username=" + username + ", sex=" + sex + ", birthday=" + birthday + ", address=" + address + "]"; }
}
第六步:sql 映射文件创建
在 classpath 下的 sqlmap(该目录可以任意,不过建议单独为配置文件建立一个文件夹,以便于管理)目录下创建一个 user.xml 的文件代码如下:
<?xmlversion="1.0"encoding="UTF-8"?> <!DOCTYPEmapper PUBLIC"-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace 命名空间: 稍后讲解 --> <mappernamespace="test"></mapper>
第七步:加载映射文件
将 sql 映射文件添加到我们的 mybatis 的核心配置文件中,使我们的 mybatis 在运行的时可以识别映射文件。代码如下:
<mappers> <mapperresource="sqlmap/User.xml"/> </mappers>
到这里,我们的框架搭建就完成了,下面,我们将进行第一个小功能的实现。
1. 在我们的 user.xml 中添加我们的 select 语句。代码如下:
<mapper namespace="test"><!-- id:sql语句的唯一标识, 要求在同一个映射文件中id不能重复 parameterType:传入参数类型 resultType:返回结果集类型 #{}占位符: 占位符起到占位的作用, 如果传入参数是简单类型(String, long, integer, double, boolean等)那么#{}中的变量名称可以随意起名 --> <select id="findUserById" parameterType="java.lang.Integer" resultType="cn.itcast.pojo.User"> SELECT * FROM user where id=#{id} </select>
</mapper>
2. 测试程序
@Test public void testFindUserById() throws Exception { String resource = "SqlMapConfig.xml"; // 通过流将核心配置文件读入 InputStream inputStream = Resources.getResourceAsStream(resource); // 通过核心配置文件输入流, 创建会话工厂 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream); // 通过工厂创建会话 SqlSession openSession = factory.openSession();//第一个参数: 调用的sql语句 namespace+.+sq语句id, 第二个参数:传入sql语句中的参数 User user = openSession.selectOne("test.findUserById", 1); System.out.println(user); }</pre>
至此,我们的 mybatis 入门程序就开发完成了。其中不足之处,欢迎各位大神指导。