Mybatis面向接口编程
来源:互联网 发布:旅贸通软件 编辑:程序博客网 时间:2024/06/05 21:03
一、出发点
Mybatis面向接口编程主要解决一下接种问题
1.配置文件中namespce命名空间问题
2.sql关联id问题
3.返回值问题
4.传入参数问题
二、Message.xml配置文件
namespce为接口的全类名
id是接口方法名
parameterType是对应方法的参数类型
返回值有resultMap或resultType决定
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.imooc.dao.IMessageDao"> <resultMap type="com.imooc.bean.Message" id="MessageResult"> <id column="id" jdbcType="INTEGER" property="id"/> <result column="command" jdbcType="VARCHAR" property="command"/> <result column="description" jdbcType="VARCHAR" property="description"/> <result column="content" jdbcType="VARCHAR" property="content"/> </resultMap><!-- select标签用于书写查询语句--> <select id="queryMessageList" parameterType="com.imooc.bean.Message" resultMap="MessageResult"> select id,command,description,content from message <where><!-- test中书写布尔表达式,如果成功则拼接下边的条件, command是parameterType中的成员变量 拼接sql的时候会将‘#{command}’替换成?,取值类似于ognl --> <if test="command != null and !"".equals(command.trim())"> and command=#{command} </if> <!-- like 查询一般会拼接concat()拼接两个字符串 --> <if test="description != null and ''!=description.trim()"> and description like concat(concat('%',#{description}),'%') </if> </where> </select> </mapper>
三、接口IMssageDao.java
package com.imooc.dao;import java.util.List;import org.apache.ibatis.annotations.Param;import com.imooc.bean.Message;/** * 于Message配置文件对应的接口 * */public interface IMessageDao {/** * @description: 如果想要执行配置文件中的某天sql语句,就可以定义于配置文件中id相同的方法名 * @param: Message message 是配置文件中对应sql中需要的parameterType * @return: 返回类型即接口返回类型对应配置文件sql申明的返回类型决定 * */public List<Message> queryMessageList(Message message);}
四、使用
调用的时候通过获取到sqlSession中的方法,就可以调用
用法如下边的queryMesageList方法
注:这里感觉使用接口方法还需要多写一个接口类文件,并没有觉得有有什么优点,但是当使用mybatis遇上spring之后,下边的MessageDao.java是不用写的,我们只要写接口文件和对应的配置文件xxx.xml,其他的就交给mybatis管理
package com.imooc.dao;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.ibatis.session.SqlSession;import com.imooc.bean.Message;import com.imooc.common.Page;import com.imooc.db.DBAccess;public class MessageDao {DBAccess dbAccess = new DBAccess(); //不是用接口方法public List<Message> queryMessageList2(String command, String description) throws Exception {List<Message> messagesList = null;SqlSession session = null;try {//获取SqlSessionsession = dbAccess.getSqlSession();Message message = new Message();message.setCommand(command);message.setDescription(description);SqlSession中提供了很多数据库操作的方法,如selectXXX实现对数据库的查询 *的方法Message.class.getName().queryMessageList获取配置文件中id=queryMessageList *对应的sql,message为传入的数据封装对象,一般只能传入一个对象,还可以常用map封装参数 *messagesList = session.selectList(Message.class.getName()+".queryMessageList", message);} catch (Exception e) {e.printStackTrace();throw new Exception(e.getMessage());} finally {if (session != null) {session.close();}}return messagesList;}//使用接口方法public List<Message> queryMessageList(String command, String description) throws Exception {List<Message> messagesList = null;SqlSession session = null;try {//获取SqlSessionsession = dbAccess.getSqlSession();Message message = new Message();message.setCommand(command);message.setDescription(description);/* * 使用动态代理原理 * MapperProxy implements InvocationHandler * 类里边有个MapperProxy.invoke() * Proxy.newPproxyInstance(类加载器,接口,MapperProxy对象) 返回一个IMssageDao的代理对象 * *因为:session.getMapper() == Proxy.newProxyInstance() *所以:IMssageDao imssageDao = Proxy.newProxyInstance() *imssageDao.queryMessageList() == MapperProxy.invoke() * * */IMessageDao iMessageDao = session.getMapper(IMessageDao.class);messagesList = iMessageDao.queryMessageList(message);} catch (Exception e) {e.printStackTrace();throw new Exception(e.getMessage());} finally {if (session != null) {session.close();}}return messagesList;}}
注:本案例思想由慕课网提供指导
1 0
- mybatis--面向接口编程
- Mybatis面向接口编程
- Mybatis 面向接口编程
- Mybatis面向接口编程
- mybatis面向接口编程的小案例
- MyBatis入门学习二:面向接口编程
- Mybatis面向接口编程、参数传递
- MyBatis 实战-使用 maven 构建(2)- 面向接口编程
- 自学mybatis(二)-----面向接口编程实现CRUD
- mybatis详解-(5)面向接口
- MyBatis接口编程模拟
- MyBatis之接口编程
- Mybatis接口式编程
- mybatis接口式编程
- mybatis接口方式编程
- MyBatis接口编程
- 面向接口 的编程
- 面向接口的编程
- 安卓下AlertDialog的使用
- jQuery 从零开始学习 (四) 事件与事件对象
- Django模型操作常用方法总结
- 海量数据处理——推荐文章
- MySQL数据库的入门(一)
- Mybatis面向接口编程
- Maven实战(Maven In Action)
- Leetcode题 257. Binary Tree Paths
- tjut 4699
- 顺时针打印矩阵
- HDU_1114_Piggy-Bank(完全背包)
- LintCode笔记(8)——丑数II
- Jsp---JSTL
- 提高工作效率篇之命令行版的 Alfred —— z