初识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); }
至此,我们的mybatis入门程序就开发完成了。其中不足之处,欢迎各位大神指导。