什麼是 MyBatis?html
MyBatis 是支持普通 SQL 查詢,存儲過程和高級映射的優秀持久層框架。 MyBatis 消除了幾乎全部的 JDBC 代碼和參數的手工設置以及對結果集的檢索。MyBatis 能夠使用簡單的XML 或註解用於配置和原始映射,將接口和 Java 的 POJO(Plain Old Java Objects,普通的Java對象)映射成數據庫中的記錄。java
MyBatis下載:https://github.com/mybatis/mybatis-3/releasesgit
Mybatis實例:github
對一個Student表的CRUD操做web
在Src目錄下建一個mybatis的xml配置文件mybatis.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> <properties resource="db.properties"></properties> <!-- 定義別名 --> <typeAliases> <!-- <typeAlias type="com.model.Student" alias="list"/> --> <package name="com.model"/><!-- 掃描 --> </typeAliases> <!-- mybatis的環境們 --> <environments default="test"> <environment id="test"> <!-- mybatis支持的事務: JDBC:數據源本身的事務管理 MANAGE(託管),不支持tomcat,通常用在大型的商業服務器,weblogic,jboss --> <transactionManager type="JDBC"> </transactionManager> <dataSource type="POOLED"> <property name="driver" value="oracle.jdbc.OracleDriver"></property> <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"></property> <property name="username" value="venus"></property> <property name="password" value="123"></property> </dataSource> </environment> </environments> <mappers> <mapper resource="com/dao/StudentMapper.xml"/> </mappers> </configuration>
定義Student mappers的StudentMapper.xml配置文件apache
<?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.StudentMapper"> <resultMap type="Student" id="stu"> </resultMap> <!-- 查全部數據 --> <select id="list" resultType="student"> select * from student </select> <!-- 插入一條數據 --> <insert id="add" parameterType="student"> insert into student values(#{sno},#{sname},#{ssex},sysdate,#{sclass}) </insert> <!-- 修改一條數據 --> <update id="update" parameterType="student"> update student s set s.sname=#{sname},s.ssex=#{ssex} ,s.sbirthday=sysdate,s.sclass=#{sclass} where s.sno=#{sno} </update> <!-- 刪除一條數據 --> <delete id="del" parameterType="String"> delete student s where s.sno=#{sno} </delete> <!-- 查符合條件的數據 --> <select id="show" parameterType="Map" resultMap="stu"> select * from student s where s.sno like #{p1} and s.sname like #{p2} </select> </mapper>
配置文件實現了接口和SQL語句的映射關係。selectUsersByName採用了2種方式實現,註釋掉的也是一種實現,採用resultMap能夠把屬性和數據庫列名映射關係定義好,property爲類的屬性,column是表的列名,也能夠是表列名的別名!tomcat
Student類的定義(能夠用Hibernate自動生成Student實體類):服務器
package com.model; // Generated 2017-4-19 11:51:47 by Hibernate Tools 5.2.0.CR1 import java.util.Date; /** * Student generated by hbm2java */ public class Student { private String sno; private String sname; private String ssex; private Date sbirthday; private String sclass; public Student() { } public Student(String sno, String sname, String ssex) { this.sno = sno; this.sname = sname; this.ssex = ssex; } public Student(String sno, String sname, String ssex, Date sbirthday, String sclass) { this.sno = sno; this.sname = sname; this.ssex = ssex; this.sbirthday = sbirthday; this.sclass = sclass; } public String getSno() { return this.sno; } public void setSno(String sno) { this.sno = sno; } public String getSname() { return this.sname; } public void setSname(String sname) { this.sname = sname; } public String getSsex() { return this.ssex; } public void setSsex(String ssex) { this.ssex = ssex; } public Date getSbirthday() { return this.sbirthday; } public void setSbirthday(Date sbirthday) { this.sbirthday = sbirthday; } public String getSclass() { return this.sclass; } public void setSclass(String sclass) { this.sclass = sclass; } }
爲了方便寫一個工具類 拿出session:session
package com.util; import java.io.IOException; import java.io.InputStream; 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 MybatisUtil { private static SqlSessionFactory ssf; private static SqlSession ss; public static SqlSession getSqlSession(){ InputStream in = null; try { in = Resources.getResourceAsStream("mybatis.xml"); ssf = new SqlSessionFactoryBuilder().build(in); ss = ssf.openSession(); in.close(); } catch (IOException e) { e.printStackTrace(); } return ss; } }
測試類UserDao:
package com.util; import static org.junit.Assert.*; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.xml.crypto.Data; import org.apache.ibatis.session.SqlSession; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.model.Student; public class JUnit { private SqlSession ss; @Before public void setUp() throws Exception { ss = MybatisUtil.getSqlSession(); } @After public void tearDown() throws Exception { ss.commit(); ss.close(); } //查全部數據 public void test() { List<Student> list = ss.selectList("com.dao.StudentMapper.list"); for(Student data : list){ System.out.println(data.getSname()); } } //增長一條數據 public void addTest(){ Student stu = new Student(); stu.setSno("120"); stu.setSname("張自忠"); stu.setSsex("男"); stu.setSclass("123"); ss.insert("com.dao.StudentMapper.add",stu); } //修改一條數據 public void updateTest(){ Student stu = new Student(); stu.setSno("120"); stu.setSname("張自戀"); stu.setSsex("男"); stu.setSclass("123"); ss.update("com.dao.StudentMapper.update",stu); } //刪除一條數據 public void delTest(){ ss.delete("com.dao.StudentMapper.del","120"); } //查符合條件的數據 @Test public void show(){ Map<String, Object> map = new HashMap<String, Object>(); map.put("p1", "%7"); map.put("p2", "王%"); List<Student> list = ss.selectList("com.dao.StudentMapper.show",map); for(Student data : list){ System.out.println(data.getSname()); } } }
PS:所用到的jar包就兩個 一個是mybatis-3.4.4.jar 另一個是數據庫驅動包:ojdbc6.jar