笔记要点
出错分析与总结
/**测试第16章的增,删,改 的内容 * 错误1: <insert id="addEmp" parameterType="com.bean.Employee"> ,注意选取数据类型是parameterType,不是Map * 错误2: 按顺序查找全部数据,但是delete清楚数据后, id自增变量不是从零开始的;所以自己的while循环不好! * --------- * 1. mybatis 支持允许增删改查,直接定义如下类型: Integer/long/boolean类型 * 2. 手动提交即可, openSession.commit(); * 3. */
工程组织
EmployeeMapper.xml (加入 增,删,改 的sql映射语句的内容)
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.dao.EmployeeMapper"> <!-- namespace: 名称空间 id: 唯一标识 resultType:返回值类型 #{id} : 从传递过来的参数中取出id值 public Employee getEmpById(Integer id); --> <select id="getEmpById" resultType="com.bean.Employee" databaseId="mysql"> select * from tbl_employee where id = #{id} </select> <!-- public void addEmp(Employee employee); parameterType : 参数类型,可以省略; mysql支持自增主键,自增主键的获取:mybatis也是利用statement.getGeneratedKeys() 调用方法: 在标签中添加即可: useGeneratedKeys="true"; --> <insert id="addEmp" parameterType="com.bean.Employee" useGeneratedKeys="true" keyProperty="id"> insert into tbl_employee(last_name,email,gender) values (#{lastName},#{email},#{gender}) </insert> <!--public void updateEmp(Employee employee);--> <update id="updateEmp" > update tbl_employee set last_name=#{lastName},email=#{email},gender=#{gender} where id=#{id} </update> <!--public void deleteEmpById(Integer id);--> <delete id="deleteEmpById"> delete from tbl_employee where id=#{id} </delete> </mapper>
EmployeeMapper.java [com.dao 下的]
package com.dao; import com.bean.*; //接口式编程! namespace: 名称空间,指定为接口名字; public interface EmployeeMapper { public Employee getEmpById(Integer id); //添加返回值类型,表示mybatis的会话状态是true或者false public boolean addEmp(Employee employee); public boolean updateEmp(Employee employee); public boolean deleteEmpById(Integer id); }
class test_tp16 测试类 [com.test下的]
package com.test; import com.bean.Employee; import com.dao.EmployeeMapper; 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 org.junit.Test; import java.io.IOException; import java.io.InputStream; /**测试第16章的增,删,改 的内容 * 错误1: <insert id="addEmp" parameterType="com.bean.Employee"> ,注意选取数据类型是parameterType,不是Map * 错误2: 按顺序查找全部数据,但是delete清楚数据后, id自增变量不是从零开始的;所以自己的while循环不好! * --------- * 1. mybatis 支持允许增删改查,直接定义如下类型: Integer/long/boolean类型 * 2. 手动提交即可, openSession.commit(); * 3. */ public class test_tp16 { public SqlSessionFactory getSqlSessionFactory() throws IOException { String resource = "mybatis-config.xml"; InputStream inputStream=Resources.getResourceAsStream(resource); return new SqlSessionFactoryBuilder().build(inputStream); } @Test public void test03() throws IOException{ //默认是不自动提交数据的,需要我们自己手动提交 SqlSession openSession = getSqlSessionFactory().openSession(); try { EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class); //1-1 测试:增加一条记录 // Employee employee1 = new Employee(null, "jerry", "jerry@163.com", "0"); // mapper.addEmp(employee1); //1-1-1 测试自增:增加一条记录 Employee employee1 = new Employee(null, "葫芦娃", "葫芦娃@163.com", "0"); mapper.addEmp(employee1); //1-2 测试; 更新一号的名字为 jerry,性别为1 // Employee employee = new Employee(1, "jerry", "jerry@163.com", "1"); // mapper.updateEmp(employee); //1-3 测试删除,删除第二号的员工 // boolean b= mapper.deleteEmpById(2); // System.out.println(b); //1-4 测试; 按顺序查找全部数据, Employee employee; int i=1; while ((employee = mapper.getEmpById(i))!=null){ i++; System.out.println(employee); } //2.手动提交 openSession.commit(); } finally { openSession.close(); } } }