• Mybatis笔记


           使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper接口开发方法。 Mapper接口开发方式是基于入门程序的基础上,对 控制程序 进行分层开发,程序员只需要 编写mapper接口Mappe.xml 配置文件即可,程序员编写mapper接口需要遵循一些开发规范,mybatis可以自动生成mapper接口实现类代理对象。

    一、SQL配置文件

    1、EmpMapper.xml

            使用Mapper动态代理的方式开发时, 映射文件namespace 必须为  Mapper接口文件全名

      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="Mapper.EmpMapper">
      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="Mapper/EmpMapper.xml"/>
     25 	</mappers>
     26 </configuration>

    二、Dao层

    1、开发规范

          程序员编写mapper接口需要遵循一些开发规范,mybatis可以自动生成mapper接口实现类代理对象。相关的开发规范如下:

                ① 在mapper.xml中namespace等于mapper接口地址

                ② 接口中的方法名和mapper.xml中statement的id一致

                ③ 接口中的方法输入参数类型和mapper.xml中statement的parameterType指定的类型一致

                ④ 接口中的方法返回值类型和mapper.xml中statement的resultType指定的类型一致

         总结:以上开发规范主要是对下边的代码进行统一生成:

      1 //在方法体内通过SqlSessionFactory创建SqlSession
      2 SqlSession sqlSession = sqlSessionFactory.openSession();
      3 //业务操作语句
      4 Emp emp = sqlSession.selectOne("test.findEmpById",empno);
    

    2、Mapper接口

      1 package Mapper;
      2 //导入相关类
      3 public interface EmpMapper {
      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 }

    三、测试程序

    1、Junit单元测试

      1 package Test;
      2 //导入相关类
      3 public class Mybatis_Mapper {
      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 		SqlSession sqlSession = sqlSessionFactory.openSession();
     21 		//创建EmpMapper对象,mybatis自动生成mapper代理对象
     22 		EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);
     23 		Emp emp = null;
     24 
     25 		try {
     26 			//调用empMapper的方法
     27 			emp = empMapper.findEmpById(7900);
     28 		}finally {
     29 			sqlSession.close();
     30 		}
     31 
     32 		System.out.println(emp);
     33 	}
     34 
     35 	// 根据员工姓名模糊查询员工信息
     36 	@Test
     37 	public void testFindEmpByEmpname() {
     38 		SqlSession sqlSession = sqlSessionFactory.openSession();
     39 		EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);
     40 		List<Emp> emp = null;
     41 
     42 		try {
     43 			//调用empMapper的方法
     44 			emp = empMapper.findEmpByEmpname("th");
     45 		}
     46 		finally {
     47 			sqlSession.close();
     48 		}
     49 
     50 		for(Emp e:emp) {
     51 			System.out.println(e);
     52 		}
     53 	}
     54 
     55 	// 添加员工信息
     56 	@Test
     57 	public void testInsert() {
     58 		SqlSession sqlSession = sqlSessionFactory.openSession();
     59 		EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);
     60 		Emp emp = new Emp();
     61 		emp.setEname("admin");
     62 		emp.setJob("admin");
     63 
     64 		int flag = 0;
     65 		try {
     66 			flag =  empMapper.insertEmp(emp);
     67 		}finally {
     68 			sqlSession.commit();
     69 			sqlSession.close();
     70 		}
     71 
     72 		if(flag == 1) {
     73 			System.out.println("自增主键值:"+emp.getEmpno());
     74 		}
     75 	}
     76 
     77 	// 更新员工信息
     78 	@Test
     79 	public void testUpdate() {
     80 		SqlSession sqlSession = sqlSessionFactory.openSession();
     81 		EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);
     82 		Emp emp = new Emp();
     83 		emp.setEmpno(7950);
     84 		emp.setEname("test7950");
     85 		emp.setJob("test7950");
     86 
     87 		int flag = 0;
     88 		try {
     89 			flag = empMapper.updateEmp(emp);
     90 		}finally {
     91 			sqlSession.commit();
     92 			sqlSession.close();
     93 		}
     94 
     95 		if(flag == 1) {
     96 			System.out.println("更新成功!");
     97 		}
     98 	}
     99 
    100 	// 根据id删除员工信息
    101 	@Test
    102 	public void testDelete() {
    103 		SqlSession sqlSession = sqlSessionFactory.openSession();
    104 		EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);
    105 
    106 		int flag = 0;
    107 		try {
    108 			flag = empMapper.deleteEmpById(7950);
    109 		}finally {
    110 			sqlSession.commit();
    111 			sqlSession.close();
    112 		}
    113 
    114 		if(flag == 1) {
    115 			System.out.println("删除成功!");
    116 		}
    117 	}
    118 }

    2、测试结果

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

        image

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

        image

    (3)添加员工信息

        image

    (4)更新员工信息

        image

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

        image-

  • 相关阅读:
    【318】C# 学习笔记
    【317】python 指定浏览器打开网页 / 文件
    【316】python.requests 读取网页信息
    【315】Windows 之间代码自动传文件
    多线程经典问题-----乘客做公交车问题解答3
    VS2013/2012 下无法打开 源 文件“stdafx.h”的解决方法
    [课堂实践与项目]手机QQ客户端--4期(SQLite的加入,注册,找回,登录界面的修改):建立关于QQ注册类,使用SQLite进行存储,
    《Effective C++》学习笔记条款13 以对象管理资源
    抛弃编程语言的偏见——对话百度架构师
    IOS开发之UINavigationBar
  • 原文地址:https://www.cnblogs.com/sh086/p/8370528.html
Copyright © 2020-2023  润新知