mybatis-sql對映檔案
阿新 • • 發佈:2020-08-01
一、增刪改查
- 引數型別parameterType可以省略,個人認為如果寫入的話能讓開發者更清楚對應的是哪個JavaBean類或者哪種資料結構。
- mybatis允許增刪改的方法直接定義返回值為Integer、Long、Boolean、void這些型別的,mybatis會自動幫我們封裝返回值
- sqlSessionFactory.openSession(),獲取到的SqlSession不會自動提交資料,我們需要手動提交資料;sqlSessionFactory.openSession(true);===》自動提交
對映插入語句
- 自增主鍵新增
mysql支援自增主鍵 useGeneratedKeys="true";使用自增主鍵獲取主鍵值策略 keyProperty="id";指定對應的主鍵屬性;
mybatis利用statement.getGenreatedKeys()獲取到自增主鍵值後,將這個值封裝給javaBean的哪個屬性;不定義的話物件是獲取不到id值的
<insert id="addEmp" parameterType="com.mybatis.bean.Employee" useGeneratedKeys="true" keyProperty="id" databaseId="mysql"> insert into tbl_employee(last_name,email,gender) values(#{lastName},#{email},#{gender})</insert>
-
非自增主鍵新增
Oracle不支援自增,Oracle使用序列來模擬自增,每次插入的資料的主鍵是從序列中拿到的值;
keyProperty:查出的主鍵值封裝給javaBean的哪個屬性
order="BEFORE":先執行selectKey查詢id的sql;查出id值封裝給javaBean的id屬性
resultType:查出的資料的返回值型別
<insert id="addEmp" databaseId="oracle">
<selectKey keyProperty="id" order=" BEFORE" resultType="Integer">
select EMPLOYEES_SEQ.nextval from dual
</selectKey>
insert into employees(EMPLOYEE_ID,LAST_NAME,EMAIL)
values(#{id},#{lastName},#{email<!-- ,jdbcType=NULL -->})
</insert>
order="AFTER":先執行插入的sql(從序列中取出新值作為id);再執行selectKey查詢id的sql;
<insert id="addEmp" databaseId="oracle"> <selectKey keyProperty="id" order="AFTER" resultType="Integer"> select EMPLOYEES_SEQ.currval from dual </selectKey> insert into employees(EMPLOYEE_ID,LAST_NAME,EMAIL) values(employees_seq.nextval,#{lastName},#{email}) </insert>
對映刪除語句
<delete id="deleteEmpById"> delete from tbl_employee where id=#{id} </delete>
對映更新語句
<update id="updateEmp"> update tbl_employee set last_name=#{lastName},email=#{email},gender=#{gender} where id=#{id} </update>
對映查詢語句
<select id="getEmpById" resultType="com.mybatis.bean.Employee"> select * from tbl_employee where id = #{id} </select>
程式碼
@Test public void test03() throws IOException{ SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); //獲取到的SqlSession不會自動提交資料 SqlSession openSession = sqlSessionFactory.openSession(); try{ EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class); //測試新增 Employee employee = new Employee(null, "jerry4",null, "1"); mapper.addEmp(employee); System.out.println(employee.getId()); //測試修改 //Employee employee = new Employee(1, "Tom", "jerry@com", "0"); //boolean updateEmp = mapper.updateEmp(employee); //System.out.println(updateEmp); //測試刪除 //mapper.deleteEmpById(2); //手動提交資料 openSession.commit(); }finally{ openSession.close(); }