Mybatis入门(三)

Mybatis自定义框架(只需了解)

为了更好地了解Mybatis的运行机制,我们将自己定义一个Mybatis,
构建一个属于自己的Mybatis持久层框架,将会涉及到的一些知识点:

工厂模式(Factory 工厂模式)、
构造者模式(Builder 模式)、

代理模式,反射,自定义注解,注解的反射, xml 解析,
数据库元数据,元数据的反射等。

Mybatis运行流程分析

Mybatis入门(三)_第1张图片
框架流程.png


Mybatis实现CRUD

在入门(一)案例中我们用Mybatis初步实现了数据查询功能,
下面我们将学习剩下的数据库功能CRUD的操作,
由于操作不是很繁琐,所以这里只贴出代码以及一些重点

添加用户

IUserDao.java

/**
     * 保存用户操作
     */
    void saveUser(User user);

IUserDao.xml


    

        
            select last_insert_id();
        
        INSERT INTO USER(username,address,sex,birthday)VALUES
        (#{username},#{address},#{sex},#{birthday});
    

这里涉及到一个新的属性parameterType用于对应数据库与实体类属性
#{}操作符相当于我们之前values(?,?,?)的操作,对应实体类中的属性
MybatisTest.java

@Test
    public void testSaveUser() throws Exception{
        User user = new User();
        user.setUsername("mybatis save");
        user.setAddress("这里是数据库");
        user.setSex("男");
        user.setBirthday(new Date());

        //5.执行保存方法
        userDao.saveUser(user);
        //提交事务
        session.commit();
    }

这里切记得进行这里切记得对Sqlsession进行数据库的事务提交
不然数据将无法正常添加到数据库

更新用户

IUserDao.java

/**
     * 更新用户
     */
    void updataUser(User user);

IUserDao.xml

 
    
        UPDATE user SET username=#{username},address=#{address},sex=#{sex},
        birthday=#{birthday} WHERE id=#{id}
    

MybatisTest.java

@Test
    public void testSaveUser() throws Exception{
        User user = new User();
        user.setId(55);
        user.setUsername("mybatis save");
        user.setAddress("数据库被我改啦");
        user.setSex("男");
        user.setBirthday(new Date());

        //5.执行保存方法
        userDao.updataUser(user);
    }

更新操作跟添加操作差不多就不强调了

删除用户

IUserDao.java

/**
     * 删除用户
     */
    void deleteUser(Integer userId);

IUserDao.xml


    
        DELETE FROM user WHERE id = #{id}
    

这里#{id}因为只要一个参数,
所以无论怎么命名都与Integer userId相对应

MybatisTest.java

@Test
    public void testDeleteUser() throws Exception{
        //5.执行保存方法
        userDao.deleteUser(43);
    }
查询一个用户

IUserDao.java

/**
     * id查询用户
     */
    User findById(Integer userId);

IUserDao.xml


    

MybatisTest.java

 @Test
    public void testFindOne() throws Exception{
        //5.执行保存方法
        User user = userDao.findById(50);
        System.out.println(user);
    }
模糊查询

IUserDao.java

/**
     * 姓名模糊查询
     */
    List findByName(String username);

IUserDao.xml


    

执行模糊查询时必须得到实现方法中添加%
或者使用Mybatis特有方法${value}实现模糊查询,
value是固定写法不能改变其参数名,
并且这种方式内部是采用SQL语句拼接的方式,
灵活性不高,所以不推荐使用
#{}是预编译处理,${}是字符串替换。
处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatementset方法来赋值;
处理${}时,就是把${}替换成变量的值
使用#{}可以有效的防止SQL注入,提高系统安全。

MybatisTest.java

public void testFindByName() throws Exception{
        //5.执行保存方法
        List users = userDao.findByName("%王%");
        for(User user : users){
            System.out.println(user);
        }
    }

你可能感兴趣的:(Mybatis入门(三))