使用动态代理实现dao接口

Posted zhouyeqin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用动态代理实现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 }

 

以上是关于使用动态代理实现dao接口的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis精简版--实现接口代理方式实现Mapper(Dao) 和动态SQL

MyBatis精简版--实现接口代理方式实现Mapper(Dao) 和动态SQL

MyBatis精简版--实现接口代理方式实现Mapper(Dao) 和动态SQL

MyBatis使用mapper动态代理实现DAO接口

mybatis--动态代理实现

02.MyBatis在DAO层开发使用的Mapper动态代理方式