Mybatis笔记

     使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper接口开发方法。原始Dao的开发方式是基于入门程序的基础上,对 控制程序 进行分层开发,程序员需要 编写 Dao接口Dao实现类,但对 SQL映射文件、pojo类、sqlMapConfig.xml等 配置文件 并不做改变。

一、映射文件

1、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="test">
  6 	<!-- 根据id获取员工信息 -->
  7 	<select id="findEmpById" parameterType="int" resultType="po.Emp">
  8 		select * from emp where empno = #{empno}
  9 	</select>
 10 
 11 	<!-- 自定义条件查询员工列表 -->
 12 	<select id="findEmpByEmpname" parameterType="java.lang.String" resultType="po.Emp">
 13 	   select * from emp  where ename like '%${value}%'
 14 	</select>
 15 
 16 	<!-- 添加员工信息 -->
 17 	<insert id="insertEmp" parameterType="po.Emp">
 18 	<selectKey keyProperty="empno" order="AFTER" resultType="java.lang.Integer">
 19 		select LAST_INSERT_ID()
 20 	</selectKey>
 21 	  insert into emp(ename,job) values(#{ename},#{job})
 22 	</insert>
 23 
 24 	<!-- 删除员工信息 -->
 25 	<delete id="deleteEmpById" parameterType="int">
 26 		delete from emp where empno=#{empno}
 27 	</delete>
 28 
 29 	<!-- 更新员工信息 -->
 30 	<update id="updateEmp" parameterType="po.Emp">
 31 		update emp set ename=#{ename},job=#{job}
 32 			where empno=#{empno}
 33 	</update>
 34 </mapper>

2、pojo类

  1 package po;
  2 //导入相关类
  3 public class Emp {
  4 	private int empno;
  5 	private String ename;
  6 	private String job;
  7 	private int mgr;
  8 	private Date hiredate;
  9 	private double sal;
 10 	private double comm;
 11 	private int deptno;
 12 
 13 	@Override
 14 	public String toString() {
 15 		return "编号:"+empno+"    姓名:"+ename+"    工作:"+job+"
";
 16 	}
 17 	set()/get()方法 ...
 18 }

3、SqlMapConfig.xml

  1 <?xml version="1.0" encoding="UTF-8" ?>
  2 <!DOCTYPE configuration
  3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4 "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5 <configuration>
  6 	<!-- 和spring整合后 environments配置将废除-->
  7 	<environments default="development">
  8 		<environment id="development">
  9 		<!-- 使用jdbc事务管理-->
 10 			<transactionManager type="JDBC" />
 11 		<!-- 数据库连接池-->
 12 			<dataSource type="POOLED">
 13 				<property name="driver" value="com.mysql.jdbc.Driver" />
 14 				<property name="url" value="jdbc:mysql://localhost:3306/
 15                                                       scott?characterEncoding=utf-8" />
 16 				<property name="username" value="root" />
 17 				<property name="password" value="su486213" />
 18 			</dataSource>
 19 		</environment>
 20 	</environments>
 21 
 22 	<!-- 加载映射文件 -->
 23 	<mappers>
 24 		<mapper resource="SqlMap/Emp.xml"/>
 25 	</mappers>
 26 </configuration>

二、Dao层

1、Dao类

  1 package Dao;
  2 //导入相关类
  3 public interface EmpDao {
  4 	public Emp findEmpById(int empno);
  5 	public List<Emp> findEmpByEmpname(String tname);
  6 	public int insertEmp(Emp emp);
  7 	public int deleteEmpById(int empno);
  8 	public int updateEmp(Emp emp);
  9 }

2、DaoImp类

    实现步骤:① 构造方法:在dao实现类的构造方法中注入SqlSessionFactory

                    ② 方法体:在方法体内通过SqlSessionFactory创建SqlSession

  1 package Dao;
  2 //导入相关类
  3 public class EmpDaoImp implements EmpDao {
  4 
  5 	private SqlSessionFactory sqlSessionFactory ;
  6 	// 在dao实现类的构造方法中注入注入SqlSessionFactory
  7 	public EmpDaoImp(SqlSessionFactory sqlSessionFactory) {
  8 		this.sqlSessionFactory = sqlSessionFactory;
  9 	}
 10 
 11 	@Override
 12 	public Emp findEmpById(int empno) {
 13 		//在方法体内通过SqlSessionFactory创建SqlSession
 14 		SqlSession sqlSession = sqlSessionFactory.openSession();
 15 		Emp emp = null;
 16 		//使用finally语句,保证释放资源操作必须执行
 17 		try {
 18 			emp = sqlSession.selectOne("test.findEmpById",empno);
 19 		}finally {
 20 			sqlSession.close();
 21 		}
 22 		return emp;
 23 	}
 24 
 25 	@Override
 26 	public List<Emp> findEmpByEmpname(String ename) {
 27 		SqlSession sqlSession = sqlSessionFactory.openSession();
 28 		List<Emp> emp = null;
 29 		try {
 30 			 emp = sqlSession.selectList("test.findEmpByEmpname",ename);
 31 		}finally {
 32 			sqlSession.close();
 33 		}
 34 		return emp;
 35 	}
 36 
 37 	@Override
 38 	public int insertEmp(Emp emp) {
 39 		SqlSession sqlSession = sqlSessionFactory.openSession();
 40 		int flag = 0;
 41 		try {
 42 			flag = sqlSession.insert("test.insertEmp",emp);
 43 		}finally{
 44 			//必须提交,更新数据
 45 			sqlSession.commit();
 46 			sqlSession.close();
 47 		}
 48 		return flag;
 49 	}
 50 
 51 	@Override
 52 	public int deleteEmpById(int empno) {
 53 		SqlSession sqlSession = sqlSessionFactory.openSession();
 54 		int flag = 0;
 55 		try {
 56 			flag = sqlSession.delete("test.deleteEmpById",empno);
 57 		}finally{
 58 			//必须提交,更新数据
 59 			sqlSession.commit();
 60 			sqlSession.close();
 61 		}
 62 		return flag;
 63 	}
 64 
 65 	@Override
 66 	public int updateEmp(Emp emp) {
 67 		SqlSession sqlSession = sqlSessionFactory.openSession();
 68 		int flag = 0;
 69 		try {
 70 			flag = sqlSession.update("test.updateEmp",emp);
 71 		}finally{
 72 			//必须提交,更新数据
 73 			sqlSession.commit();
 74 			sqlSession.close();
 75 		}
 76 		return flag;
 77 	}
 78 }
 79 

三、测试程序

1、Junit单元测试

  1 package Test;
  2 //导入相关类
  3 public class Mybatis_Dao {
  4 
  5 	//使用 单例模式 管理会话工厂
  6 	private SqlSessionFactory sqlSessionFactory;
  7 	@Before
  8 	public void createSqlSessionFactory() throws IOException {
  9 		 // Mybatis配置文件
 10 		String resource = "SqlMapConfig.xml";
 11 		// 得到配置文件流
 12 		InputStream inputStream = Resources.getResourceAsStream(resource);
 13 		// 创建会化工厂,传入Mybatis配置文件信息
 14 		sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
 15 	}
 16 
 17 	// 根据 id查询部门信息
 18 	@Test
 19 	public void testFindEmpById() {
 20 		EmpDaoImp empDaoImp = new EmpDaoImp(sqlSessionFactory);
 21 		Emp emp = empDaoImp.findEmpById(7369);
 22 		System.out.println(emp);
 23 	}
 24 
 25 	// 根据员工姓名模糊查询员工信息
 26 	@Test
 27 	public void testFindEmpByEmpname() {
 28 		EmpDaoImp empDaoImp = new EmpDaoImp(sqlSessionFactory);
 29 		List<Emp> emp = empDaoImp.findEmpByEmpname("th");
 30 		for(Emp e:emp) {
 31 			System.out.println(e);
 32 		}
 33 	}
 34 
 35 	// 添加员工信息
 36 	@Test
 37 	public void testInsert() {
 38 		EmpDaoImp empDaoImp = new EmpDaoImp(sqlSessionFactory);
 39 		Emp emp = new Emp();
 40 		emp.setEname("test");
 41 		emp.setJob("test");
 42 		int flag = empDaoImp.insertEmp(emp);
 43 		System.out.println("自增主键值:"+emp.getEmpno());
 44 	}
 45 
 46 	// 更新员工信息
 47 	@Test
 48 	public void testUpdate() {
 49 		EmpDaoImp empDaoImp = new EmpDaoImp(sqlSessionFactory);
 50 		Emp emp = new Emp();
 51 		emp.setEmpno(7946);
 52 		emp.setEname("test7946");
 53 		emp.setJob("test7946");
 54 		int flag = empDaoImp.updateEmp(emp);
 55 		if(flag == 1)
 56 			System.out.println("更新成功!");
 57 	}
 58 
 59 	// 根据id删除员工信息
 60 	@Test
 61 	public void testDelete() {
 62 		EmpDaoImp empDaoImp = new EmpDaoImp(sqlSessionFactory);
 63 		int flag = empDaoImp.deleteEmpById(7946);
 64 		if(flag == 1)
 65 			System.out.println("删除成功!");
 66 	}
 67 }

2、测试结果

(1)根据 id查询部门信息

     image

(2)根据员工姓名模糊查询员工信息

    image

(3)添加员工信息

    image

(4)更新员工信息

    image

(5)根据id删除员工信息

    image

原文地址:https://www.cnblogs.com/sh086/p/8365137.html