1. 程式人生 > >使用動態代理實現dao接口

使用動態代理實現dao接口

1-1 static ron rgs open con 學生 屬性 arc

  • 使用動態代理實現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 }

使用動態代理實現dao接口