mybatis开发之mapper接口开发(无需实现类)

前言:接上一篇(mybatis开发之基本流程),前面不变,对映射文件user.xml进行修改,另一种实现mapper接口开发的方式

一.改变之处

参照上一篇对user.xml配置,本篇mapper.xml配置如下(在config目录下创建一个mapper文件夹,创建usermapper.xml文件):





    
    
        
            
                and sex = #{customUser.sex}
            
            
                and username LIKE CONCAT(CONCAT('%', #{customUser.username}), '%')
            
            
                
                    id=#{item_id}
                
            
        
    
    
    
    
    
    
    
    

    
    

    

    
    

    
    
        -- 将插入的最后一条数据的主键返回给要插入的对象user中,此方法只对主键自增有效
        
            SELECT LAST_INSERT_ID()
        
        INSERT INTO USER(username,password,sex,address) VALUES (#{username},#{password},#{sex},#{address})
    

    
    
    
    
    
    
    
    

    
    
        DELETE FROM USER WHERE username = #{username}
    

    
    
        DELETE FROM USER WHERE id = #{id}
    

    
    
        UPDATE USER SET username=#{username},password=#{password},sex=#{sex},address=#{address} WHERE id=#{id}
    
当然这个usermapper.xml文件需要在sqlmapconfig.xml文件中引入

        
        
        
    
二.mapper接口
public interface UserDaoMapper {
    /**
     * 根据id查询User表记录
     * @param id
     * @return
     * @throws Exception
     */
    public User findUserById(int id) throws Exception;

    /**
     * 根据名称查询
     * @param name
     * @return
     * @throws Exception
     */
    public List findUserByName(String name)throws Exception;

    /**
     * 通过扩展的po类添加扩展查询条件来查询更多的信息(更多的信息以另外扩展的po类来接收)
     * @param userQueryVo
     * @return
     * @throws Exception
     */
    public List findUserList(UserQueryVo userQueryVo)throws Exception;

    /**
     * 综合信息查询出总数
     * @param userQueryVo
     * @return
     * @throws Exception
     */
    public int findUserCount(UserQueryVo userQueryVo)throws Exception;
    /**
     * 向User表添加记录
     * @param user
     * @throws Exception
     */
    public void insertUser(User user) throws Exception;

    /**
     * 删除user表中的记录
     * @param name
     * @throws Exception
     */
    public void deleteUserByName(String name) throws Exception;
    /**
     * 删除user表中的记录
     * @param id
     * @throws Exception
     */
    public void deleteUserById(int id) throws Exception;

    /**
     * 更新user表中的记录
     * @param user
     * @throws Exception
     */
    public void updateUser(User user)throws Exception;

}
三.测试
使用junit来测试,idea需要下载junit插件,使用方法:在接口的java文件界面快捷键 alt+insert 弹出创建test类,注意这里面要选择创建@before/setUp()方法,因为在测试之前需要创建出SqlSessionFactory的实例,进而使用它创建SqlSession,由于SqlSession是线程不安全的,所以我们可以在方法体内创建SqlSession.测试类如下
public class UserDaoMapperTest {


    private SqlSessionFactory sqlSessionFactory;

    @Before
    public void setUp() throws Exception {
        String resource = "SqlMapConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

    }
@Test
    public void findUserById() throws Exception {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserDaoMapper mapper = sqlSession.getMapper(UserDaoMapper.class);
        User user = mapper.findUserById(1);
        System.out.println(user);
    }
 
   
}
 
  

总结:使用mapper代理开发,就是在映射文件(usermapper.xml)中的namespace配置为mapper接口的全路径名.映射文件的配置有很多小的知识点,比如占位符是#{},也可以是${},
但可能引起sql注入.还有复用sql语句等等小知识点,配置文件中写的也很详细了.mybatis框架的特点就是sql语句需要我们自己去写,它的优点就是在自动将参数信息映射成对
应的类,这样相较于纯粹的jdbc开发就不需要再去写prepsredstatement设置参数,都是用映射来完成.


你可能感兴趣的:(JAEE,WEB知识点)