【MyBatis框架点滴】——MyBatis开发DAO的两种方法:原始DAO开发方法和Mapper代理方法
来源:互联网 发布:大数据系统架构图 编辑:程序博客网 时间:2024/06/05 09:26
MyBatis常用的开发DAO的方式有两种,第一种就是常用的原始DAO的开发方法,第二种就是Mapper代理的方法。
原始DAO开发方法
原始DAO开发方法就是之前文章《【MyBatis框架点滴】——初识+环境搭建》中的DAO实现方法,编写相应pojo的xml文件,定义DAO接口及其实现类,限于篇幅,这里不再copy-paste~
Mapper代理方法
使用Mapper代理方法开发,与原始DAO开发方法类似,编写mapper配置文件(相当于User.xml)、定义Mapper接口(相当于DAO接口)。
mapper配置文件:
UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD iBatis Mapper 3.0 //EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"><mapper namespace="com.danny.mybatis.mapper.UserMapper"> <select id="findUserById" parameterType="int" resultType="com.danny.mybatis.po.User"> select * from user where id=#{id} </select> <select id="findUserByName" parameterType="java.lang.String" resultType="com.danny.mybatis.po.User"> select * from user where username like '%${value}%' </select> <insert id="insertUser" parameterType="com.danny.mybatis.po.User"> <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer"> select LAST_INSERT_ID() </selectKey> insert into user(id,username,birthday,sex,address) values (#{id},#{username},#{birthday},#{sex},#{address}) </insert> <delete id="deleteUser" parameterType="java.lang.Integer"> delete from user where id=#{id} </delete> <update id="updateUser" parameterType="com.danny.mybatis.po.User"> update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id} </update></mapper>
Mapper接口:
UserMapper.java
package com.danny.mybatis.mapper;import java.util.List;import com.danny.mybatis.po.Person;import com.danny.mybatis.po.User;/** * @ClassName:UserMapper * @Description:用户Mapper * @author Danny * @date 2016年5月29日上午9:06:58 */public interface UserMapper { /** * 根据id查询用户信息 * @param id * @return * @throws Exception */ public User findUserById(int id) throws Exception; /** * 根据用户名模糊查询用户信息 * @param userName * @return * @throws Exception */ public List<User> findUserByName (String userName) throws Exception; /** * 添加用户信息 * @param user * @throws Exception */ public int insertUser(User user) throws Exception; /** * 删除用户信息 * @param id * @throws Exception */ public void deleteUser(int id) throws Exception; /** * * @param 更新用户 * @throws Exception */ public void updateUser(User user) throws Exception;}
如上,对表数据库进行操作时,不需要手动实现mapper接口中的方法(MyBatis框架根据接口定义创建接口的动态代理对象,代理对象的方法跟上面DAO接口的实现类方法类似),直接调用即可。
比如:
SqlSession sqlSession=sqlSessionFactory.openSession();UserMapper userMapper=sqlSession.getMapper(UserMapper.class);User user=userMapper.selectByPrimaryKey(1);System.out.println(null==user?"":user.getUsername());
但是编写mapper配置文件与mapper接口有如下几条约束:
1、mapper配置文件中的namespace必须为mapper接口的全路径(这里为com.danny.mybatis.mapper.UserMapper)
2、mapper接口中的方法名必须为mapper配置文件中statement的id(这里的findUserById、findUserByName等)
3、mapper接口中方法的输入参数类型必须与mapper配置文件中statement的parameterType指定的类型一致
4、mapper接口中方法的返回值类型必须与mapper配置文件中statement的resultType指定的类型一致。
当查询结果返回单条数据时(比如上面的findUserById方法),代理对象内部通过SqlSession的selectOne方法执行查询;当查询结果返回集合时(比如上面的findUserByName方法),代理对象内部通过SqlSession的selectList方法执行查询。
小结
在原始DAO开发方法中,操作数据库需要用SqlSession提供的方法,且SqlSession中有些方法的参数类型为Object类型,所以操作的时候传入的变量类型如果错误,在系统编译阶段无法暴露出来,增加开发负担。
利用Mapper代理开发,除了避免编写mapper接口的实现类,mapper接口、mapper映射文件甚至pojo也可以通过mybatis代码生成器——MyBatisGenerator来自动生成,具有快速、高效的特点。
【 转载请注明出处——胡玉洋《【MyBatis框架点滴】——MyBatis开发DAO的两种方法:原始DAO开发方法和Mapper代理方法 》】
- 【MyBatis框架点滴】——MyBatis开发DAO的两种方法:原始DAO开发方法和Mapper代理方法
- Mybatis中mapper代理方法替换原始Dao开发方法
- mybatis 原始dao开发和mapper代理开发的比较
- Mybatis开发dao的方法--Mapper代理篇
- mybatis--开发Dao--原始dao方式和Mapper代理方式
- mybatis 用原始的dao方法开发
- Mybatis开发dao的方法--原始dao篇
- 【MyBatis学习04】mapper代理方法开发dao
- 【MyBatis学习04】mapper代理方法开发dao
- 【MyBatis学习04】mapper代理方法开发dao
- 【MyBatis学习04】mapper代理方法开发dao
- 【MyBatis学习04】mapper代理方法开发dao
- 【MyBatis学习04】mapper代理方法开发dao
- Mybatis开发dao两种方法
- 【mybatis深度历险系列】深入浅出mybatis中原始dao的开发和mapper代理开发
- Mybatis框架学习(二)—DAO开发方式和Mapper代理的开发方式
- mybatis开发dao方法
- mybatis开发dao方法
- Javascript基础2
- 今天下了场好大的雨
- C语言实现一个简单的词法分析器
- 【BZOJ2440】完全平方数,莫比乌斯反演+二分答案+容斥思想
- CodeForces 300AArray
- 【MyBatis框架点滴】——MyBatis开发DAO的两种方法:原始DAO开发方法和Mapper代理方法
- Java - PAT - 1005. 继续(3n+1)猜想 (25)
- 持久化对象的 四种状态
- 使用jsoup采集网页实例
- Problem3-总结报告
- Androin学习笔记五十九:Android横竖屏切换总结
- 【总结】如何利用云平台构建容错的APP
- 用pandas分析百万电影数据
- Hdu-5344 MZL's xor