Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 337|回复: 0

[默认分类] Mybatis的基本使用与企业常用MyBatis开发Dao方式

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-6-3 10:00:08 | 显示全部楼层 |阅读模式



      MyBatis是一个优秀的“不完全的”ORM框架,因为它需要程序员手动写SQL,而相对于Hibernate来说更加的灵活。它完成了关系模型到对象模型的映射,话不多说,直奔主题。


      最近公司有一个项目在使用MyBatis作为开发的ORM,所以顺便就来说一点使用MyBatis开发的方式,为了更为纯净,所以此处做与相关框架的整合(如:Spring):

    首先,看一下MyBatis的基本框架:


    另外一个图示(来自百度):




      
    说明:
    1.      SqlMapConfig.xml 文件时MyBatis的核心配置文件,可以配置数据源(链接池)、事务…
    2.      mapper.xml (名字根据需要来定,只要mapper到SqlMapConfig.xml文件中即可)是MyBatis的一个重要的配置文件,用于对javaBean(POJO)做映射。
    3.      SqlSession 会话——面向程序员的接口。用于对数据库的CRUD
    4.      Executor 执行器,底层实现,SqlSession内部是通过Executor来操作数据库的,Executor是一个底层封装对象,用户看不到。Executor需要Mapped Statement中封装的数据信息来操作数据库(mapper.xml中配置的信息+POJO)
    5.      Mapped Statement  是MyBatis的一个封装对象,封装了SQL语句、传入的SQL语句的参数,将SQL查询结果映射(即输出)成的Java对象。


      
    下面,通过三个程序来观察:
    1.      简单MyBatis的入门程序
    2.      使用Dao 与 DaoImpl 的方法的MyBatis程序
    3.      使用动态代理对象的MyBatis
       
    三个程序实现,循序渐进,以为基础:
    1、简单MyBatis的入门程序
    首先建立一个Java工程,导入MyBatis的核心jar包与依赖jar包:
       
    说明:我使用的MyBatis的版本是: mybatis-3.2.8
       
    jar包准备:






      
    lib中为MyBatis的依赖jar包:





      
    导入数据库驱动jar包(使用MySQL)





      
    新建Java Project:MyBatis_Accessor,在项目下新建一个source folder(相当于CLASSPATH): myBatis_config 以及一个folder: lib ,然后将准备好的jar包Paste到lib中去,然后 Add to Build Path






      
    在myBatis_config中添加相关配置文件:
    添加一个log4j的properties 文件(如果你不需要日志,可以不配置,同时可以不导入相关jar包):






      
    1. </pre><p></p><p align="left"> </p><p align="left">log4j. properties 配置代码如下:</p><p align="left"></p><pre name="code" class="java"># Global logging configuration
    2. log4j.rootLogger=DEBUG, stdout
    3. # Console output..
    4. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    5. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    6. log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
    复制代码




      
    log4j的具体配置如有不明之处,自行Google or  Baidu
       
    配置MyBatis的核心配置文件: SqlMapConfig.xml  
       
      
    1. <?xml version="1.0"encoding="UTF-8"?>
    2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTDConfig 3.0//EN"
    3. "http://mybatis.org/dtd/mybatis-3-config.dtd">
    4. <configuration>
    5.    <!-- 注意:在与Spring整合后,此文件将被废除 -->
    6.    <environments default="development">
    7.         <environment id="development">
    8.             <transactionManager type="JDBC" />
    9.             <!-- 配置连接池 -->
    10.             <dataSource type="POOLED">
    11.                 <property name="driver"value="com.mysql.jdbc.Driver" />
    12.                 <property name="url"
    13.                value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull"/>
    14.                 <property name="username"value="root" />
    15.                 <property name="password"value="Jasber0619" />
    16.             </dataSource>
    17.         </environment>
    18.    </environments>
    19.    
    20. </configuration>
    复制代码




      
       
    接下来,在数据库test里面建一张表user_ 并插入几条数据:






      
      
    1. </pre>现在,创建一个POJO类,在其里面重写了toString()方法以便观察 User:<p></p><p align="left"></p><pre name="code" class="java">package cn.jasberyon.mybatis.pojo;
    2. import java.util.Date;
    3. /**
    4. *
    5. * @author Jasber-Yon
    6. * @date 2015-04-18
    7. */
    8. public classUser {
    9.    private Integer id;
    10.    private String username;
    11.    private String pwd;
    12.    private String sex;
    13.    private Date birthday;
    14.   
    15.    public Integer getId() {
    16.       return id;
    17.    }
    18.    public void setId(Integer id) {
    19.       this.id = id;
    20.    }
    21.    public String getUsername() {
    22.       return username;
    23.    }
    24.    public void setUsername(String username) {
    25.       this.username = username;
    26.    }
    27.    public String getPwd() {
    28.       return pwd;
    29.    }
    30.    public void setPwd(String pwd) {
    31.       this.pwd = pwd;
    32.    }
    33.    public String getSex() {
    34.       return sex;
    35.    }
    36.    public void setSex(String sex) {
    37.       this.sex = sex;
    38.    }
    39.    public Date getBirthday() {
    40.       return birthday;
    41.    }
    42.    public void setBirthday(Date birthday) {
    43.       this.birthday = birthday;
    44.    }
    45.   
    46.    @Override
    47.    public String toString() {
    48.       return "User [id="+ id + ", username="+ username+ ", pwd="+ pwd+ ", sex="
    49.             +sex+ ", birthday=" + birthday+ "]";
    50.    }
    51. }
    复制代码




      
       
       
    然后,我们创建一个Mapper配置文件:user_mapper.xml ,即对刚才的POJO类User与user_表进行映射:
       
      
    1. <?xml version="1.0"encoding="UTF-8"?>
    2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTDMapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    3. <mapper namespace="test">
    4.    <select id="findUserByName" parameterType="string"
    5.     resultType="cn.jasberyon.mybatis.pojo.User">
    6.         SELECT * FROM user_ WHERE username=#{id}
    7.    </select>
    8. </mapper>
    复制代码




      


    说明:
    1.  mapper标签中的 namespace命名空间表示为你的这个mapper命名,在后面测试代码中使用sqlsession.selectOne(“namespace名.select标签中id指定的值”,用户sql查询的参数)
    2.  select:将select标签内容称为 statement。
    3.      id:是user_mapper.xml映射文件中唯一标识,statement的id
    4.  parameterType:指定向SQL(向statement中)中传入参数的类型,注意:string,及参数是MyBatis的方言。
    5.  #{}:表示一个占位符,{}中的,id表示传入变量名,当传入单个值时,{}中的变量名可以随意。
    6.  resultType:将SQL查询结果集映射成java对象的类型,注意:其映射成结果集时,不管sql查询的结果是多少条,其类型是代表其中的一条数据的类型,即POJO类型(这在后边的第三种方式中将体现)。
       
    现在,将user_mapper.xml 在 SqlMapConfig.xml 里面进行配置:
      
    1. <!-- 加载映射文件 -->
    2.    <mappers>
    3.       <mapper resource="sql_mapper/user_mapper.xml"/>
    4. </mappers>
    复制代码




      
       
    如图:






      
    好了,现在我们开始编写查询程序(测试) MyBatisTest.java :
       
      
    1. package cn.jasberyon.mybatis.test;
    2. import java.io.IOException;
    3. import java.io.InputStream;
    4. import org.apache.ibatis.io.Resources;
    5. import org.apache.ibatis.session.SqlSession;
    6. import org.apache.ibatis.session.SqlSessionFactory;
    7. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    8. import cn.jasberyon.mybatis.pojo.User;
    9. /**
    10. *
    11. * @author Jasber-Yon<br>
    12. * @date 2015-04-18<br>
    13. */
    14. public classMyBatisTest {
    15.    public static void main(String[] args) throws IOException {
    16.       //MyBatis的配置文件
    17.       Stringresource= "SqlMapConfig.xml";
    18.       InputStreaminputStream= Resources.getResourceAsStream(resource);
    19.        //创建会话工厂
    20.       SqlSessionFactorysqlSessionFactory= newSqlSessionFactoryBuilder().build(inputStream);
    21.       //从会话工厂中得到会话
    22.       SqlSessionsqlSession= sqlSessionFactory.openSession();
    23.       Useruser= sqlSession.selectOne("test.findUserByName","jasber");
    24.    System.out.println("-------------------------------------result-----------------------------------");
    25.       System.out.println(user);
    26.    System.out.println("------------------------------------------------------------------------------");
    27.       //关闭session
    28.       sqlSession.close();
    29.    }
    30. }
    复制代码




      
       
    说明:
            User user =  sqlSession.selectOne("test.findUserByName","jasber");
    一句中“test”为user_mapper.xml文件中mapper标签的namespace指定的命名空间名。“findUserByName”是select标签的唯一标识(指定要执行那一条语句),"jasber"就是我们指定的需要传入查询的参数。
       
       
       
    看一下,我们现在的开发环境的项目结构:






      
    那么,现在我们来总结一下,使用MyBatis的基本开发步骤:
    1.      建立Java项目,导入相关jar包
    2.      配置log4j.properties 文件(可忽略)
    3.      配置MyBatis的核心配置文件 SqlMapConfig.xml(文件名可自定义)文件,在此文件中配置数据库的连接数据源、事务、数据库连接池等。
    4.      创建一个POJO类:User,其类成员属性与数据库中表字段名一致。生成getter和setter方法,如需要可重写toSting()方法。
    5.      编写POJO类与数据库表的映射文件user_mapper.xml(文件名可自定义)。
    6.      将映射文件user_mapper.xml配置到SqlMapConfig.xml(是被映射,托管给MyBatis)。
    7.      编写查询程序(测试)
       
    现在,在已有的基础上,作插入数据(删除、更新同理,详见MyBatis的API)的操作:
    ①  到user_mapper.xml 映射配置文件中去配置一条插入语句:
       
      
    1. <insert id="inserUser"parameterType="cn.jasberyon.mybatis.pojo.User">
    2.    <!-- user_ 是对应的表名,设置参数时,#{}内的值要与User中的属性名一致。因为设置了user_表的id自增,所以插入时就不用管它了 -->
    3.    <!-- 注意SQL结束时不要加分号 -->
    4.       insert into user_(username,pwd, sex, birthday) values(#{username},#{pwd},#{sex},#{birthday})
    5. </insert>
    复制代码




      
       
    截图:






      
    ②  编写插入测试(在原操作代码基础上):






      
    1. User user2= newUser();
    2.       user2.setUsername("MyBatis插入演示");
    3.       user2.setPwd("ggggg123");
    4.       user2.setSex("1");
    5.       user2.setBirthday(new Date());
    6.       //插入数据
    7.       sqlSession.insert("test.inserUser",user2);
    8.       //CUD操作需要事务,提交事务
    9.       sqlSession.commit();
    复制代码




      
       
    运行成功:






      
    查询验证:







      
    好了,我们已经有了一个大体的了解了,现在来演示一下,另外的两种开发方式:企业中使用MyBatis开发Dao方法:
    1.使用Dao 与 DaoImpl 的方法的MyBatis程序
    2.使用动态代理对象的MyBatis的Dao实现
       
    1.使用Dao 与 DaoImpl 的方法的MyBatis程序
    我们需要编写Dao接口以及Dao接口的实现类:DaoImpl。
    开发步骤:
    ①  UserDao.java
    ②  UserDaoImpl.java
    ③  user_mapper.xml 映射文件
       
    ①  UserDao.java :

      
    1. package cn.jasberyon.mybatis.dao;
    2. import cn.jasberyon.mybatis.pojo.User;
    3. /**
    4. *
    5. * @author Jasber-Yon<br>
    6. * @date 2015-04-18<br>
    7. */
    8. public interfaceUserDao {
    9.    /**
    10.     * 查询一个用户
    11.     * @param selectId
    12.     * @param username
    13.     * @return
    14.     * @throws Exception
    15.     */
    16.    public UserfindUserByName(String selectId, String username)throwsException;
    17. }
    复制代码



    ②  UserDaoImpl.java  :
    需要注入SqlSesstionFactory,SqlSesstionFactory生成SqlSesstion,如果是MyBatis和Spring进行整合,那么则让Spring管理(IOC)SqlSesstionFactory,将SqlSesstionFactory在Spring容器中以单例方法存在。因为SqlSesstionFactory创建SqlSesstion的方法是线程安全的。

    1. package cn.jasberyon.mybatis.dao.impl;
    2. import org.apache.ibatis.session.SqlSession;
    3. import org.apache.ibatis.session.SqlSessionFactory;
    4. import cn.jasberyon.mybatis.dao.UserDao;
    5. import cn.jasberyon.mybatis.pojo.User;
    6. public classUserDaoImpl implements UserDao{
    7.    private SqlSessionFactory sqlSessionFactory;
    8.   
    9.    publicUserDaoImpl(SqlSessionFactory sqlSessionFactory) {
    10.       // TODO Auto-generated constructor stub
    11.       this.sqlSessionFactory= sqlSessionFactory;
    12.    }
    13.   
    14.    @Override
    15.    public UserfindUserByName(String selectId, String username)throwsException {
    16.       // TODO Auto-generated method stub
    17.       //从会话工厂得到会话 SqlSession
    18.       SqlSessionsession= this.sqlSessionFactory.openSession();
    19.       Useruser= session.selectOne(selectId, username);
    20.       session.close();
    21.       return user;
    22.    }
    23.   
    24. }
    复制代码

    ③  user_mapper.xml 映射文件
      
    1. <?xml version="1.0"encoding="UTF-8"?>
    2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTDMapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    3. <mapper namespace="test">
    4.    <select id="findUserByName" parameterType="string"
    5.     resultType="cn.jasberyon.mybatis.pojo.User">
    6.         SELECT * FROM user_ WHERE username=#{id}
    7.    </select>
    8. </mapper>
    复制代码



    测试(使用JUnit,Eclipse EE 已集成):
    测试类:UserDaoImplTest
       
    1. package cn.jasberyon.mybatis.dao.impl.j_unit_test;
    2. import java.io.InputStream;
    3. import org.apache.ibatis.io.Resources;
    4. import org.apache.ibatis.session.SqlSessionFactory;
    5. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    6. import org.junit.After;
    7. import org.junit.Before;
    8. import org.junit.Test;
    9. import cn.jasberyon.mybatis.dao.UserDao;
    10. import cn.jasberyon.mybatis.dao.impl.UserDaoImpl;
    11. import cn.jasberyon.mybatis.pojo.User;
    12. public classUserDaoImplTest {
    13.    private SqlSessionFactory sqlSessionFactory;
    14.   
    15.    @Before
    16.    public void setUp() throws Exception {
    17.       //MyBatis的配置文件
    18.       Stringresource= "SqlMapConfig.xml";
    19.       InputStreaminputStream= Resources.getResourceAsStream(resource);
    20.        //创建会话工厂
    21.       this.sqlSessionFactory= newSqlSessionFactoryBuilder().build(inputStream);
    22.    }
    23.   
    24.    @Test
    25.    public void test() throws Exception {
    26.       UserDaouserDao= newUserDaoImpl(sqlSessionFactory);
    27.       Useruser= userDao.findUserByName("test.findUserByName","neo");
    28.    System.out.println("-------------------------------------result-----------------------------------");
    29.       System.out.println(user);
    30.    System.out.println("------------------------------------------------------------------------------");
    31.    }
    32.   
    33.    @After
    34.    public void tearDown() throws Exception {
    35.       System.out.println("Testing is Over");
    36.    }
    37. }
    复制代码



    测试通过:









      
    这个操作的关键点,是要在XxxDaoImpl.java中注入SqlSessionFactory
    此时的项目结构(使用到的用红线标注)







      
    下面是另一种方法,也是我推荐的。
    2.使用动态代理对象的MyBatis
            使用动态代理对象实现,我们只需要编写mapper接口(即Dao接口),不需要再编写其实现类了。
    开发步骤:
    ①  userMapper.xml 映射文件
    ②  UserMapper.java (相当于UserDao接口)
       
    ①  UserMapper.java (相当于UserDao接口)
    1. package cn.jasberyon.mybatis.mapper;
    2. import cn.jasberyon.mybatis.pojo.User;
    3. /**
    4. *
    5. * @author Jasber-Yon<br>
    6. * @date 2015-04-18<br>
    7. */
    8. public interfaceUserMapper {
    9.    public User findUserByName(String suername) throws Exception;
    10. }
    复制代码

       
    ②  userMapper.xml 映射文件
    1. <?xml version="1.0"encoding="UTF-8"?>
    2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTDMapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    3. <!-- 注意:此时 namespace是mapper接口的全限定名 -->
    4. <mapper namespace="cn.jasberyon.mybatis.mapper.UserMapper">
    5.    <select id="findUserByName" parameterType="string"
    6.     resultType="cn.jasberyon.mybatis.pojo.User">
    7.         SELECT * FROM user_ WHERE username=#{id}
    8.    </select>
    9.    
    10. </mapper>
    复制代码

      


    ③  在SqlMapConfig.xml 文件中加载 userMapper.xml文件
       
    1. <!-- 加载映射文件 -->
    2.    <mappers>
    3.       <mapper resource="sql_mapper/userMapper.xml" />
    4.     </mappers>
    复制代码



    ④  测试:
      
    1. package cn.jasberyon.mybatis.dao.impl.j_unit_test;
    2. import java.io.InputStream;
    3. import org.apache.ibatis.io.Resources;
    4. import org.apache.ibatis.session.SqlSession;
    5. import org.apache.ibatis.session.SqlSessionFactory;
    6. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    7. import org.junit.After;
    8. import org.junit.Before;
    9. import org.junit.Test;
    10. import cn.jasberyon.mybatis.mapper.UserMapper;
    11. import cn.jasberyon.mybatis.pojo.User;
    12. public classUserMapperTest {
    13.    private SqlSessionFactory sqlSessionFactory;
    14.   
    15.    @Before
    16.    public void setUp() throws Exception {
    17.       //MyBatis的配置文件
    18.       Stringresource= "SqlMapConfig.xml";
    19.       InputStreaminputStream= Resources.getResourceAsStream(resource);
    20.        //创建会话工厂
    21.       this.sqlSessionFactory= newSqlSessionFactoryBuilder().build(inputStream);
    22.    }
    23.    @After
    24.    public void tearDown() throws Exception {
    25.       System.out.println("Testing is Over");
    26.    }
    27.    @Test
    28.    public voidtestFindUserByUsername() throws Exception {
    29.       //得到 SqlSession
    30.       SqlSessionsqlSession= this.sqlSessionFactory.openSession();
    31.       //通过 sqlSession得到UserMapper的代理对象
    32.       UserMapperuserMapper= sqlSession.getMapper(UserMapper.class);
    33.       //调用UserMapper的查询方法
    34.       Useruser= userMapper.findUserByName("克雷格");
    35.    System.out.println("-------------------------------------result-----------------------------------");
    36.       System.out.println(user);
    37.    System.out.println("------------------------------------------------------------------------------");
    38.    }
    39. }
    复制代码



    测试通过:








      
    那么在演示一个查询用户列表的代码:
    ①  编写(修改一下下,这样该的原因见最后总结)userMapper.xml 文件:
      
    1. <?xml version="1.0"encoding="UTF-8"?>
    2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTDMapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    3. <!-- 注意:此时 namespace是mapper接口的全限定名 -->
    4. <mapper namespace="cn.jasberyon.mybatis.mapper.UserMapper">
    5.    <select id="findUserList" resultType="cn.jasberyon.mybatis.pojo.User">
    6.         SELECT * FROM user_
    7.    </select>
    8.    
    9. </mapper>
    复制代码




      
    ②  在UserMapper.java中添加一个方法:public List<User> findUserList()throws Exception;
    1. package cn.jasberyon.mybatis.mapper;
    2. import java.util.List;
    3. import cn.jasberyon.mybatis.pojo.User;
    4. /**
    5. *
    6. * @author Jasber-Yon<br>
    7. * @date 2015-04-18<br>
    8. */
    9. public interfaceUserMapper {
    10.    public UserfindUserByName(String username) throwsException;
    11.   
    12.    public List<User>findUserList() throwsException;
    13. }
    复制代码



    ③  测试:
    1. package cn.jasberyon.mybatis.dao.impl.j_unit_test;
    2. import java.io.InputStream;
    3. import java.util.List;
    4. import org.apache.ibatis.io.Resources;
    5. import org.apache.ibatis.session.SqlSession;
    6. import org.apache.ibatis.session.SqlSessionFactory;
    7. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    8. import org.junit.After;
    9. import org.junit.Before;
    10. import org.junit.Test;
    11. import cn.jasberyon.mybatis.mapper.UserMapper;
    12. import cn.jasberyon.mybatis.pojo.User;
    13. public classUserMapperTest {
    14.    private SqlSessionFactory sqlSessionFactory;
    15.   
    16.    @Before
    17.    public void setUp() throws Exception {
    18.       //MyBatis的配置文件
    19.       Stringresource= "SqlMapConfig.xml";
    20.       InputStreaminputStream= Resources.getResourceAsStream(resource);
    21.        //创建会话工厂
    22.       this.sqlSessionFactory= newSqlSessionFactoryBuilder().build(inputStream);
    23.    }
    24.   
    25.    @Test
    26.    public void testFindUserList() throws Exception {
    27.       //得到 SqlSession
    28.       SqlSessionsqlSession= this.sqlSessionFactory.openSession();
    29.       //通过 sqlSession得到UserMapper的代理对象
    30.       UserMapperuserMapper= sqlSession.getMapper(UserMapper.class);
    31.       //调用UserMapper的查询方法
    32.       List<User>list= userMapper.findUserList();
    33.    System.out.println("-------------------------------------result-----------------------------------");
    34.       System.out.println(list.size());
    35.    System.out.println("------------------------------------------------------------------------------");
    36.      
    37.       sqlSession.close();
    38.    }
    39.   
    40.    @After
    41.    public void tearDown() throws Exception {
    42.       System.out.println("Testing is Over");
    43.    }
    44. }
    复制代码



    测试通过:








      
    再看一下此时的程序结构(红色标识使用的):





      
    最后我们来总结一下:
    除了前面的小结之外,动态代理对象,开发规则:
    1.      userMapper.xml 的 namespace是UserMapper的(全限定)路径
    2.      userMapper.xml中的statement的id是 UserMapper.java 中的方法名,必须要一致(但是第一种Dao和DaoImpl的方式则不是这样,因为它是在实现方法中限定的,具体请见代码部分)。
    3.      userMapper.xml中的statement的parameterType的类型和UserMapper.java 中的方法形参类型一致
    4.      userMapper.xml 中的statement的resultType的类型和UserMapper.java中的方法返回的值的类型一致(如果返回的是多条,List <User> 那么就是User的全限定路径),resultType的类型应该是查询结果一条记录映射的java对象类型。
    5.      是返回一个List还是单个对象,由UserMapper接口的方法返回值类型来决定。
    6.      如果返回的是一个List集合,生成的代理对象内部调用 sqlSession.selectList() 方法获取一个集合。
    7.      如果返回的是单个对象(一个User),生成的代理对象内部调用 sqlSession.selectOne() 方法获取单个对象。
       
       
    因为时间关系,没有进行详尽的叙述,尚有不足。

      


      
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-3-29 19:35 , Processed in 0.406403 second(s), 52 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表