Mybatis是一款优秀的、基于SQL的持久层框架,封装JDBC代码,实现将参数映射到SQL语句并执行,最后将执行结果映射到JAVA对象并返回的功能,支持自定义SQL、存储过程和高级映射。java
本系列文章是基于Mybatis 3.4.6 版本。mysql
咱们使用maven来构建和管理项目,使用的IDEA开发工具来学习,这些都是目前很优秀的而且使用普遍的工具,流畅的开发体验便于提升开发效率,按以下步骤进行:git
点击【Finish】,最终的项目结构以下:github
打开pom文件,添加相关依赖,代码以下:sql
<!-- mybatis依赖 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <!-- mysql驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <!-- junit依赖 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- log4j2依赖 --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.11.0</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.11.0</version> </dependency>
至此,项目已经建立完成,下一步开始编码。数据库
在开始编码以前,须要先建立测试使用的表,mybatis自己是ORM框架,因此数据库确定少不了,咱们使用的是mysql数据库,可使用一个已有数据库或者新建一个新库,在此基础上新建表,以下:apache
CREATE TABLE `sys_user` ( `id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `username` varchar(50) DEFAULT NULL COMMENT '用户名', `password` varchar(50) DEFAULT NULL COMMENT '用户密码', `phone` varchar(20) DEFAULT NULL COMMENT '手机号', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='用户表';
建立完数据库表后,咱们插入一些测试数据,以下:api
insert into sys_user(username,password,phone) values ('zhangsan','123456','13901234567'), ('lishi','123456','13901234567'), ('wangwu','123456','13901234567');
准备好数据库表和测试数据后,开始编写代码。mybatis
Mybatis是ORM映射框架,因此咱们须要对应建立java类,与数据库表进行映射。app
在src/main/java下建立包:com.github.dalianghe.model,并在该包下建立数据库sys_user表的映射类SysUser,代码以下:
package com.github.daliang.model; public class SysUser{ private Long id; private String username; private String password; private String phone; // get/set // 重写toString @Override public String toString() { return "User["+ "id="+this.getId()+"," + "username="+this.getUsername()+ ",password="+this.getPassword()+ ",phone="+this.getPhone() +"]"; } }
在src/mainresources下建立mappers目录,并在其下建立SysUserMapper.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.github.dalianghe.mapper.SysUserMapper"> <select id="selectAll" resultType="SysUser"> select id,username,password,phone from sys_user </select> </mapper>
说明:
< mapper>:XML根元素,属性namespace定义了当前XML命名空间
< select>标签:定义select查询sql,id属性定义当前select查询的惟一ID,resultType定义查询返回类型或集合元素类型(此处使用了配置别名,详细见Mybatis配置文件,若是不使用别名,此处应该制定类的全限定名即:com.github.dalianghe.model.SysUser)。标签内容为要执行的sql语句。
配置Mybatis有多种方法,本例使用XML方式进行配置,在classpass(src/main/resource)下建立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> <settings> <!-- logImpl属性配置指定使用LOG4J输出日志 --> <setting name="logImpl" value="LOG4J2" /> </settings> <!-- 别名配置,若是未配置在Mapper文件中使用是,须要使用类的全限类名 --> <typeAliases> <package name="com.github.dalianghe.model"/> </typeAliases> <!-- 配置环境,主要配置了数据库链接 --> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"> <property name="" value=""/> </transactionManager> <dataSource type="UNPOOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <!-- 配置Mapper --> <mappers> <mapper resource="mappers/SysUserMapper.xml"/> </mappers> </configuration>
本例使用log4j2框架进行日志输出(所依赖的jar包已经在pom文件中进行了配置),便于咱们观察Mybatis行为,在classpath下新建log4j2.xml文件,并进行配置,代码以下:
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> </Appenders> <Loggers> <Root level="trace"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration>
以上代码编写完成,如今使用Juint编写测试用例,代码以下:
public class SysUserMapperTest { private static SqlSessionFactory sqlSessionFactory ; @BeforeClass public static void init(){ try{ //经过Resources工具类将mybatis配置文件读入Reader Reader reader = Resources.getResourceAsReader("mybatis-config.xml"); //经过SqlSessionFactoryBuilder构造类使用reader建立SqlSessionFactory对象 //在建立SqlSessionFactory对象过程当中,首先解析mybatis-config.xml配置文件,并读取mappers标签配置的Mapper.xml进行解析。 //解析以后,SqlSessionFactory包括了全部属性和要执行的SQL sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); reader.close(); }catch (IOException e){ e.printStackTrace(); } } @Test public void testSelectAll(){ //获取SqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); try{ //经过sqlSession的selectList方法查找到id为selectAll的方法执行sql //执行完后,mybatis将结果集映射为returnType类型并返回 List<SysUser> userList = sqlSession.selectList("selectAll"); printUserList(userList); }finally { //关闭资源 sqlSession.close(); } } private void printUserList(List<SysUser> users){ for(SysUser user : users){ System.out.println(user.toString()); } } }
运行测试方法testSelectAll,如无问题将打印以下内容:
... ... 11:11:47.042 [main] DEBUG com.github.dalianghe.mapper.SysUserMapper.selectAll - ==> Preparing: select id,username,password,phone from sys_user 11:11:47.109 [main] DEBUG com.github.dalianghe.mapper.SysUserMapper.selectAll - ==> Parameters: 11:11:47.130 [main] TRACE com.github.dalianghe.mapper.SysUserMapper.selectAll - <== Columns: id, username, password, phone 11:11:47.130 [main] TRACE com.github.dalianghe.mapper.SysUserMapper.selectAll - <== Row: 1, zhangsan, 123456, 13901234567 11:11:47.133 [main] TRACE com.github.dalianghe.mapper.SysUserMapper.selectAll - <== Row: 2, lishi, 123456, 13901234567 11:11:47.133 [main] TRACE com.github.dalianghe.mapper.SysUserMapper.selectAll - <== Row: 3, wangwu, 123456, 13901234567 11:11:47.133 [main] DEBUG com.github.dalianghe.mapper.SysUserMapper.selectAll - <== Total: 3 User[id=1,username=zhangsan,password=123456,phone=13901234567] User[id=2,username=lishi,password=123456,phone=13901234567] User[id=3,username=wangwu,password=123456,phone=13901234567] ... ...
本节是第一篇关于mybatis的学习,咱们体验了下mybatis的查询功能,后续继续学习更多更强大的功能,本身努力、你们努力。
最后建立了qq群方便你们交流,可扫描加入,同时也可加我qq:276420284,共同窗习、共同进步,谢谢!