mybatis基础_动态代理开发

Posted l48x4264l46

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis基础_动态代理开发相关的知识,希望对你有一定的参考价值。

1、使用原始dao开发需要编写mapper的接口和实现类

  1、编写接口

  

public interface UserDao 
    User getUserById(int userId);

  2、编写实现类

public class UserDaoImpl implements UserDao 
    private SqlSessionFactory sqlSessionFactory;

    public UserDaoImpl(SqlSessionFactory sqlSessionFactory) 
        this.sqlSessionFactory = sqlSessionFactory;
    

    @Override
    public User getUserById(int userId) 
        SqlSession sqlSession = sqlSessionFactory.openSession();
        return sqlSession.selectOne("test.selectUserById", 1);
    

  3、编写测试类

  

public class MybatisTest2 
    private SqlSessionFactory sqlSessionFactory;

    @Before
    public void getSqlSessionFactory() throws IOException 
        InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
    


    @Test
    public void Test() 
        UserDao userDao = new UserDaoImpl(sqlSessionFactory);
        User user = userDao.getUserById(1);
        System.out.println(user);
    

2、在编写代码的过程中逐渐发现所有实现类的方方法体内的代码都是相似的,唯独不同的是调用SQLSession的方法不同。所以推荐使用mybatis的动态代理的方式来开发

3、mybatis动态代理开发有五点要求

  1、xml文件和接口必须在同一文件夹(包)下

  2、xml中的id和接口的方法名相同

  3、xml的namespace要和接口的全类名相同

  4、接口的返回值类型要和xml中的一致

  5、xml中的参数要和接口的参数相同

4、使用方式

  1、xml

  

<?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.liuxianglin.mybatis.study.mapper.UserMapper">

<select id="getUserById" parameterType="int" resultType="user"> SELECT * FROM `user` WHERE id = #id; </select> <select id="listUserByName" parameterType="QueryVo" resultType="userMap"> SELECT * FROM `user` WHERE `username` LIKE CONCAT(‘%‘,#user.userName,‘%‘); </select> <select id="getUserCount" resultType="int"> SELECT COUNT(1) FROM `user`; </select> </mapper>

  2、接口

  

public interface UserMapper 
    /**
     * 通过id查询用户数据
     */
    User getUserById(int id);

    /**
     * 模糊查询数据
     */
    List<User> listUserByName(QueryVo queryVo);

    /**
     * 查询用户条目数
     */
    Integer getUserCount();
  

  3、测试类

public class MybatisTest 
    private SqlSessionFactory sqlSessionFactory;

    @Before
    public void getSqlSession() throws IOException 
        /*获得文件流*/
        InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
        /*获取SQLSession工厂*/
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
    

    @Test
    public void test() 
        /*获取SQLSession连接*/
        SqlSession sqlSession = sqlSessionFactory.openSession();
        /*动态代理获取Mapper实现类*/
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        /*执行方法*/
        User user = userMapper.getUserById(1);
        System.out.println(user);
    

 

以上是关于mybatis基础_动态代理开发的主要内容,如果未能解决你的问题,请参考以下文章

深入浅出MyBatis:反射和动态代理

MYBATIS05_ifwherechoosewhentrimsetforEach标签sql片段

动态代理_基础版

Mybatis——Dao层实现映射文件深入核心配置文件深入

Mybatis框架三:DAO层开发Mapper动态代理开发

[mybatis]动态sql_sql_抽取可重用的sql片段