编写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+" save 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 }