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文件:
全局配置文件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%n3.2.新建表,这里是一个四个字段的简单表结构, 然后编写实体类, 3.3.编写BoxMapper.xml,这里只举了一个根据name模糊查询的栗子
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.就这样吧,今天的学习笔记,希望每天都能进步。不对的地方希望大家指出,更希望能帮助到需要的朋友。
新闻热点
疑难解答