使用動態代理實現dao接口


  •  使用動態代理實現dao接口的實現類

MyBatis允許只聲明一個dao接口,而無需寫dao實現類的方式實現數據庫操作。前提是必須保證Mapper文件中的<mapper>標簽的namespace屬性值必須要和dao接口的類路徑一致,MyBatis容器會自動通過動態代理生成接口的實現類。

Mapper.java

 1 package cn.mybatis.dao;
 2 
 3 import cn.mybatis.domain.Student;
 4 
 5 public interface StudentMapper {
 6     public void insertStudent(Student s);
 7     public void updateStudent(Student s);
 8     public void deleteStudent(String stuid);
 9     public Student selectStudentById(String stuid);
10 }

Mapper.xml

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 4 <mapper namespace="cn.mybatis.dao.StudentMapper">
 5     <resultMap type="student" id="BaseResultMap">
 6         <id column="stu_id" property="stuId" jdbcType="VARCHAR" javaType="java.lang.String" />
 7         <result column="stu_name" property="stuName" jdbcType="VARCHAR" javaType="java.lang.String" />
 8         <result column="stu_birthdate" property="stuBirthdate" jdbcType="DATE" javaType="java.util.Date" />
 9         <result column="stu_phone" property="stuPhone" jdbcType="VARCHAR" javaType="java.lang.String" />
10     </resultMap>
11 
12     <!-- 插入數據 -->
13     <insert id="insertStudent" parameterType="student">
14         insert into student (stu_id,stu_name,stu_birthdate,stu_phone)
15         values(#{stuId},#{stuName},#{stuBirthdate},#{stuPhone})
16     </insert>
17     
18     <!-- 更新數據 -->
19     <update id="updateStudent" parameterType="student">
20         update student set stu_name=#{stuName}, stu_birthdate=#{stuBirthdate},
21         stu_phone=#{stuPhone} where stu_id=#{stuId}
22     </update>
23     <!-- 刪除數據 -->
24     <delete id="deleteStudent" parameterType="string">
25         delete from student where stu_id=#{stuId}
26     </delete>
27     
28     <!-- 查詢數據,返回的數據會根據resultMap設置封裝到實體類對象中 -->
29     <select id="selectStudentById" resultType="cn.mybatis.domain.Student" parameterType="string" >
30         select stu_name as stuName from student where stu_id=#{stuId}
31     </select>
32 </mapper>

測試

 1 package cn.mybatis.demo;
 2 
 3 import java.io.InputStream;
 4 import java.text.SimpleDateFormat;
 5 
 6 import org.apache.ibatis.io.Resources;
 7 import org.apache.ibatis.session.SqlSession;
 8 import org.apache.ibatis.session.SqlSessionFactory;
 9 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
10 import org.apache.log4j.Logger;
11 
12 import cn.mybatis.dao.StudentMapper;
13 import cn.mybatis.domain.Student;
14 
15 public class Demo_01 {
16     private static SqlSessionFactory fac;
17     static{
18         InputStream is = null;
19         try{
20             //處理並根據config配置文件實例化SqlSessionFactory
21             is = Resources.getResourceAsStream("SqlMapperConfig.xml");
22             //獲取session工廠類
23             fac = new SqlSessionFactoryBuilder().build(is);
24         }catch(Exception e){
25             e.printStackTrace();
26             Logger.getLogger(Demo_01.class).debug(e.getMessage());
27         }
28     }
29     public static void main(String[] args) throws Exception {
30         //創建要保存的學生信息
31         Student s = new Student();
32         s.setStuId("5");
33         s.setStuName("zhou");
34         s.setStuBirthdate(new SimpleDateFormat("yyyy-MM-dd").parse("1991-1-12"));
35         s.setStuPhone("341324123");
36         
37         SqlSession session = fac.openSession();
38         StudentMapper mapper = session.getMapper(StudentMapper.class);
39 //        mapper.insertStudent(s);
40 //        mapper.updateStudent(s);
41 //        mapper.deleteStudent("5");
42         Student s1 = mapper.selectStudentById("1");
43         System.out.println(s1.getStuName());
44         session.commit();
45         session.close();
46     }
47 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM