一.Mybatis 入门
一、什么是Mybatis?
MyBatis前身是ibatis,是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。
MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。
MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录。
二、ORM的共同思想
无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点:
1. 从配置文件(通常是XML配置文件中)得到 sessionfactory.
2. 由sessionfactory 产生 session.
3. 在session 中完成对数据的增删改查和事务提交等.
4. 在用完之后关闭session 。
5. 在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。
官方的教程:http://mybatis.github.io/mybatis-3/, 如果英文不是很好的那就看中文的:http://mybatis.github.io/mybatis-3/zh/sqlmap-xml.html
三、Mybatis环境搭建
mybatis 的开发环境搭建,选择: eclipse j2ee 版本,oracle,jdk 1.7,mybatis3.2.0.jar包。这些软件工具均可以到各自的官方网站上下载。
首先建立一个名字为 MyBaits 的 dynamic web project
1. 现阶段,你可以直接建立java 工程,但一般都是开发web项目,这个系列教程最后也是web的,所以一开始就建立web工程。
2. 将 mybatis-3.2.0.jar拷贝到 web工程的lib目录
或者在pom.xml中加入jar包依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>mybatis06</groupId> <artifactId>mybatis06</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <build> <sourceDirectory>src</sourceDirectory> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.0.0</version> <configuration> <warSourceDirectory>WebContent</warSourceDirectory> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.4</version> </dependency> </dependencies> </project>
3.建库,建表,准备数据
4.创建Mybatis配置文件Configuration.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> <typeAliases> <!--java 类所对应的别名,映射文件中的resultType可以为student --> <typeAlias type="com.pojo.Student" alias="student"/> </typeAliases> <environments default="development"> <!-- 数据库开发环境 --> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="oracle.jdbc.driver.OracleDriver" /> <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" /> <property name="username" value="java" /> <property name="password" value="java123" /> </dataSource> </environment> </environments> <!-- 对象的映射文件注册 --> <mappers> <mapper resource="com/pojo/Student.xml"></mapper> </mappers> </configuration>
5.创建持久层:
实体类、实体类对应的dao层接口、实体类对应的Mapper映射文件。
并将Student.xml映射文件在Configuration.xml中注册。
Student.java
package com.pojo; import java.util.Date; public class Student { int stuid; String stuName; int stuAge; Date stuDate; String stuSex; String stuProfess; public int getStuid() { return stuid; } public void setStuid(int stuid) { this.stuid = stuid; } public String getStuName() { return stuName; } public void setStuName(String stuName) { this.stuName = stuName; } public int getStuAge() { return stuAge; } public void setStuAge(int stuAge) { this.stuAge = stuAge; } public Date getStuDate() { return stuDate; } public void setStuDate(Date stuDate) { this.stuDate = stuDate; } public String getStuSex() { return stuSex; } public void setStuSex(String stuSex) { this.stuSex = stuSex; } public String getStuProfess() { return stuProfess; } public void setStuProfess(String stuProfess) { this.stuProfess = stuProfess; } }
IStudentDAO.java
package com.dao; import com.pojo.Student; public interface IStudentDAO { Student getStudentById(int stuid); }
Student.xml
该映射文件里面 主要是定义各种SQL 语句,以及这些语句的参数,以及要返回的类型等
<?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.dao.IStudentDAO"> <select id="getStudentById" parameterType="int" resultType="com.pojo.Student"> select * from student where stuid=#{id} </select> </mapper>
6.编写测试类
Test.java
package com.pojo; import java.io.IOException; import java.io.Reader; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class Test { public static void main(String[] args) throws IOException { //读取核心的配置文件 Reader reader = Resources.getResourceAsReader("Configuration.xml"); //创建会话工厂 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader); //数据库会话 SqlSession session = factory.openSession(); //查询一个对象 第一个参数字符串是由Student.xml 中的namespace+id组成 Student stu = session.selectOne("com.dao.IStudentDAO.getStudentById",5); System.out.println(stu.getStuName()); System.out.println(stu.getStuDate()); session.close(); } }