mybatis是持久层的框架,是Apache下的顶级项目。2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis,实质上Mybatis对ibatis进行一些改进。 Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。
本文首先介绍mybatis的框架,之后通过id查询用户的基本信息作为入门程序。
其框架结构如下:
框架结构也同样是,我们进行操作的流程。
【1】为了便于程序开发,首先创建一个日志文件,便于将来错误的查看。创建log4j.properties文件,路径为:src\main\resources\log4j.properties,输入以下内容:
# Global logging configuration
#开发环境日志要设置成debug
log4j.rootLogger=DEBUG, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# 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
【2】创建SqlMapConfig.xml文件,路径为:src\main\resources\SqlMapConfig.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>
<!-- 和spring整合后 environments配置将废除-->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理-->
<transactionManager type="JDBC" />
<!-- 数据库连接池-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="123" />
</dataSource>
</environment>
</environments>
<!-- 加载 映射文件 -->
</configuration>
【3】根据上面的框架,现在开始配置映射文件,需要注意,在后期的开发中,mapper代理开发映射文件名称叫XXXMapper.xml,比如:UserMapper.xml、ItemsMapper.xml,这里,我们暂时不用mapper代理进行开发,采用最为原始的方式进行开发,这也是从0到1的过程。
新建文件,起名字为User.xml,之所以用User,是因为,后面的内容我们将引入一个更删改查用户信息的入门例子,这也是为后面的开发所准备的。文件路径为:src\main\resources\sqlmap\User.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"> <!-- namespace命名空间,作用就是对sql进行分类化管理,理解sql隔离 注意:使用mapper代理方法开发,namespace有特殊重要的作用 --> <mapper namespace="test"> <!-- 在 映射文件中配置很多sql语句 --> <!-- 需求:通过id查询用户表的记录 --> <!-- 通过 select执行数据库查询 id:标识 映射文件中的 sql 将sql语句封装到mappedStatement对象中,所以将id称为statement的id parameterType:指定输入 参数的类型,这里指定int型 #{}表示一个占位符号 #{id}:其中的id表示 接收输入 的参数,参数名称就是id,如果输入参数是简单类型,#{}中的参数名可以任意,可以value或其它名称 resultType:指定sql输出结果 的所映射的java对象类型,select指定resultType表示将单条记录映射成的java对象。--> <select id ="findUserById" parameterType="int" resultType="po.User"> SELECT *FROM user WHERE id=#{id} </select> </mapper>这段程序不懂不要紧,一点点来解释。这里配置的文件实现的要求是:通过id查询用户表的记录 。代码中有具体的解释。在映射文件中,
resultType="po.User"
表示执行SQL之后返回结果所对应的java对象类型,这里的po.User 中的User类可以看做是返回体,这个文件需要自己创建(当然,在后面,结合spring之后就能自动生成了,现在,我们先手动创建吧)在创建文件之前,还有一点千万注意,就是在SqlMapConfig.xml中加载映射文件。在SqlMapConfig.xml中加入以下代码:
<!-- 加载 映射文件 --> <mappers> <mapper resource="sqlmap/User.xml"/> </mappers>
【4】创建User.java文件,路径为:src\main\java\po\User.java
public class User { private int id; private String username;// 用户姓名 private String sex;// 性别 private Date birthday;// 生日 private String address;// 地址 //setter、getter方法及tostring方法略 }【5】上面都设置好之后,开始逻辑的程序编写吧。首先创建java文件,路径为:src\main\java\first\MyFirstMybatis.java,代码的逻辑,在上面的框架中都有提到,这里,简单叙述下: 1.根据配置文件创建会话工厂(SqlSessionFactory);2.通过工厂得到SqlSession;3.通过SqlSession操作数据库。
code如下,先通过单元测试来测试下,我们的代码逻辑正确与否。
public class MyFirstMybatis {
// 根据id查询用户信息,得到一条记录结果
public void findUserByIdTest() throws Exception {
// mybatis配置文件
String resource = "SqlMapConfig.xml";
// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
// 创建会话工厂,传入mybatis的配置文件信息
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 通过工厂得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// 通过SqlSession操作数据库
// 第一个参数:映射文件中statement的id,等于=namespace+"."+statement的id
// 第二个参数:指定和映射文件中所匹配的parameterType类型的参数
// sqlSession.selectOne结果 是与映射文件中所匹配的resultType类型的对象
// selectOne查询出一条记录
User user = sqlSession.selectOne("test.findUserById", 1);
System.out.println(user);
// 释放资源
sqlSession.close();
}
}
【6】最后一步,创建测试文件,进行单元测试。单元测试很简单,idea创建单元测试,这里简单说下简单操作流程。
6.1 鼠标光标放到上面代码的“MyFirstMybatis ”处,点击鼠标右键。如图:
6.2 点击“create new test”---->,之后按照图示操作。
6.3 点击OK,之后创建的文件路径为:src\test\java\first\MyFirstMybatisTest.java,在public void findUserByIdTest() throws Exception { }中贴入下面的代码:
// mybatis配置文件
String resource = "SqlMapConfig.xml";
// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
// 创建会话工厂,传入mybatis的配置文件信息
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 通过工厂得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// 通过SqlSession操作数据库
// 第一个参数:映射文件中statement的id,等于=namespace+"."+statement的id
// 第二个参数:指定和映射文件中所匹配的parameterType类型的参数
// sqlSession.selectOne结果 是与映射文件中所匹配的resultType类型的对象
// selectOne查询出一条记录
User user = sqlSession.selectOne("test.findUserById", 1);
System.out.println(user);
// 释放资源
sqlSession.close();
【7】到此,所有操作结束。点击run运行,将会看到我们通过id查询用户的基本信息。如下:
【8】最后,对比下,数据库的信息,看select的结果是否一致。
请继续关注后续内容,欢迎评论转发并给出指导意见!