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

  • 相关阅读:
    TCHAR转化为UTF8
    Chromium ID 计算方法
    构建之法感悟
    项目名称:上海地铁游
    统一入口的Ajax验证
    基于用户体验的服务型政府网站群建设优化方案
    新技术下的政府门户网站群建设建议
    国内CMS技术发展的外在表现形式
    JavaScript基础 BOM
    JavaScript基础 常见DOM树操作
  • 原文地址:https://www.cnblogs.com/sh086/p/8365137.html
Copyright © 2011-2022 走看看