編寫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 }