MyBatis运行流程及入门第一个程序
1. mybatis是什么?
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis,是一个基于Java的持久层框架。
1️⃣mybatis托管到goolecode下,再后来托管到github下(https://github.com/mybatis/mybatis-3/releases)。
2️⃣mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成(半自动化,大部分需要程序员编写sql)满足需要sql语句。
3️⃣mybatis可以将向 preparedStatement中的输入参数自动进行输入映射,将查询结果集灵活映射成java对象。(输出映射)
Mybatiis介绍思维导图:https://www.edrawsoft.cn/viewer/public/s/8be08327341014
2.mybatis运行流程
3.入门程序
3.1.搭建环境
mybatis运行环境(jar包):
从https://github.com/mybatis/mybatis-3/releases下载,3.2.7版本
lib下:依赖包
mybatis-3.2.7.jar:核心 包
mybatis-3.2.7.pdf,操作指南
加入mysql的驱动包
3.2工程结构
3.3SqlMapConfig.xml
配置mybatis的运行环境,数据源、事务等。
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 <!-- 选择数据库环境 --> 7 <environments default="development"> 8 <environment id="development"> 9 <!-- 选择事务管理类型 --> 10 <transactionManager type="JDBC" /> 11 <!-- 配置数据源 --> 12 <dataSource type="POOLED"> 13 <property name="driver" value="com.mysql.jdbc.Driver" /> 14 <property name="url" value="jdbc:mysql://localhost:3306/jerry" /> 15 <property name="username" value="root" /> 16 <property name="password" value="1234" /> 17 </dataSource> 18 </environment> 19 </environments> 20 </configuration>
3.4根据员工id(主键)查询员工信息
3.4.1创建po类(实体类)
1 package com.mybatis.model; 2 /** 3 * 员工信息表实体类 4 * @author Administrator 5 * 6 */ 7 public class Emp { 8 9 private Integer emp_id; 10 private String emp_name; 11 private Integer emp_age; 12 private Integer emp_num; 13 private String emp_post; 14 public Integer getEmp_id() { 15 return emp_id; 16 } 17 public void setEmp_id(Integer emp_id) { 18 this.emp_id = emp_id; 19 } 20 public String getEmp_name() { 21 return emp_name; 22 } 23 public void setEmp_name(String emp_name) { 24 this.emp_name = emp_name; 25 } 26 public Integer getEmp_age() { 27 return emp_age; 28 } 29 public void setEmp_age(Integer emp_age) { 30 this.emp_age = emp_age; 31 } 32 public Integer getEmp_num() { 33 return emp_num; 34 } 35 public void setEmp_num(Integer emp_num) { 36 this.emp_num = emp_num; 37 } 38 public String getEmp_post() { 39 return emp_post; 40 } 41 public void setEmp_post(String emp_post) { 42 this.emp_post = emp_post; 43 } 44 45 }
3.4.2 映射文件
映射文件命名:
User.xml(原始ibatis命名),mapper代理开发映射文件名称叫XXXMapper.xml,比如:UserMapper.xml、ItemsMapper.xml 在映射文件中配置sql语句。
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 <!-- namespace 命名空间,作用就是对sql进行分类化管理,理解sql隔离。--> 6 <mapper namespace="test"> 7 <!--在映射文件中可以配置很多sql语句 8 把所用到的sql提取到配置文件中 9 id:sql语句的唯一标识 10 parameterType:指定参数的类型 11 resultType:指定sql输出结果所映射的java对象类型,select指定resultType表示将单条记录映射成java对象 12 #{id}:其中id表示接收输入的参数,参数名就是id。如果是简单类型#{}中的参数名称可以任意写 --> 13 <select id="selectEmpById" parameterType="int" resultType="com.mybatis.model.Emp"> 14 select * from emp_message where emp_id=#{id}; 15 </select> 16 </mapper>
3.4.3 在SqlMapConfig.xml加载映射文件
1 <!-- 加载映射文件--> 2 <mappers> 3 <mapper resource="sqlMapper/empMapper.xml" /> 4 </mappers>
3.5 test程序编写
1 package com.mybatis.test; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.util.List; 6 7 import org.apache.ibatis.io.Resources; 8 import org.apache.ibatis.session.SqlSession; 9 import org.apache.ibatis.session.SqlSessionFactory; 10 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 11 12 import com.mybatis.model.Emp; 13 14 public class Test { 15 //根据员工id查询员工基本信息 16 public static void main(String[] args) { 17 InputStream inputStream = null; 18 try { 19 //mybatis配置文件 20 String reString="sqlMapConfig.xml"; 21 //得到配置文件流 22 inputStream = Resources.getResourceAsStream(reString); 23 //创建会话工厂,传入mybatis配置文件信息 24 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 25 //通过sqlSessionFactory会话工厂 得到 session 26 SqlSession sqlsession = sqlSessionFactory.openSession(); 27 /** 28 * 通过sqlsession操作数据库 29 * 第一个参数:映射文件中的statement的id,等于namespace+“.”+statement的ID 30 * 第二个参数:指定和映射文件中parameterType参数类型所匹配的参数 31 * sqlsession.selectOne结果是与映射文件中resultType返回类型所匹配的对象 32 */ 33 Emp emp=sqlsession.selectOne("test.selectEmpById", 1); 34 System.out.println(emp); 35 //释放资源 36 sqlsession.close(); 37 } catch (IOException e) { 38 // TODO Auto-generated catch block 39 e.printStackTrace(); 40 } 41 42 } 43 }
3.6.测试结果
学习本是一个不断抄袭、模仿、练习、创新的过程。
虽然,园中已有本人无法超越的同主题博文,为什么还是要写。
对于自己,博文只是总结。在总结的过程发现问题,解决问题。
对于他人,在此过程如果还能附带帮助他人,那就再好不过了。
由于博主能力有限,文中可能存在描述不正确,欢迎指正、补充!
感谢您的阅读。如果文章对您有用,那么请轻轻点个赞,以资鼓励。