一、mybatis是什么
mybatis是一种orm的持久化层技术。orm 对象关系映射mybatis就是完成对象和表之间映射关系的持久层框架。
二、mybatis实现数据库查询
举例:利用mybatis完成部门表的查询
第一步,创建web项目,引入mybatis依赖的jar包。(不要忘了引入数据库驱动包这里用oracle示例)
第二步,创建mybatis的主配置文件
可以在src下创建mybatis的主配置文件idea是没有mybatis主配置文件的模板文件的,
我们可以创建mybatis的模板文件
代码如下
<?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">
创建好之后,右键菜单中就会出现该名称的模板文件选项:
有了这个选项之后,我们就可以创建mybatis的主配置文件了。
<?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> <!--配置mybatis的运行环境 mybatis可以连接多个数据库 ,连接一个数据库的信息就是一个运行环境 default指定默认使用哪个运行环境 --> <environments default="myOracleEnv"> <!--连接oracle的环境--> <environment id="myOracleEnv"> <!--配置mybatis的事物管理器 JDBC 使用mybatis自己的事物管理方式,就是使用jdbc的事物管理方式 MANAGED 使用容器的事物管理方式 --> <transactionManager type="JDBC"></transactionManager> <!--配置mybatis连接oracle的连接池信息 POOLED 使用连接池的方式获取数据库连接 UNPOOLD 不使用连接池的方式获取数据库连接 --><dataSource type="POOLED"> <!--数据库的驱动--> <property name="driver" value="oracle.jdbc.driver.OracleDriver"></property> <!-- 数据库连接的url--> <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"></property> <!--数据库连接的用户名--> <property name="username" value="scott"></property> <!-- 数据库连接的密码--> <property name="password" value="tiger"></property> </dataSource> </environment> </environments> </configuration>
主配置文件创建好之后如上所示
第三步,创建mybatis的工厂类工具,用来获取mybatis的SqlSession对象
以后我们做数据库操作都是通过SqlSession来进行的,所以我们可以写一个工厂类帮助工具,用来获取这个
SqlSession对象。
package com.aaa.mybatis.util; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.Reader; /** * 获取SqlSession对象工具类 */ public class SqlSessionFactoryUtil { //获取SqlSession的工厂类对象 private static SqlSessionFactory sessionFactory; //静态代码块,在类加载的时候会自动执行该内容 static{ Reader reader =null; try { //获取Reader对象,读取mybatis的主配置文件 reader = Resources.getResourceAsReader("mybatis.xml"); //利用SqlSessionFactoryBuilder创建工厂类对象 sessionFactory = new SqlSessionFactoryBuilder().build(reader); } catch (IOException e) { e.printStackTrace(); }finally{ try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 提供给用户调用的获取SqlSession的方法 * @return */ public static SqlSession getSession(){ return sessionFactory.openSession(); } }
第四步,创建实体类
创建实体类Dept.java:
package com.aaa.entity; import java.util.List; public class Dept { private int deptno; private String dname; private String loc; private List<Emp> emp; public List<Emp> getEmp() { return emp; } public void setEmp(List<Emp> emp) { this.emp = emp; } public int getDeptno() { return deptno; } public void setDeptno(int deptno) { this.deptno = deptno; } public String getDname() { return dname; } public void setDname(String dname) { this.dname = dname; } public String getLoc() { return loc; } public void setLoc(String loc) { this.loc = loc; } }
第五步,创建dao接口
package com.aaa.dao; import com.aaa.entity.Dept; /** * 部门管理到接口 */ public interface DeptDao { /** * 根据部门编号查询部门信息 * @param deptno * @return */ public Dept selectOneDept(int deptno); }
第六步,创建dao接口的实现的mapper文件
这里我们不需要再用类的方式实现dao接口,我们用mapper文件也就是映射文件来实现dao接口中的方式。使用映射文件,首先应该创建映射文件,映射文件是一个xml格式的文件,所以我们一般也会先创建一个模板,创建模板文件和刚才创建mybatis主配置文件的模板文件步骤是一样的。
模板创建好之后,就可以根据模板创建映射文件了,我们一般把映射文件创建到dao接口的目录下面,名字一般叫
dao接口名称+Mapper.xml, DeptDaoMapper.xml:
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.aaa.dao.DeptDao"> <resultMap id="deptMap" type="com.aaa.entity.Dept"> <id column="deptno" property="deptno"></id> <result column="dname" property="dname"></result> <result column="loc" property="loc"></result> <collection property="emp" ofType="com.aaa.entity.Emp" autoMapping="true"></collection> </resultMap> <select id="selectOneDept" resultMap="deptMap"> SELECT * FROM dept d INNER JOIN emp e on e.deptno=d.deptno WHERE d.deptno=#{deptno} </select> </mapper>
第七步,把mapper文件加载到mybatis的主配置文件中
第八步,创建测试类
package com.aaa.test; import com.aaa.dao.DeptDao; import com.aaa.dao.EmpDao; import com.aaa.entity.Dept; import com.aaa.entity.Emp; import com.aaa.util.SqlSessonFacttoryUtil; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; public class DeptTest { @Test public void sumDeptEmp3(){ SqlSession session = SqlSessonFacttoryUtil.getSession(); DeptDao deptDao = session.getMapper(DeptDao.class); Dept dept = deptDao.selectOneDept(20); System.out.println(dept.getDname()); List<Emp> emp = dept.getEmp(); for (Emp e:emp){ System.out.print("员工姓名:"+e.getEname()); System.out.print("员工编号:"+e.getEmpno()); System.out.println("员工工资:"+e.getSal()); } session.close(); } }
增删改查在mybatis中都有对应的标签
查询<select></select>
添加<insert></insert>
修改<update></update>
删除<delete></delete>