首页 > 学院 > 开发设计 > 正文

Mybatis学习笔记之mapper代理

2019-11-08 00:43:29
字体:
来源:转载
供稿:网友

1.为什么不使用传统dao层开发方式?

dao实现类存在大量的模板方法

调用sqlsession方法时,传入参数存在硬编码

sqlSession方法参数为泛型,即使传入参数类型错误,代码编译过程中也不会报错,不利于开发

2.mapper代理开发方式需要遵循那些规范?

mapper代理开发时只需要编写mapper接口(相当于dao接口),不需要书写实现类,mybatis会自动生成mapper接口实现类代理对象,下面为相关规范:

在mapper.xml中,namespace要等于mapper接口的地址

mapper接口中的方法名要等于mapper.xml中statement对象的Id名(Statement 是 java 执行数据库操作的一个重要接口,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句

mapper接口中方法的输入参数类型要与mapper.xml中statement指定的paramType一致

mapper接口中方法的返回类型要等于mapper.xml中statement指定的resultType类型值

3.举个栗子 大家可以看到从下面的简单例子中对比上述所说的规范。

3.1.新建项目,导好相关jar包,修改配置文件 这里写图片描述 MySQL.PRopertist文件:

jdbc.driver:com.mysql.jdbc.Driverjdbc.url:jdbc:mysql://localhost:3306/mybatics?characterEncoding=UTF8jdbc.username:rootjdbc.passWord:111111

全局配置文件mybatiscfg.xml:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration> <!-- 引入外部配置文件 --> <properties resource="com/study/config/mysql.properties"></properties> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <!-- 加載映射文件 --> <mappers> <mapper resource="com/study/mapperxml/BoxMapper.xml"/> </mappers></configuration>

log4j配置文件log4j.properties:

# Global logging configuration#开发环境下日志级别要设置成DEBUG,生产环境设置成info或errorlog4j.rootLogger=DEBUG, stdout# Console output...log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

3.2.新建表,这里是一个四个字段的简单表结构, 然后编写实体类, 这里写图片描述 3.3.编写BoxMapper.xml,这里只举了一个根据name模糊查询的栗子

<?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.study.mapper.BoxMapper"> <select id="selectBoxByName" parameterType="String" resultType="com.study.model.Box"> select * from t_box where name like #{name} </select></mapper>

3.4编写BoxMapper. java

package com.study.mapper;import java.util.List;import com.study.model.Box;public interface BoxMapper { /** * 根据boxName模糊查询box * @param name 盒子名称 * @return 满足条件的盒子集合 */ public List<Box> selectBoxByName(String name);}

3.5.Junit测试

package com.study.junitTest;import java.io.InputStream;import java.util.List;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.Before;import org.junit.Test;import com.study.mapper.BoxMapper;import com.study.model.Box;public class BoxTest{ private SqlSessionFactory sqlSessionFactory; @Before public void beforeTest() throws Exception{ InputStream inputStream = Resources.getResourceAsStream("com/study/config/mybatiscfg.xml"); //构建sqlSession工厂 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } @Test public void testSelectByName() { SqlSession session = sqlSessionFactory.openSession(); BoxMapper boxMapper = session.getMapper(BoxMapper.class); //查询name保护“魔”字的所有box List<Box> blist = boxMapper.selectBoxByName("%魔%"); for(Box b:blist){ System.out.println(b); } session.close(); }}

3.6.数据库及测试输出结果 这里写图片描述 这里写图片描述

4.就这样吧,今天的学习笔记,希望每天都能进步。不对的地方希望大家指出,更希望能帮助到需要的朋友。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表