編寫MyBatis配置文件(配置文件可以在上面下載的壓縮包root下找到PDF,裡面也有示例配置)
Emp.xml
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 <mapper namespace="cn.happy.dao.EmpDao"> 6 <resultMap id="empMap" type="cn.happy.entity.Emp"> 7 <id property="empId" column="empNo"/> 8 <result property="empName" column="ENAME"/> 9 <result property="job"/> 10 <result property="mgr"/> 11 <result property="hiredate"/> 12 <result property="sal"/> 13 <result property="comm"/> 14 <association property="dept" javaType="cn.happy.entity.Dept"> 15 <id property="deptNo"/> 16 <result property="deptName" column="DNAME"/> 17 <result property="loc"/> 18 </association> 19 </resultMap> 20 21 <select id="getAllEmpInfo" resultMap="empMap"> 22 select * from Emp e,Dept d where e.deptno=d.deptno 23 </select> 24 25 <!-- <select id="countAll" resultType="int" > 26 select count(*) from Emp 27 </select> --> 28 </mapper>
其中幾個常用的元素的作用如下:( 1.environment 和 2.mappers元素)
1.environment 元素:用於配置多個數據環境,這樣可以映射多個數據庫信息。采用default來指定默認使用哪個數據庫環境。environment則是每個數據庫環境的具體配置,
包括數據連接信息和事務管理信息。
在MyBatis中有兩個事物管理器類型(即type="[JDBC|MANAGED]")
JDBC:直接使用JDBC控制事務,它依賴於從數據庫得到的連接來管理事務范圍。
MANAGED:MyBatis自己不負責控制事務,它會讓容器來管理事務的整個生命周期(如通過Spring或javaEE應用服務器)
數據源類型有三種:UNPOOLED、POOLED、JNDI。
UNPOOLED:這個數據源的實現是每次被請求時簡單打開和關閉連接,它有一點慢,這是對簡單應用程序的一個很好的選擇,因為它不需要及時的可用連接。
POOLED:采用連接池以避免創建新的連接實例時必要的初始連接和認證時間。這是一種當前Web應用程序快速響應請求的很流行的方法。
JNDI:這個數據源的實現是為了使用如Spring 或 應用服務器這類的容器。容器可以集中或在外部配置數據源,MyBatis通過JNDI獲取數據源。
2.mappers元素: 包含所有mapper的列表,告訴MyBatis到哪裡去找SQL語句。mapper主要是定義SQL映射文件。
03. 創建實體化類和數據庫接口 (此處指演示Dept類。。字段比較少,好操作!)
1 public class Dept { 2 private Integer deptNo; 3 4 private String deptName; 5 6 private String loc;
(省略其他getter() and Setter()...) 7 }
04.創建SQL映射文件(DeptMapper.xml 其中添加了對應數據庫增刪改查(模糊查詢)的配置:非ResultMap)
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 <mapper namespace="cn.happy.dao.DeptDao"> 6 7 <select id="getAllDept" resultType="cn.happy.entity.Dept"> 8 select * from Dept 9 </select> 10 11 <insert id="addDept" parameterType="cn.happy.entity.Dept"> 12 insert into dept values(SEQ_NUM.Nextval,#{deptName},#{loc}) 13 </insert> 14 15 <delete id="delDept" parameterType="cn.happy.entity.Dept"> 16 delete from dept where deptNo=#{deptNo} 17 </delete> 18 <update id=""> 19 20 </update> 21 <select id="ilikeDept" parameterType="cn.happy.entity.Dept" resultType="cn.happy.entity.Dept"> 22 select * from Dept where dname like '%${dname}%' 23 </select> 24 </mapper>
對應數據庫增刪改查(模糊查詢)的簡單操作:
1 package cn.happy.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 import org.junit.Before; 12 import org.junit.Test; 13 14 import cn.happy.dao.DeptDao; 15 import cn.happy.entity.Dept; 16 import cn.happy.entity.Emp; 17 18 public class Test3_MyBatis { 19 SqlSession session ; 20 @Before 21 public void getInit() throws IOException{ 22 InputStream stream = Resources.getResourceAsStream("mybatis-config.xml"); 23 SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(stream); 24 session= sf.openSession(); 25 } 26 27 /** 28 * ilikeDept 29 */ 30 @Test 31 public void Test_ilikeDept(){ 32 Dept dept = new Dept(); 33 dept.setDname("務"); 34 List<Dept> list = session.selectList("ilikeDept",dept); 35 for (Dept item : list) { 36 System.out.println(item); 37 } 38 39 40 } 41 42 43 /** 44 * delDept 45 */ 46 @Test 47 public void Test_delDept(){ 48 int count = session.delete("delDept",63); 49 session.commit(); 50 System.out.println(count); 51 } 52 53 /** 54 * addDept 55 */ 56 @Test 57 public void Test_addDept(){ 58 Dept dept=new Dept(); 59 dept.setDname("行政"); 60 dept.setLoc("五道口"); 61 int count = session.insert("addDept",dept); 62 session.commit(); 63 System.out.println(count+"\tsave ok!"); 64 } 65 66 /** 67 * resultMap 68 */ 69 @Test 70 public void Test_getAllEmpInfo(){ 71 List<Emp> list = session.selectList("getAllEmpInfo"); 72 for (Emp item : list) { 73 System.out.println(item.getEmpName()); 74 } 75 } 76 77 /* 78 * 條件查詢 79 */ 80 @Test 81 public void Test03() throws IOException{ 82 83 //List<Dept> list = session.selectList("cn.happy.dao.DeptDao.getAllDept"); 84 DeptDao mapper = session.getMapper(DeptDao.class); 85 List<Dept> list = mapper.getAllDept(); 86 87 for (Dept item : list) { 88 System.out.println(item.getDeptNo()); 89 } 90 //System.out.println(((Dept)obj).getDeptName()); 91 92 } 93 94 95 96 /* 97 * mybatis 查詢員工表記錄數 98 */ 99 @Test 100 public void Test02() throws IOException{ 101 InputStream stream = Resources.getResourceAsStream("mybatis-config.xml"); 102 SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(stream); 103 SqlSession session = sf.openSession(); 104 Object object = session.selectOne("cn.happy.dao.EmpDao.countAll"); 105 System.out.println(object); 106 session.close(); 107 } 108 109 110 @Test 111 public void Test01() throws IOException { 112 String resource = "mybatis-config.xml"; 113 InputStream inputStream = Resources.getResourceAsStream(resource); 114 //獲得會話工廠 115 SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(inputStream); 116 //會話 117 SqlSession session = sf.openSession(); 118 //通過命名空間唯一鎖定要執行的sql 119 Dept dept = (Dept)session.selectOne("cn.happy.entity.Dept.selectDeptByNo", "63"); 120 System.out.println(dept); 121 session.close(); 122 } 123 124 }