zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    封装成帧、帧定界、帧同步、透明传输(字符计数法、字符串的首尾填充法、零比特填充的首尾标志法、违规编码法)
    计算机网络之数据链路层的基本概念和功能概述
    物理层设备(中继器、集线器)
    计算机网络之传输介质(双绞线、同轴电缆、光纤、无线电缆、微波、激光、红外线)
    计算机网络之编码与调制
    0953. Verifying an Alien Dictionary (E)
    1704. Determine if String Halves Are Alike (E)
    1551. Minimum Operations to Make Array Equal (M)
    0775. Global and Local Inversions (M)
    0622. Design Circular Queue (M)
  • 原文地址:https://www.cnblogs.com/sh086/p/8365137.html
Copyright © 2011-2022 走看看